أضفتُ reranker إلى مسار RAG الخاص بي — فتعطل كل شيء

أضفتُ reranker إلى مسار RAG الخاص بي، مما أدى فوراً إلى فشل اختباراتي.

في الإصدار الثاني، استخدمتُ استرجاعاً هجيناً (hybrid retrieval) باستخدام FAISS و BM25. وقد اجتاز هذا الإصدار جميع أسئلتي الاختبارية الـ 19. ثم أضفتُ cross-encoder reranker لتحسين الدقة.

النظرية بسيطة:

  • المرحلة الأولى: استخدام استرجاع سريع للحصول على مجموعة واسعة من المرشحين.
  • المرحلة الثانية: استخدام reranker ذكي لاختيار الأفضل منها.

استغرق التنفيذ 20 دقيقة، وفشل فوراً في اختبارين من أصل 19 اختباراً.

حدث الفشل بسبب تنسيق البيانات. تحتوي بياناتي على قطع (chunks) جدولية كثيفة مثل هذه: "Company: Zentara Robotics | CEO: Iris Kallas | Employees: 287"

لقد تم تدريب نموذج الـ cross-encoder على فقرات من اللغة الطبيعية. وعندما رأى صفاً جدولياً، أعطاه درجة منخفضة جداً، حيث اعتقد أن هذه القطعة غير ذات صلة.

وجد الاسترجاع الهجين الإجابة، لكن الـ reranker استبعدها.

حاولتُ 7 طرق مختلفة لإصلاح ذلك:

  • استخدام مجموعة مرشحين أكبر.
  • دمج الدرجات من الـ reranker والـ retriever.
  • استخدام rank fusion.

لم تنجح أي منها. كانت درجة الـ reranker سلبية للغاية لدرجة أنها طغت على كل شيء آخر. لم يكن النموذج يكتفي بترتيبها في مرتبة أدنى فحسب، بل كان يرفض التنسيق الجدولي بشكل نشط.

توقفتُ عن محاولة إصلاح المعادلات الرياضية وقمت بتغيير الهيكل.

بدلاً من ترك الـ reranker يقرر كل شيء، قمت بحماية أفضل نتائجي. استخدمتُ استراتيجية "المكان المضمون" (guaranteed slot):

  • إذا كنت تريد أفضل 3 نتائج، فاحتفظ بأفضل نتيجتين من المرحلة الأولى.
  • استخدم الـ reranker لاختيار النتيجة الثالثة فقط.

يضمن هذا بقاء نتائج البحث الهجين في القائمة النهائية، حيث يعمل الـ reranker فقط على تحسين الأماكن المتبقية.

النتيجة: اجتياز 19/19 اختباراً.

الدروس المستفادة:

  • الـ rerankers ليست ترقيات فورية؛ فقد تضر بالأداء عند التعامل مع البيانات المهيكلة أو الجدولية.
  • مجموعة التقييم الخاصة بك هي شبكة الأمان. لولا اختباراتي الـ 19، لكنت قد أطلقتُ نظاماً معطلاً.
  • احمِ ما يعمل بشكل جيد. إذا كان الاسترجاع في المرحلة الأولى جيداً، فلا تسمح للـ reranker بتجاوزه.

ابنِ retriever قوياً قبل أن تلجأ إلى reranker.

Source: https://dev.to/santanu_mohanta_29/i-added-a-reranker-to-my-rag-pipeline-it-broke-everything-then-i-fixed-it-1c9i

Optional learning community: https://t.me/GyaanSetuAi