Retrieval-Augmented Generation (RAG)

تحسين جودة الاسترجاع: استراتيجيات تقطيع متقدمة لأنظمة RAG

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

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

المشكلة مع التقطيع الثابت الحجم البسيط

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

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

التقسيم التكراري للأحرف

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

يعمل الخوارزمية عادةً من خلال تعريف قائمة من الفواصل (مثل `"\n\n"`, `"\n"`, `" "`) وتقسيم النص بشكل تكراري بواسطة الفاصل الأول. إذا كانت المقاطع الناتجة لا تزال أكبر من الحد الأقصى المطلوب، تنتقل إلى الفاصل التالي. يضمن هذا أن تتوافق المقاطع مع الحدود اللغوية الطبيعية.

from langchain.text_splitter import RecursiveCharacterTextSplitter

# Define the splitter
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200,
    length_function=len,
    is_separator_regex=False,
    separators=["\n\n", "\n", " ", ""]
)

text = """
Section 1: Introduction
The history of AI is long.

Section 2: Current State
Modern LLMs rely on transformers."""

chunks = text_splitter.split_text(text)
# Resulting chunks respect paragraph breaks before splitting further

التقطيع الدلالي ونافذة الجمل

للتنبيقات المتقدمة، يستفيد التقطيع الدلالي من التضمينات (Embeddings) لتحديد أماكن تقسيم النص. من خلال حساب التشابه الجيبية (Cosine Similarity) بين تضمينات الجمل المتتالية، تحدد الخوارزمية النقاط التي يتغير فيها الموضوع بشكل كبير. يشير انخفاض التشابه إلى حد بين مفاهيم متميزة، مما يسمح بتكوين مقاطع حول مواضيع متماسكة.

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

ضبط التداخل والحبيبية

بغض النظر عن الاستراتيجية، فإن التداخل معلمة حرجة. يضمن التداخل عدم فقدان المعلومات عند حدود المقاطع. التداخل النموذجي هو 10-20٪ من حجم المقطع. التداخل القليل جدًا يخطر بفقدان المعلومات الجسرية؛ التداخل الكثير يزيد من تكاليف التخزين وزمن استجابة الاسترجاع دون مكاسب كبيرة في الدقة.

بالإضافة إلى ذلك، تهم الحبيبية. المقاطع الأصغر (مثل 128-256 توكن) تعطي عمومًا استرجاعًا أكثر دقة لأن التضمين يركز على موضوع أضيق. المقاطع الأكبر (مثل 512-1024 توكن) توفر سياقًا أكثر لكنها قد تخفف التمثيل المتجهي. من الأفضل الممارسة تجربة كلا البعدين باستخدام مجموعة البيانات والاستعلامات الخاصة بك.

الخاتمة

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

Share: