لسنوات طويلة، كان النهج القياسي لاسترجاع البيانات يعتمد على المطابقة القائمة على الكلمات المفتاحية. إذا بحث المستخدم عن "تعلم الآلة"، كان النظام يبحث عن تلك الكلمات بالضبط في الفهرس. وعلى الرغم من كفاءته في الاستعلامات المهيكلة، فإن هذه الطريقة تفشل فشلاً ذريعاً عند التعامل مع اللغة الطبيعية، أو المرادفات، أو النوايا المعقدة. ومع تحول معماريات الاسترجاع المعزز بالتوليد (RAG) إلى العمود الفقري لتطبيقات الذكاء الاصطناعي المؤسسية، أصبح اعتماد البحث الدلالي أمراً لا غنى عنه. يستكشف هذا المقال كيفية تنفيذ البحث الدلالي لضمان استرجاع نماذج اللغات الكبيرة (LLMs) للسياق الأكثر صلة، مما يقلل من الهلوسة ويحسن جودة الإجابات.
لماذا يفشل البحث القائم على الكلمات في RAG
تعتمد محركات البحث التقليدية على خوارزميات مثل التكرار المصطلح-تكرار المستند العكسي (TF-IDF) أو BM25. تعمل هذه الأساليب على افتراض أن تداخل الكلمات يساوي الصلة. ومع ذلك، فكر في هذا السيناريو: يسأل المستخدم، "كيف أصلح صنبوراً متسرباً؟" قد يعيد البحث القائم على الكلمات المستندات التي تحتوي على "إصلاح الصنبور" أو "مشاكل السباكة"، لكنه سيفوت دليلاً بعنوان "تشخيص أحواض الاستحمام المتقطرة" ببساطة لأن الكلمة الدقيقة "صنبور" غائبة. في خط أنابيب RAG، يعني استرجاع المستند الخاطئ تغذية النموذج اللغوي الكبير (LLM) بسياق غير ذي صلة، مما يؤدي إلى ردود غير منطقية أو غير صحيحة واقعيًا.
يحل البحث الدلالي هذه المشكلة من خلال فهم المعنى الكامن وراء الكلمات بدلاً من الكلمات نفسها فقط. فهو يرمز النص إلى فضاء متجهي عالي الأبعاد، حيث تكون المفاهيم ذات الصلة الدلالية متقاربة من بعضها البعض، بغض النظر عن التداخل المعجمي.
الميكانيكا الأساسية: التضمينات وقواعد البيانات المتجهية
في قلب البحث الدلالي يكمن التضمين (Embedding). يحول نموذج التضمين (مثل text-embedding-ada-002 الخاص بـ OpenAI أو النماذج مفتوحة المصدر مثل BGE) النص إلى قائمة من الأرقام — أي متجه. على سبيل المثال، سيكون للجملتين "القط يجلس على الحصيرة" و"القطة ترتاح على السجادة" متجهات ذات تشابه جيبوبي عالٍ.
لجعل الاسترجاع سريعاً وفعالاً على نطاق واسع، يتم تخزين هذه المتجهات في قاعدة بيانات متجهية (مثل Pinecone أو Weaviate أو Milvus). عند استلام استعلام، يتم تضمينه ثم استخدامه لإيجاد أقرب المتجهات جواراً في قاعدة البيانات. يسمح هذا العملية، المعروفة باسم البحث عن أقرب الجيران التقريبي (ANN)، باسترجاع البيانات بزمن استجابة بالملي ثانية حتى عبر ملايين المستندات.
مثال تنفيذي باستخدام Python وLangChain
يعد تنفيذ البحث الدلالي أمراً مباشراً عند الاستفادة من المكتبات الحديثة مثل LangChain. فيما يلي مثال عملي لكيفية إنشاء مكون بسيط لـ RAG باستخدام نموذج تضمين ومتجر متجهي.
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
# 1. تحميل وتقسيم المستندات
loader = TextLoader('data/my_document.txt')
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# 2. إنشاء التضمينات
embeddings = OpenAIEmbeddings()
# 3. التخزين في قاعدة البيانات المتجهية
db = Chroma.from_documents(docs, embeddings)
# 4. إجراء البحث الدلالي
query = "ما هي الاستنتاجات الرئيسية لهذه الدراسة؟"
similar_docs = db.similarity_search(query, k=3)
# 5. فحص السياق المسترجع
for doc in similar_docs:
print(doc.page_content[:100] + "...")
في هذا الرمز المقتطف، تقوم طريقة similarity_search تلقائياً بتحويل الاستعلام إلى متجه وإرجاع المستندات الثلاث الأكثر تشابهاً دلاليًا. لاحظ أننا لا نمرر أي كلمات مفتاحية؛ بل نمرر سؤال اللغة الطبيعية مباشرة.
أفضل الممارسات للبحث على مستوى الإنتاج
بينما يعد استرجاع التضمين الأساسي قوياً، فإن أنظمة الإنتاج تتطلب ضبطاً إضافياً:
- استراتيجية التقسيم (Chunking): الطريقة التي تقسم بها المستندات تؤثر بشكل كبير على الاسترجاع. تأكد من أن القطع مكتملة دلاليًا (مثل فقرات أو أقسام كاملة) بدلاً من أعداد عشوائية من الأحرف.
- البحث الهرمي: بالنسبة للمجموعات الضخمة من المستندات، فكر في نهج "من الصغير إلى الكبير". أولاً، ابحث في مجموعة صغيرة من ملخصات المستندات لتحديد الأقسام ذات الصلة، ثم استرجع النص الكامل لتلك الأقسام.
- إعادة الترتيب (Re-ranking): البحث المتجهي الأولي سريع ولكنه ليس دقيقاً دائماً. يمكن أن يؤدي تنفيذ مُعيد ترتيب متقاطع المشفر (cross-encoder) كخطوة ثانية إلى تحسين الصلة بشكل كبير من خلال تحليل دقيق لزوج الاستعلام-المستند.
الخاتمة
يُعد البحث الدلالي الجسر بين اللغة البشرية والفهم الآلي. من خلال دمج التضمينات وقواعد البيانات المتجهية في معمارية RAG الخاصة بك، تتجاوز المطابقة الهشة القائمة على الكلمات إلى نظام يفهم النية حقاً. مع نضج تطبيقات الذكاء الاصطناعي، غالباً ما يتحدد الفرق بين تجربة نموذج لغوي كبير جيدة وممتازة من خلال جودة طبقة الاسترجاع. لم يعد الاستثمار في استراتيجيات البحث الدلالي القوية خياراً؛ بل أصبح ضرورة.