الذكاء الاصطناعي العام وذكاء المستقبل

قوة إعادة الترتيب وتحليل المرحلتين للتحليل المعزز بالاسترجاع

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

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

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

فهم التحليل المعزز بالاسترجاع (RAG)

سويتش एजنت LLM

قبل الغوص في تفاصيل الاسترجاع ذي المرحلتين وإعادة الترتيب، دعونا نستعيد概念 التحليل المعزز بالاسترجاع (RAG) بشكل سريع. RAG هي تقنية تمتد معرفة وقدرات نماذج اللغة الكبيرة (LLMs) من خلال تزويد彼女م بمصادر معلومات خارجية، مثل قواعد البيانات أو مجموعات الوثائق. راجع المزيد من المقال “غوص عميق في التحليل المعزز بالاسترجاع في LLM“.

يتضمن عملية RAG النموذجية الخطوات التالية:

  1. استعلام: يقدم المستخدم سؤالا أو يُقدّم تعليمات إلى النظام.
  2. استرجاع: يستعلام النظام قاعدة بيانات متجه أو مجموعة وثائق لfinding المعلومات ذات الصلة بالاستعلام.
  3. توسيع: يتم دمج المعلومات المسترجعة مع الاستعلام الأصلي للمستخدم.
  4. توليد: يعالج نموذج اللغة الإدخال الموسع ويتوليد استجابة، مستفيدًا من المعلومات الخارجية لتحسين دقة وشمولية الإخراج.

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

الحاجة إلى استرجاع المرحلتين وإعادة الترتيب

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

لمواجهة هذا التحدي، لجأ الباحثون والممارسون إلى استرجاع المرحلتين مع إعادة الترتيب. يتضمن هذا النهج عملية من مرحلتين:

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

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

فوائد استرجاع المرحلتين وإعادة الترتيب

توفير استرجاع المرحلتين مع إعادة الترتيب العديد من الفوائد المهمة في سياق أنظمة RAG:

  1. تحسين الدقة: من خلال إعادة ترتيب الوثائق المسترجعة في المرحلة الأولى وتعزيز الوثائق الأكثر صلة إلى أعلى القائمة، يمكن للنظام توفير معلومات أكثر دقة وضبطًا إلى نموذج اللغة، مما يؤدي إلى استجابات مولدة ذات جودة أعلى.
  2. تخفيف مشاكل خارج النطاق: نماذج التضمين المستخدمة في الاسترجاع التقليدية يتم تدريبهما غالبًا على مجموعات نصية عامة الغرض، والتي قد لا تصل إلى 捕获 لغة و دلالية النطاق بشكل كافٍ.然而، يمكن تدريب نماذج إعادة الترتيب على بيانات النطاق، مما يخفف مشكلة “خارج النطاق” ويعزز صلة الوثائق المسترجعة داخل النطاقات المتخصصة.
  3. التناسب: يسمح النهج ذو المرحلتين بتحقيق كفاءة من خلال استخدام طرق استرجاع سريعة وخفيفة في المرحلة الأولى، في حين يحتفظ بعملية إعادة الترتيب الأكثر tínhية بالمرحلة الثانية لمجموعة أصغر من الوثائق.
  4. المرونة: يمكن استبدال نماذج إعادة الترتيب أو تحديثها بشكل مستقل عن طريقة الاسترجاع الأولي، مما يوفر مرونة وتكيفًا مع الاحتياجات المتطورة للنظام.

ColBERT: تفاعل متأخر فعال وفعّال

أحد النماذج البارزة في مجال إعادة الترتيب هو ColBERT (التفاعل المتأخر السياقي على BERT). ColBERT هو نموذج إعادة ترتيب للوثائق الذي يستفيد من قدرات فهم اللغة العميقة ل BERT ويعرض آلية تفاعل جديدة تعرف باسم “التفاعل المتأخر”.

ColBERT: بحث فعال وفعّال للممر عبر التفاعل المتأخر السياقي على BERT

