هندسة المحفزات

من الصفر إلى هندسة الموجّهات المتقدمة باستخدام LangChain في Python

mm
أضف Unite.AI إلى مصادرك المفضلة على Google

من الجوانب المهمة للنماذج اللغوية الكبيرة (LLMs) هو عدد المعاملات التي تستخدمها هذه النماذج للتعلم. كلما زادت المعاملات التي يمتلكها النموذج، زادت قدرته على فهم العلاقة بين الكلمات والعبارات. هذا يعني أن النماذج التي تحتوي على مليارات المعاملات لديها القدرة على توليد أنواع مختلفة من التنسيقات النصية الإبداعية والإجابة على الأسئلة المفتوحة والصعبة بطريقة مفيدة.

النماذج اللغوية الكبيرة مثل ChatGPT، التي تستخدم نموذج Transformer، ماهرة في فهم اللغة البشرية وتوليدها، مما يجعلها مفيدة للتطبيقات التي تتطلب فهم اللغة الطبيعية. ومع ذلك، فإنها ليست خالية من القيود، والتي تشمل المعرفة القديمة، عدم القدرة على التفاعل مع الأنظمة الخارجية، نقص فهم السياق، وأحيانًا توليد استجابات تبدو معقولة ولكنها خاطئة أو غير منطقية، من بين أمور أخرى.

معالجة هذه القيود تتطلب دمج النماذج اللغوية الكبيرة مع مصادر بيانات وقدرات خارجية، مما قد يسبب تعقيدات ويتطلب مهارات برمجة وتنسيق بيانات مكثفة. هذا، بالإضافة إلى تحديات فهم مفاهيم الذكاء الاصطناعي والخوارزميات المعقدة، يساهم في منحنى التعلم المرتبط بتطوير التطبيقات باستخدام النماذج اللغوية الكبيرة.

ومع ذلك، يمكن لدمج النماذج اللغوية الكبيرة مع أدوات أخرى لتشكيل تطبيقات مدعومة بها أن يعيد تعريف المشهد الرقمي لدينا. إمكانيات مثل هذه التطبيقات واسعة النطاق، بما في ذلك تحسين الكفاءة والإنتاجية، وتسهيل المهام، وتحسين اتخاذ القرارات، وتقديم تجارب شخصيّة.

في هذه المقالة، سنغوص أعمق في هذه القضايا، مستكشفين التقنيات المتقدمة لهندسة الموجّهات مع Langchain، مع تقديم شرح واضح وأمثلة عملية وتعليمات خطوة بخطوة حول كيفية تنفيذها.

Langchain، وهو مكتبة متقدمة، يُحضر الراحة والمرونة في تصميم وتنفيذ وتحسين الموجّهات. بينما نكشف عن مبادئ وممارسات هندسة الموجّهات، ستتعلم كيف تستخدم ميزات Langchain القوية للاستفادة من نقاط قوة نماذج الذكاء الاصطناعي التوليدي المتقدمة مثل GPT-4.

فهم الموجّهات

قبل الغوص في الجوانب الفنية لهندسة الموجّهات، من المهم فهم مفهوم الموجّهات وأهميتها.

الموجّه هو تسلسل من الرموز التي يتم استخدامها كمدخل لنماذج اللغة، لتوجيهها لتوليد نوع معين من الاستجابة. الموجّهات تلعب دورًا حاسمًا في توجيه سلوك النموذج. يمكن أن تؤثر على جودة النص المولّد، وعندما يتم صياغتها بشكل صحيح، يمكن أن تساعد النموذج على تقديم نتائج مدروسة ودقيقة ومتعلقة بالسياق.

هندسة الموجّهات هي فن وعلم تصميم موجّهات فعالة. الهدف هو استخراج الإخراج المطلوب من نموذج اللغة. من خلال اختيار وتركيب الموجّهات بعناية، يمكن توجيه النموذج نحو توليد استجابات أكثر دقة وملاءمة. في الممارسة، يتضمن هذا تحسين العبارات المدخلة لتتناسب مع التحيزات الهيكلية والتدريبية للنموذج.

تعقيد هندسة الموجّهات يتراوح من تقنيات بسيطة، مثل تغذية النموذج بالكلمات المفتاحية ذات الصلة، إلى أساليب أكثر تقدمًا تتضمن تصميم موجّهات معقدة ومنظمة تستخدم الآليات الداخلية للنموذج لصالحها.

Langchain: أداة الموجّه الأسرع نموًا

LangChain، الذي تم إطلاقه في أكتوبر 2022 بواسطة Harrison Chase، أصبح واحدًا من أطر العمل مفتوحة المصدر الأعلى تقييمًا على GitHub في 2023. يقدم واجهة مبسطة ومعيارية لدمج النماذج اللغوية الكبيرة في التطبيقات. كما يوفر واجهة غنية لهندسة الموجّهات، مما يسمح للمطورين بتجربة استراتيجيات مختلفة وتقييم نتائجهم. من خلال استخدام Langchain، يمكنك أداء مهام هندسة الموجّهات بشكل أكثر فعالية وبداهة.

LangFlow يخدم كواجهة مستخدم لتنسيق مكونات LangChain في مخطط تنفيذ قابل للتشغيل، مما يسمح بالتجارب السريعة والاختبارات.

LangChain يملأ فجوة حيوية في تطوير الذكاء الاصطناعي للجميع. يتيح مجموعة من تطبيقات معالجة اللغة الطبيعية مثل المساعدين الافتراضيين، مولدات المحتوى، أنظمة الإجابة على الأسئلة، وغيرها، لحل مجموعة من المشاكل الواقعية.

بدلاً من كونه نموذجًا مستقلًا أو مزودًا، LangChain يبسط التفاعل مع نماذج مختلفة، مما يوسع قدرات تطبيقات النماذج اللغوية الكبيرة وراء قيود مكالمة API بسيطة.

هيكل LangChain

 

المكونات الرئيسية في LangChain تشمل مدخلات ومخرجات النموذج، قوالب الموجّهات، الذاكرة، الوكلاء، والسلاسل.

مدخلات ومخرجات النموذج

LangChain يسهل الاتصال السلس مع مختلف نماذج اللغة من خلال تغليفها بواجهة معيارية تعرف باسم مدخلات ومخرجات النموذج. هذا يسهل تبديل النموذج لتحسين الأداء أو لتحقيق أداء أفضل. LangChain يدعم مختلف مزودي نماذج اللغة، بما في ذلك OpenAI، HuggingFace، Azure، Fireworks، وغيرها.

قوالب الموجّهات

تستخدم لإدارة وتحسين التفاعلات مع النماذج اللغوية الكبيرة من خلال تقديم تعليمات أو أمثلة موجزة. تحسين الموجّهات يعزز أداء النموذج، وتعزز مرونتها بشكل كبير في عملية الإدخال.

مثال بسيط على قالب الموجّه:


from langchain.prompts import PromptTemplate
prompt = PromptTemplate(input_variables=["subject"],
template="What are the recent advancements in the field of {subject}?")
print(prompt.format(subject="Natural Language Processing"))

كما نتقدم في التعقيد، نجد أنماطًا أكثر تعقيدًا في LangChain، مثل نمط Reason and Act (ReAct). ReAct نمط حاسم لتنفيذ الإجراءات حيث يخصص الوكيل مهمة إلى أداة مناسبة، ويعدل الإدخال لها، ويحلل مخرجاتها لتحقيق المهمة. مثال بايثون أدناه يظهر نمط ReAct. يظهر كيف يتم هيكلة الموجّه في LangChain، باستخدام سلسلة من الأفكار والإجراءات لمناقشة مشكلة وتوليد إجابة نهائية:

PREFIX = """Answer the following question using the given tools:"""
FORMAT_INSTRUCTIONS = """Follow this format:
Question: {input_question}
Thought: your initial thought on the question
Action: your chosen action from [{tool_names}]
Action Input: your input for the action
Observation: the action's outcome"""
SUFFIX = """Start!
Question: {input}
Thought:{agent_scratchpad}"""

الذاكرة

