في المشهد سريع التطور للتعلم المعزز بالاسترجاع (RAG)، يعد اختيار بنية التضمين المناسبة أحد أهم القرارات التي تواجه مهندس الذكاء الاصطناعي. يحدد الاختيار بين المشفرات الثنائية والمشفرات المتقاطعة بشكل أساسي التوازن بين زمن استجابة النظام ودقة الاسترجاع. بالنسبة للمطورين من المستوى المتوسط والمتقدم الذين يبنيون خطوط أنابيب RAG جاهزة للإنتاج، فإن فهم هذه الفروق المعمارية ليس مجرد مسألة نظرية، بل هو أمر ضروري لتحسين تجربة المستخدم وتكاليف الحوسبة.
المشفر الثنائي: السرعة على نطاق واسع
تُعد المشفرات الثنائية العمود الفقري لقواعد البيانات المتجهة. في هذه البنية، يتم معالجة الاستعلام والوثيقة بشكل مستقل بواسطة فرعين متطابقين من الشبكة العصبية. يتم تضمين كل منهما في متجه ذي أبعاد ثابتة، ويتم حساب التشابه باستخدام مقاييس مثل تشابه جيب التمام أو الضرب النقطي.
الميزة الرئيسية لهذا النهج هي الكفاءة. نظرًا لأنه يتم تضمين الوثائق مرة واحدة وتخزينها في فهرس، يمكن الإجابة على الاستعلامات في أجزاء من الثانية باستخدام بحث الجيران الأقربين التقريبي (ANN). يجعل هذا المشفرات الثنائية مثالية لمراحل الاسترجاع العلوية (top-k) حيث تقوم بفحص ملايين الوثائق.
ومع ذلك، تأتي هذه السرعة بتكلفة. غالبًا ما تواجه المشفرات الثنائية صعوبة في التعامل مع الفروق الدلالية الدقيقة لأنها تعامل الاستعلام والوثيقة كمدخلات مستقلة، مما يفوتها التفاعلات الدقيقة بينهما أثناء مرحلة التضمين.
المشفر المتقاطع: الدقة عبر التفاعل
على العكس من ذلك، تأخذ المشفرات المتقاطعة كلًا من الاستعلام والوثيقة كمدخلات في وقت واحد. تقوم بمعالجة زوج النص المدمج من خلال نموذج محولات (transformer)، مما يسمح لآلية الانتباه بالتفاعل بعمق بين الاستعلام والوثيقة. يؤدي هذا إلى الحصول على درجة صلة تعكس فهمًا دلاليًا أعمق بكثير.
ما هو الجانب السلبي؟ زمن الاستجابة. نظرًا لأن النموذج يجب أن يعالج كل زوج مرشح بشكل فردي، لا يمكن للمشفرات المتقاطعة الاستفادة من الفهارس المتجهة للترشيح المسبق. إنها مكلفة حسابيًا وبطيئة، وتتطلب عادةً وقتًا على وحدة المعالجة المركزية (CPU) لكل مقارنة بدلاً من البحث السريع في المتجهات المعجل بوحدات معالجة الرسومات (GPU).
تنفيذ النهج الهجين
المعيار الصناعي للأداء العالي في RAG ليس اختيار أحدهما على الآخر، بل الجمع بينهما. تستخدم استراتيجية "إعادة الترتيب" هذه مشفرًا ثنائيًا للاسترجاع الواسع الأولي ومشفرًا متقاطعًا لإعادة ترتيب المرشحين الأوائل بدقة.
إليك كيفية تنفيذ هذا المنطق باستخدام Python ومكتبات شائعة مثل LangChain أو SentenceTransformers:
from sentence_transformers import CrossEncoder
# 1. الاسترجاع الأولي باستخدام المشفر الثنائي (سريع)
# افترض أن 'vector_db' هو مثيل من Pinecone/Milvus
# وأن 'initial_results' هي الوثائق المائة الأولى التي تم العثور عليها
query = "ما هي الآثار الضريبية للوائح الذكاء الاصطناعي الجديدة؟"
initial_results = vector_db.similarity_search(query, k=100)
# 2. إعادة الترتيب باستخدام المشفر المتقاطع (دقيق ولكن بطيء)
# تحضير الأزواج: قائمة من أزواج (استعلام، محتوى الوثيقة)
pairs = [(query, doc.page_content) for doc in initial_results]
# تحميل نموذج مشفر متقاطع مدرب مسبقًا
model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
# الحصول على درجات لجميع الأزواج
scores = model.predict(pairs)
# 3. الترتيب حسب درجة الصلة واختيار أفضل 5 نتائج
sorted_results = sorted(zip(initial_results, scores), key=lambda x: x[1], reverse=True)
final_context = [res[0].page_content for res in sorted_results[:5]]
# استخدام final_context لتوليد النصوص بواسطة نموذج اللغة الكبير (LLM)
الخاتمة: فن الموازنة
عند تصميم خط أنابيب RAG الخاص بك، ابدأ باستخدام المشفر الثنائي نظرًا لقابليته للتوسع. إذا أشارت مقاييس الدقة الخاصة بك إلى أن الاسترجاع الأولي يفقد السياق ذي الصلة، فأدخل مشفرًا متقاطعًا لإعادة الترتيب كمرحلة ثانية. تسمح لك هذه العملية ذات الخطوتين بالحفاظ على زمن استجابة منخفض لغالبية الطلبات مع ضمان أن السياق النهائي الممرر إلى نموذج اللغة الكبير (LLM) دقيق دلاليًا. من خلال فهم نقاط القوة في كل نموذج، يمكنك بناء أنظمة RAG تكون سريعة وذكية في آن واحد.