الذكاء الاصطناعي العام وذكاء المستقبل
قوة إعادة الترتيب وتحليل المرحلتين للتحليل المعزز بالاسترجاع
تنفيذ استرجاع المرحلتين مع إعادة الترتيب
الآن بعد أن حصلنا على فهم لأساسيات استرجاع المرحلتين وإعادة الترتيب، دعونا نستكشف تنفيذها العملي في سياق نظام 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("jamescalam/ai-arxiv-chunked", split="train")</p> &lt;pre&gt;
بعد ذلك، سنقوم بمعالجة البيانات وتنقسم إلى قطع أصغر لتسهيل الاسترجاع والمعالجة الفعالة.
from transformers import AutoTokenizer <p>tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")</p> <p>def chunk_text(text, chunk_size=512, overlap=64): tokens = tokenizer.encode(text, return_tensors="pt", 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["chunk"] 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('all-MiniLM-L6-v2')</p> <p># إنشاء مخزن LanceDB للفضاء المتجه db = lancedb.lancedb('/path/to/store') db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())</p> <p># فهرسة الوثائق for text in chunked_data: vector = model.encode(text).tolist() db.insert_document('docs', vector, text)</p> <p>from sentence_transformers import SentenceTransformer from lancedb import lancedb</p> <p># تحميل نموذج Transformer للجمل model = SentenceTransformer('all-MiniLM-L6-v2')</p> <p># إنشاء مخزن LanceDB للفضاء المتجه db = lancedb.lancedb('/path/to/store') db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())</p> <p># فهرسة الوثائق for text in chunked_data: vector = model.encode(text).tolist() db.insert_document('docs', vector, text)
بفهرسة الوثائق، يمكننا الآن تنفيذ الاسترجاع الأولي بالعثور على الجيران الأقرب إلى متجه الاستعلام.
from transformers import AutoTokenizer <p>tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")</p> <p>def chunk_text(text, chunk_size=512, overlap=64): tokens = tokenizer.encode(text, return_tensors="pt", 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["chunk"] 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("t5-base") model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")</p> <p># توسيع الاستعلام الأصلي مع الوثائق المعاد ترتيبها augmented_query = query + " " + " ".join(reranked_docs[:3])</p> <p># توليد الاستجابة من نموذج اللغة input_ids = tokenizer.encode(augmented_query, return_tensors="pt") 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، هناك العديد من التقنيات والتعديلات المتقدمة التي يمكن أن تعزز أداء ومتانة هذا النهج.
- توسيع الاستعلام: لتحسين مرحلة الاسترجاع الأولية، يمكن استخدام تقنيات توسيع الاستعلام، والتي تتضمن توسيع الاستعلام الأصلي بالكلمات أو العبارات ذات الصلة. يمكن أن يساعد ذلك في استرجاع مجموعة أكثر تنوعًا من الوثائق المحتملة.
- إعادة الترتيب بالتجمعات: بدلاً من الاعتماد على نموذج إعادة ترتيب واحد، يمكن دمج عدة نماذج إعادة ترتيب في تجميع، مما يسمح بالاستفادة من نقاط القوة المختلفة لكل نموذج لتحسين الأداء العام.
- تحسين إعادة الترتيب: في حين أن نماذج إعادة الترتيب المسبقة يمكن أن تكون فعالة، يمكن تحسينها من خلال التدريب على بيانات النطاق لتعزيز قدرتها على 捕获 الدلالية والصلة الخاصة بالنطاق.
- الاسترجاع والترتيب التكراري: في بعض الحالات، قد لا تكون مرحلة واحدة من الاسترجاع وإعادة الترتيب كافية. يمكن استكشاف النهج التكراري، حيث يتم استخدام إخراج نموذج اللغة لتحسين الاستعلام ومرحلة الاسترجاع، مما يؤدي إلى نظام أكثر تفاعلية وديناميكية.
- توازن الصلة والتنوع: في حين أن نماذج إعادة الترتيب تهدف إلى تعزيز الوثائق الأكثر صلة، من المهم تحقيق توازن بين الصلة والتنوع. يمكن أن يساعد دمج تقنيات تعزيز التنوع في منع النظام من أن يصبح ضيقًا أو متحيزًا في مصادره المعلومات.
- معايير التقييم: لتقييم فعالية نهج استرجاع المرحلتين وإعادة الترتيب، سوف نحتاج إلى تعريف معايير تقييم مناسبة. قد تشمل هذه المعايير معايير استرجاع المعلومات التقليدية مثل الدقة والاسترجاع ومتوسط الرتبة العكسية (MRR)، بالإضافة إلى معايير مخصصة للمهمة موجهة إلى حالة الاستخدام الخاصة بنا.
الخاتمة
التحليل المعزز بالاسترجاع (RAG) ظهر كتقنية قوية لتعزيز قدرات نماذج اللغة الكبيرة من خلال الاستفادة من مصادر معلومات خارجية. ومع ذلك، غالبًا ما تعاني طرق الاسترجاع التقليدية من صعوبة في تحديد الوثائق الأكثر صلة، مما يؤدي إلى أداء غير مثالي.
استرجاع المرحلتين مع إعادة الترتيب يقدم حلًا مقنعًا لهذا التحدي. من خلال الجمع بين مرحلة استرجاع أولية سريعة ونموذج إعادة ترتيب أكثر تطورًا، يمكن لهذا النهج تحسين دقة وملاءمة الوثائق المسترجعة بشكل كبير، مما يؤدي في النهاية إلى استجابات مولدة ذات جودة أعلى من نموذج اللغة.