الذاكرة مفهوم حاسم في LangChain، مما يسمح للنماذج اللغوية الكبيرة والأدوات بالحفاظ على المعلومات مع مرور الوقت. هذا السلوك الذي يحتفظ بالحالة يحسن أداء تطبيقات LangChain من خلال تخزين الاستجابات السابقة، وتفاعلات المستخدم، حالة البيئة، وأهداف الوكيل. استراتيجيات الذاكرة مثل ConversationBufferMemory وConversationBufferWindowMemory تساعد في تتبع أجزاء كاملة أو الأجزاء الأخيرة منها، على التوالي. لمقاربة أكثر تعقيدًا، تسمح استراتيجية ConversationKGMemory بترميز المحادثة كرسم بياني معرفي يمكن إعادة تغذيته إلى الموجّهات أو استخدامها للتنبؤ بالاستجابات دون استدعاء النموذج اللغوي.

الوكلاء

الوكيل يتفاعل مع العالم من خلال أداء الإجراءات والمهام. في LangChain، يجمع الوكلاء الأدوات والسلاسل لتنفيذ المهام. يمكنه أن يؤسس اتصالًا بالعالم الخارجي لاسترجاع المعلومات لتعزيز معرفة النموذج اللغوي، وبالتالي يتغلب على قيوده المتأصلة. يمكنه أن يختار تمرير الحسابات إلى آلة حاسبة أو مفسّر بايثون حسب الموقف.

الوكلاء مجهزون بمكونات فرعية:

  • الأدوات: هذه المكونات الوظيفية.
  • حزم الأدوات: مجموعات من الأدوات.
  • منفذ الوكيل: هذا هو آليّة التنفيذ التي تسمح باختيار الأدوات.

الوكلاء في LangChain يتبعون أيضًا نمط ReAct دون أمثلة (Zero-shot)، حيث يعتمد القرار فقط على وصف الأداة. يمكن تمديد هذه الآلية مع الذاكرة لاتخاذ قرارات تعتمد على تاريخ المحادثة الكامل. مع ReAct، بدلاً من طلب النموذج اللغوي لإكمال نصك، يمكنك تحفيزه على الاستجابة في حلقة تفكير/عمل/ملاحظة.

السلاسل

السلاسل، كما يشير اسمها، هي تسلسلات من العمليات التي تسمح لمكتبة LangChain بمعالجة مدخلات ومخرجات نموذج اللغة بشكل متسلسل. هذه المكونات الأساسية في LangChain تتكون أساسًا من روابط، والتي يمكن أن تكون سلاسل أخرى أو عناصر أولية مثل الموجّهات أو نماذج اللغة أو الأدوات.

تخيل سلسلة كحزام ناقل في مصنع. كل خطوة على هذا الحزام تمثل عملية معينة، والتي يمكن أن تكون استدعاء نموذج لغوي أو تطبيق وظيفة بايثون على نص أو حتى تحفيز النموذج بطريقة معينة.

LangChain يقسم سلاسله إلى ثلاثة أنواع: سلاسل الأدوات المساعدة، السلاسل العامة، وسلاسل دمج الوثائق. سنغوص في سلاسل الأدوات المساعدة والسلاسل العامة لموضوعنا.

  • سلاسل الأدوات المساعدة مصممة خصيصًا لاستخراج إجابات دقيقة من نماذج اللغة لمهام محددة بشكل ضيق. على سبيل المثال، لننظر إلى سلسلة LLMMathChain. هذه سلسلة أدوات مساعدة تمكن نماذج اللغة من أداء حسابات رياضية. تقبل سؤالًا بلغة طبيعية، وينتج النموذج اللغوي شفرة بايثون التي يتم تنفيذها بعد ذلك لإنتاج الإجابة.
  • السلاسل العامة، من ناحية أخرى، تعمل كوحدات بناء لتشكيل سلاسل أخرى، ولكنها لا يمكن استخدامها بشكل مستقل. هذه السلاسل، مثل LLMChain، هي أساسية وتستخدم بشكل شائع لتشكيل سلاسل أخرى لتنفيذ مهام معقدة. على سبيل المثال، سلسلة LLMChain تستخدم بشكل شائع لاستجواب كائن نموذج لغوي عن طريق تنسيق الإدخال بناءً على قالب موجّه معين ومن ثم تمريره إلى النموذج اللغوي.

تنفيذ هندسة الموجّهات خطوة بخطوة مع Langchain

سنقودك خلال عملية تنفيذ هندسة الموجّهات باستخدام Langchain. قبل المتابعة، تأكد من تثبيت البرامج والحزم الضرورية.

