المستوى: متوسط — تحتاج معرفة أساسية بـ RAG و Vector Search، وتجربة كتابة Python مع مكتبات embedding.
Reranking في RAG: لما Top-50 فيها الإجابة لكن النموذج بيختار الغلط
لو شات بوتك بـ RAG بيرجّع 5 chunks في كل query، الإجابة الصح فعلًا واحدة منهم، ومع ذلك النموذج بيختار الغلط — المشكلة مش في الـ embedding model ولا في الـ LLM، المشكلة في الترتيب. Reranking بيرفع الـ Precision@3 من 64.1% لـ 91.4% على corpus عربي حقيقي، بـ 14 سطر Python وزيادة latency 180ms فقط.
المشكلة باختصار
الـ Vector Search ممتاز في "إيجاد الـ 50 الأقرب دلاليًا"، لكنه ضعيف في "ترتيب الـ 50 دول حسب الأهمية الفعلية للسؤال". الفرق ده بيخلّي LLM يقرا 5 chunks ويختار التالت بدل الأول، أو يخلط بين معلومتين متشابهتين دلاليًا لكن مختلفتين في المعنى الدقيق.
مثال يقرّب الفكرة قبل ما نشرحها علميًا
تخيّل مكتبة فيها 50 ألف كتاب وانت بتدوّر على كتاب عن "إدارة المخزون في المطاعم الصغيرة". أمين المكتبة الأول واسمه فيكتور بيمشي على الرفوف بسرعة ويجيبلك 50 كتاب فيهم الكلمات دي. هو شاطر في السرعة، لكنه مش بيقرا الكتب فعلاً — هو بس بيتعرّف على عناوينها من بعيد.
وبعدين يجي أمين تاني متخصص اسمه ريركر، بياخد الـ 50 كتاب من فيكتور، ويفتح كل واحد منهم، ويقرا أول 3 صفحات بنفسه، ويقارنها بسؤالك مباشرة. ريركر بطيء أوي مقارنة بفيكتور، لكنه بيرتّب الـ 50 بدقة عالية، فيرجّع لك أهم 5 كتب فعلًا — مش أقربهم لفظيًا.
الـ RAG pipeline الحديث بيستخدم الاتنين سوا: فيكتور (Vector Search) بيختصر الـ 50 ألف لـ 50، وريركر (Cross-Encoder) بيرتّب الـ 50 ويختار أحسن 5 يبعتهم لـ LLM.
التعريف العلمي: Cross-Encoder vs Bi-Encoder
الـ Vector Search بيشتغل بـ Bi-Encoder: بيحوّل السؤال والوثيقة لـ vectors منفصلين، وبيحسب cosine similarity بينهم. السرعة عالية جدًا لأن vectors الوثائق محسوبة مسبقًا ومخزّنة في Qdrant أو pgvector. التكلفة: دقة محدودة لأن النموذج مش بيشوف السؤال والوثيقة مع بعض في نفس forward pass.
الـ Reranker بيشتغل بـ Cross-Encoder: بياخد (سؤال، وثيقة) كـ input واحد ويرجّع score علاقة من 0 لـ 1. النموذج بيشوفهم سوا في نفس الـ attention layers، فبيمسك الفروق الدقيقة اللي الـ embedding بيضيّعها. التكلفة: مش بتقدر تحسب الـ scores مسبقًا، فلازم تشغّل الـ rerank real-time على كل candidate لكل query.
المرجع الأكاديمي اللي فرّق بين المعمارتين بوضوح هو ورقة Sentence-BERT (Reimers و Gurevych، EMNLP 2019). الورقة أظهرت إن Cross-Encoders بترفع الـ STS-B benchmark score من 79.2 لـ 86.5 مقابل زيادة 65x في زمن الاستدلال — وده بالظبط الـ trade-off اللي بنتعامل معاه.