ColBERT: بحث فعال وفعّال للممر عبر التفاعل المتأخر السياقي على BERT

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

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

تنفيذ استرجاع المرحلتين مع إعادة الترتيب

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

إعداد البيئة

قبل أن نغوص في الكود، دعونا نُعد بيئتنا التطويرية. سنستخدم Python وعددًا من مكتبات NLP الشائعة، بما في ذلك Hugging Face Transformers و Sentence Transformers و LanceDB.

# تثبيت المكتبات المطلوبة
!pip install datasets huggingface_hub sentence_transformers lancedb

تحضير البيانات

لأغراض التمثيل، سنستخدم مجموعة بيانات “ai-arxiv-chunked” من Hugging Face Datasets، والتي تحتوي على أكثر من 400 ورقة من ArXiv حول تعلم الآلة ومعالجة اللغة الطبيعية ونماذج اللغة الكبيرة.

from datasets import load_dataset

<p>dataset = load_dataset(&quot;jamescalam/ai-arxiv-chunked&quot;, split=&quot;train&quot;)</p>

&amp;lt;pre&amp;gt;

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

from transformers import AutoTokenizer

<p>tokenizer = AutoTokenizer.from_pretrained(&quot;bert-base-uncased&quot;)</p>

<p>def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors=&quot;pt&quot;, truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts</p>

<p>chunked_data = []
for doc in dataset:
text = doc[&quot;chunk&quot;]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)</p>

لمرحلة الاسترجاع الأولية، سنستخدم نموذج Transformer للجمل لترميز وثائقنا و استعلاماتنا إلى تمثيلات متجه كثيفة، ثم ن実ّن بحثًا قريبًا تقريبيًا باستخدام قاعدة بيانات متجه مثل LanceDB.

from sentence_transformers import SentenceTransformer
from lancedb import lancedb