يمكنك الاستفادة من أدوات شائعة مثل Docker وConda وPip وPoetry لتثبيت LangChain. يمكن العثور على الملفات التثبيتية ذات الصلة لكل هذه الطرق في مستودع LangChain على https://github.com/benman1/generative_ai_with_langchain. هذا يشمل ملف Dockerfile لDocker وملف requirements.txt لPip وملف pyproject.toml لPoetry وملف langchain_ai.yml لConda.

في مقالنا، سنستخدم Pip، وهو مدير الحزمة القياسي لبايثون، لتسهيل تثبيت وإدارة المكتبات الخارجية. إذا لم يكن Pip مدرجًا في توزيع بايثون الخاص بك، يمكنك تثبيته باتباع الإرشادات على https://pip.pypa.io/.

للتثبيت باستخدام Pip، استخدم الأمر pip install library_name.

ومع ذلك، لا يدير Pip البيئات بنفسه. لتحديد البيئات، نستخدم أداة virtualenv.

في القسم التالي، سنناقش دمج النماذج.

الخطوة 1: إعداد Langchain

أولاً، تحتاج إلى تثبيت حزمة Langchain. نحن نستخدم نظام التشغيل Windows. قم بتشغيل الأمر التالي في الطرفية لديك لتثبيته:


pip install langchain

الخطوة 2: استيراد Langchain والوحدات الضرورية الأخرى

بعد ذلك، استورد Langchain جنبًا إلى جنب مع الوحدات الأخرى الضرورية. هنا، نستورد أيضًا مكتبة Transformers، التي يتم استخدامها على نطاق واسع في مهام معالجة اللغة الطبيعية.


import langchain
from transformers import AutoModelWithLMHead, AutoTokenizer

الخطوة 3: تحميل النموذج المُدرب مسبقًا

Open AI

نماذج OpenAI يمكن الوصول إليها بسهولة من خلال مكتبة LangChain أو مكتبة العميل البايثونية لOpenAI. بشكل ملحوظ، يوفر OpenAI فئة التضمين للنماذج التضمين النصية. هناك نموذجان رئيسيان هما GPT-3.5 وGPT-4، ويختلفان أساسًا في سعة السياق بالرموز. يمكن العثور على أسعار كل نموذج على موقع OpenAI. بينما هناك نماذج أكثر تطورًا مثل GPT-4-32K التي لديها قبول رمز أعلى، توافرها عبر واجهة برمجة التطبيقات ليس مضمونًا دائمًا.

الوصول إلى هذه النماذج يتطلب مفتاح API لOpenAI. يمكن القيام بذلك عن طريق إنشاء حساب على منصة OpenAI، إعداد معلومات الفاتورة، وتوليد مفتاح سري جديد.


import os
os.environ["OPENAI_API_KEY"] = 'your-openai-token'

بعد إنشاء المفتاح بنجاح، يمكنك تعيينه كمتغير بيئة (OPENAI_API_KEY) أو تمريره كعامل خلال إنشاء الفئة للنداءات لOpenAI.

نفترض سكريبت LangChain لتوضيح التفاعل مع نماذج OpenAI:

from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003")
# The LLM takes a prompt as an input and outputs a completion
prompt = "who is the president of the United States of America?"
completion = llm(prompt)
الرئيس الحالي للولايات المتحدة الأمريكية هو جو بايدن.

في هذا المثال، تتم تهيئة الوكيل لتنفيذ الحسابات. الوكيل يأخذ إدخالًا، وهو مهمة إضافة بسيطة، ويعالجها باستخدام نموذج OpenAI المقدم، ويعيد النتيجة.

Hugging

Hugging Face هي مكتبة مجانًا للتحويلات، متوافقة مع PyTorch وTensorFlow وJAX، وتشمل تنفيذ نماذج مثل BERT وT5، وغيرها.

Hugging Face تقدم أيضًا منصة Hugging Face Hub، وهي منصة لاستضافة مخازن الشفرة، ونماذج التعلم الآلي، و مجموعات البيانات، و التطبيقات الويب.

لاستخدام Hugging Face كمزود للنماذج الخاصة بك، ستحتاج إلى حساب ومفاتيح API، والتي يمكن الحصول عليها من موقعهم. يمكن إتاحة الرمز في بيئتك ك HUGGINGFACEHUB_API_TOKEN.

نفترض شفرة بايثون التالية التي تستخدم نموذجًا مفتوح المصدر طورته جوجل (GOOGL )، وهو Flan-T5-XXL:

from langchain.llms import HuggingFaceHub

llm = HuggingFaceHub(model_kwargs={"temperature": 0.5, "max_length": 64},repo_id="google/flan-t5-xxl")
prompt = "In which country is Tokyo?"
completion = llm(prompt)
print(completion)

هذه الشفرة تأخذ سؤالًا كمدخل وتعيد إجابة، مما يظهر المعرفة والقدرة التنبؤية للنموذج.

الخطوة 4: هندسة الموجّهات الأساسية

لنبدأ بموجّه بسيط ونرى كيف يستجيب النموذج.

prompt = 'Translate the following English text to French: "{0}"'
input_text = 'Hello, how are you?'
input_ids = tokenizer.encode(prompt.format(input_text), return_tensors='pt')

generated_ids = model.generate(input_ids, max_length=100, temperature=0.9)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))

في الشفرة السابقة، نقدم موجّهًا لترجمة نص إنجليزي إلى فرنسية. النموذج اللغوي يحاول ترجمة النص المحدد بناءً على الموجّه.

الخطوة 5: هندسة الموجّهات المتقدمة

بينما يعمل النهج السابق جيدًا، إلا أنه لا يستفيد بشكل كامل من قوة هندسة الموجّهات. دعونا نطوره عن طريق تقديم بنى موجّهات أكثر تعقيدًا.

prompt = 'As a highly proficient French translator, translate the following English text to French: "{0}"'
input_text = 'Hello, how are you?'
input_ids = tokenizer.encode(prompt.format(input_text), return_tensors='pt')

generated_ids = model.generate(input_ids, max_length=100, temperature=0.9)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))

في هذه الشفرة، نعدل الموجّه لاقتراح أن الترجمة يتم إجراؤها بواسطة ‘مترجم فرنسي ماهر’. التغيير في الموجّه يمكن أن يؤدي إلى ترجمات محسنة، حيث يفترض النموذج الآن شخصية خبير.

بناء نظام أسئلة وأجوبة الأبحاث الأكاديمية مع Langchain

سنبني نظام أسئلة وأجوبة للأدب الأكاديمي باستخدام LangChain يمكنه الإجابة على أسئلة حول الأوراق الأكاديمية المنشورة حديثًا.

أولاً، لإعداد بيئتنا، نثبت التبعيات الضرورية.

pip install langchain arxiv openai transformers faiss-cpu

بعد التثبيت، ننشئ دفتر بايثون جديد ونستورد المكتبات الضرورية:

from langchain.llms import OpenAI
from langchain.chains.qa_with_sources import load_qa_with_sources_chain
from langchain.docstore.document import Document
import arxiv

الجزء الرئيسي لنظام أسئلة وأجوبة لدينا هو القدرة على استرجاع الأوراق الأكاديمية ذات الصلة المتعلقة بمجال معين، هنا نعتبر معالجة اللغة الطبيعية (NLP)، باستخدام قاعدة بيانات arXiv الأكاديمية. لتحقيق ذلك، نحدد دالة get_arxiv_data(max_results=10). هذه الدالة تجمع ملخصات الأوراق الأكاديمية الحديثة حول NLP من arXiv وتضمنها في كائنات وثائق LangChain، باستخدام الملخص كمحتوى والمعرف الفريد كمرجع.

سنستخدم واجهة برمجة التطبيقات arXiv لاسترجاع الأوراق الحديثة المتعلقة بمعالجة اللغة الطبيعية:


def get_arxiv_data(max_results=10):
    search = arxiv.Search(
        query="NLP",
        max_results=max_results,
        sort_by=arxiv.SortCriterion.SubmittedDate,
    )
   
    documents = []
   
    for result in search.results():
        documents.append(Document(
            page_content=result.summary,
            metadata={"source": result.entry_id},
        ))

    return documents

هذه الدالة تسترجع ملخصات الأوراق الأكاديمية الحديثة حول NLP من arXiv وتحولها إلى كائنات وثائق LangChain. نحن نستخدم الملخص كمحتوى والمعرف الفريد كمرجع.