<p># تحميل نموذج Transformer للجمل
model = SentenceTransformer(&#039;all-MiniLM-L6-v2&#039;)</p>

<p># إنشاء مخزن LanceDB للفضاء المتجه
db = lancedb.lancedb(&#039;/path/to/store&#039;)
db.create_collection(&#039;docs&#039;, vector_dimension=model.get_sentence_embedding_dimension())</p>

<p># فهرسة الوثائق
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document(&#039;docs&#039;, vector, text)</p>

<p>from sentence_transformers import SentenceTransformer
from lancedb import lancedb</p>

<p># تحميل نموذج Transformer للجمل
model = SentenceTransformer(&#039;all-MiniLM-L6-v2&#039;)</p>

<p># إنشاء مخزن LanceDB للفضاء المتجه
db = lancedb.lancedb(&#039;/path/to/store&#039;)
db.create_collection(&#039;docs&#039;, vector_dimension=model.get_sentence_embedding_dimension())</p>

<p># فهرسة الوثائق
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document(&#039;docs&#039;, vector, text)

بفهرسة الوثائق، يمكننا الآن تنفيذ الاسترجاع الأولي بالعثور على الجيران الأقرب إلى متجه الاستعلام.

from transformers import AutoTokenizer

<p>tokenizer = AutoTokenizer.from_pretrained(&quot;bert-base-uncased&quot;)</p>

<p>def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors=&quot;pt&quot;, truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts</p>

<p>chunked_data = []
for doc in dataset:
text = doc[&quot;chunk&quot;]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)

إعادة الترتيب

بعد المرحلة الأولية من الاسترجاع، سنستخدم نموذج إعادة ترتيب لإعادة ترتيب الوثائق المسترجعة بناءً على صلتها بالاستعلام. في هذا المثال، سنستخدم نموذج إعادة ترتيب ColBERT، وهو نموذج تحويل قائم على الترانسفورمر مصمم خصيصًا لترتيب الوثائق.

from lancedb.rerankers import ColbertReranker

reranker = ColbertReranker()

<p># إعادة ترتيب الوثائق الأولية
reranked_docs = reranker.rerank(query, initial_docs)

الآن يحتوي قائمة reranked_docs على الوثائق المعاد ترتيبها بناءً على صلتها بالاستعلام، كما حدد نموذج إعادة الترتيب ColBERT.

التوسيع والتوليد

مع الوثائق المعاد ترتيبها والمرتبطة في متناول اليد، يمكننا الآن المضي قدمًا في مراحل التوسيع والتوليد من خط أنابيب RAG. سنستخدم نموذج لغة من مكتبة Hugging Face Transformers لتوليد الاستجابة النهائية.

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

<p>tokenizer = AutoTokenizer.from_pretrained(&quot;t5-base&quot;)
model = AutoModelForSeq2SeqLM.from_pretrained(&quot;t5-base&quot;)</p>

<p># توسيع الاستعلام الأصلي مع الوثائق المعاد ترتيبها
augmented_query = query + &quot; &quot; + &quot; &quot;.join(reranked_docs[:3])</p>

<p># توليد الاستجابة من نموذج اللغة
input_ids = tokenizer.encode(augmented_query, return_tensors=&quot;pt&quot;)
output_ids = model.generate(input_ids, max_length=500)
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)</p>

print(response)

في الشريحة الكودية أعلاه، قمنا بتوسيع الاستعلام الأصلي بالوثائق الثلاثة الأولى المعاد ترتيبها، مما يُنشئ augmented_query. ثم نقوم بتمرير هذا الاستعلام الموسع إلى نموذج لغة T5، الذي يولد استجابة بناءً على السياق المُقدم.

تقنيات وتعديلات متقدمة

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

  1. توسيع الاستعلام: لتحسين مرحلة الاسترجاع الأولية، يمكن استخدام تقنيات توسيع الاستعلام، والتي تتضمن توسيع الاستعلام الأصلي بالكلمات أو العبارات ذات الصلة. يمكن أن يساعد ذلك في استرجاع مجموعة أكثر تنوعًا من الوثائق المحتملة.
  2. إعادة الترتيب بالتجمعات: بدلاً من الاعتماد على نموذج إعادة ترتيب واحد، يمكن دمج عدة نماذج إعادة ترتيب في تجميع، مما يسمح بالاستفادة من نقاط القوة المختلفة لكل نموذج لتحسين الأداء العام.
  3. تحسين إعادة الترتيب: في حين أن نماذج إعادة الترتيب المسبقة يمكن أن تكون فعالة، يمكن تحسينها من خلال التدريب على بيانات النطاق لتعزيز قدرتها على 捕获 الدلالية والصلة الخاصة بالنطاق.
  4. الاسترجاع والترتيب التكراري: في بعض الحالات، قد لا تكون مرحلة واحدة من الاسترجاع وإعادة الترتيب كافية. يمكن استكشاف النهج التكراري، حيث يتم استخدام إخراج نموذج اللغة لتحسين الاستعلام ومرحلة الاسترجاع، مما يؤدي إلى نظام أكثر تفاعلية وديناميكية.
  5. توازن الصلة والتنوع: في حين أن نماذج إعادة الترتيب تهدف إلى تعزيز الوثائق الأكثر صلة، من المهم تحقيق توازن بين الصلة والتنوع. يمكن أن يساعد دمج تقنيات تعزيز التنوع في منع النظام من أن يصبح ضيقًا أو متحيزًا في مصادره المعلومات.
  6. معايير التقييم: لتقييم فعالية نهج استرجاع المرحلتين وإعادة الترتيب، سوف نحتاج إلى تعريف معايير تقييم مناسبة. قد تشمل هذه المعايير معايير استرجاع المعلومات التقليدية مثل الدقة والاسترجاع ومتوسط الرتبة العكسية (MRR)، بالإضافة إلى معايير مخصصة للمهمة موجهة إلى حالة الاستخدام الخاصة بنا.

الخاتمة

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

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

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