def print_answer(question):
    print(
        chain(
            {
                "input_documents": sources,
                "question": question,
            },
            return_only_outputs=True,
        )["output_text"]
    )                 

دعونا نحدد مصادرنا ونضبط LangChain:

sources = get_arxiv_data(2)
chain = load_qa_with_sources_chain(OpenAI(temperature=0))

مع نظام أسئلة وأجوبة الأكاديمي جاهزًا، يمكننا اختباره عن طريق وضع سؤال:

print_answer("What are the recent advancements in NLP?")

الإخراج سيكون إجابة على سؤالك، مع ذكر المصادر التي تم استخلاص المعلومات منها. على سبيل المثال:

تشمل التطورات الحديثة في معالجة اللغة الطبيعية نماذج اتباع التعليمات المعززة بالاسترجاع، وإطارًا حسابيًا جديدًا لحل مسائل تدفق القدرة الأمثل للتيار المتردد (ACOPF) باستخدام وحدات معالجة الرسوميات (GPUs).
المصادر: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1

يمكن بسهولة تبديل النماذج أو تعديل النظام حسب احتياجاتك. على سبيل المثال، هنا نغير إلى GPT-4، مما يؤدي إلى استجابة أكثر تفصيلًا:

sources = get_arxiv_data(2)
chain = load_qa_with_sources_chain(OpenAI(model_name="gpt-4",temperature=0))
تشمل التطورات الحديثة في معالجة اللغة الطبيعية (NLP) تطوير نماذج اتباع التعليمات المعززة بالاسترجاع لمهام البحث عن المعلومات مثل الإجابة على الأسئلة (QA). يمكن تكييف هذه النماذج مع مجالات معلومات ومهام متعددة دون ضبط دقيق إضافي. لكنها كثيرًا ما تجد صعوبة في الالتزام بالمعرفة المقدمة وقد تهلوس في إجاباتها. ومن التطورات الأخرى تقديم إطار حسابي لحل مسائل تدفق القدرة الأمثل للتيار المتردد (ACOPF) باستخدام وحدات معالجة الرسوميات (GPUs). يستخدم النهج تجريد التعليمة الواحدة والبيانات المتعددة (SIMD) للبرامج غير الخطية (NLP)، ويطبق طريقة النقطة الداخلية (IPM) في فضاء مكثف مع استراتيجية لإرخاء المتباينات. تسمح هذه الاستراتيجية بتحليل مصفوفة KKT دون اختيار محاور عددية، وهو ما كان يعوق موازاة خوارزمية IPM سابقًا.
المصادر: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1

رمز في GPT-4 يمكن أن يكون قصيرًا مثل حرف واحد أو طويلًا مثل كلمة واحدة. على سبيل المثال، GPT-4-32K يمكنه معالجة ما يصل إلى 32,000 رمز في تشغيل واحد، بينما يدعم GPT-4-8K وGPT-3.5-توربو 8,000 و4,000 رمز على التوالي. ومع ذلك، من المهم ملاحظة أن كل تفاعل مع هذه النماذج تأتي بتكلفة تتناسب مباشرة مع عدد الرموز المعالجة، سواء كانت مدخلة أو مخرجة.

في سياق نظام أسئلة وأجوبة لدينا، إذا تجاوزت قطعة من الأبحاث الأكاديمية الحد الأقصى لعدد الرموز، فإن النظام سيفشل في معالجتها بالكامل، مما يؤثر على جودة واكتمال الإجابات. للتعامل مع هذه القضية، يمكن تقسيم النص إلى أجزاء أصغر تتوافق مع حد الرموز.

يُساعد FAISS (Facebook AI Similarity Search) (META ) في العثور بسرعة على أجزاء النص الأكثر صلة بالسؤال المطروح. يخلق تمثيلًا متجهيًا لكل جزء من النص ويستخدم هذه المتجهات لتحديد واسترجاع الأجزاء الأكثر تشابهًا مع تمثيل متجهي السؤال.

من المهم تذكر أن استخدام أدوات مثل FAISS يمكن أن يؤدي أحيانًا إلى فقدان السياق، مما يؤثر على جودة الإجابات. لذلك، من الضروري إدارة واستخدام الرموز بعناية عند العمل مع نماذج اللغة الكبيرة.

 
pip install faiss-cpu langchain CharacterTextSplitter

بعد التأكد من تثبيت المكتبات المذكورة أعلاه، قم بتشغيل

 
from langchain.embeddings.openai import OpenAIEmbeddings 
from langchain.vectorstores.faiss import FAISS 
from langchain.text_splitter import CharacterTextSplitter 
documents = get_arxiv_data(max_results=10) # We can now use feed more data
document_chunks = []
splitter = CharacterTextSplitter(separator=" ", chunk_size=1024, chunk_overlap=0)
for document in documents:
    for chunk in splitter.split_text(document.page_content):
        document_chunks.append(Document(page_content=chunk, metadata=document.metadata))

search_index = FAISS.from_documents(document_chunks, OpenAIEmbeddings())

chain = load_qa_with_sources_chain(OpenAI(temperature=0))

def print_answer(question):
    print(
        chain(
            {
                "input_documents": search_index.similarity_search(question, k=4),
                "question": question,
            },
            return_only_outputs=True,
        )["output_text"]
    )

مع اكتمال الشفرة، نحن الآن نمتلك أداة قوية لاستجواب الأبحاث الأكاديمية الحديث في مجال معالجة اللغة الطبيعية.

تشمل التطورات الحديثة في معالجة اللغة الطبيعية استخدام الشبكات العصبية العميقة (DNNs) للتحليل الآلي للنصوص ولمهام معالجة اللغة الطبيعية (NLP)، مثل التدقيق الإملائي واكتشاف اللغة واستخراج الكيانات وتحديد المؤلف والإجابة على الأسئلة وغيرها.
المصادر: http://arxiv.org/abs/2307.10652v1, http://arxiv.org/abs/2307.07002v1, http://arxiv.org/abs/2307.12114v1, http://arxiv.org/abs/2307.16217v1

الختام

دمج النماذج اللغوية الكبيرة في التطبيقات قد أسرع من تبنيها في العديد من المجالات، بما في ذلك الترجمة اللغوية، وتحليل المشاعر، و استرجاع المعلومات. هندسة الموجّهات هي أداة قوية في تحقيق أقصى إمكانات هذه النماذج، و Langchain يقود الطريق في تبسيط هذه المهمة المعقدة. واجهته المعيارية، وقوالب الموجّهات المرنة، ودمج النموذج القوي، واستخدام الوكلاء والسلاسل، يضمنون نتائج مثالية لأداء النماذج اللغوية الكبيرة.

ومع ذلك، على الرغم من هذه التطورات، هناك بعض النصائح التي يجب مراعاتها. عند استخدام Langchain، من المهم فهم أن جودة الإخراج تعتمد بشكل كبير على صياغة الموجّه. تجربة أنماط موجّهات مختلفة يمكن أن يؤدي إلى تحسين النتائج. كما يجب تذكر أن Langchain يدعم نماذج لغوية مختلفة، وكل نموذج له نقاط قوة ونقاط ضعف. اختيار النموذج المناسب لمهمة معينة هو أمر بالغ الأهمية. أخيرًا، من المهم تذكر أن استخدام هذه النماذج يأتي مع اعتبارات التكلفة، حيث أن معالجة الرموز تؤثر مباشرة على تكلفة التفاعلات.

كما هو موضح في الدليل خطوة بخطوة، Langchain يمكنه تشغيل تطبيقات قوية، مثل نظام أسئلة وأجوبة الأبحاث الأكاديمية. مع مجتمع مستخدمين متزايد وزيادة أهميته في المناظر المفتوحة المصدر، Langchain يعد أداة حاسمة في استغلال إمكانات النماذج اللغوية الكبيرة مثل GPT-4.

أمضيت السنوات الخمس الماضية منغمسًا في عالم التعلم الآلي والتعلم العميق المثير للاهتمام. وقد دفعني شغفي وخبرتي إلى المساهمة في أكثر من 50 مشروعًا متنوعًا في هندسة البرمجيات، مع التركيز بشكل خاص على الذكاء الاصطناعي والتعلم الآلي. كما جذبني فضولي المستمر إلى معالجة اللغة الطبيعية، وهو مجال أتطلع إلى استكشافه بمزيد من التعمق.