הוספתי Reranker ל-RAG Pipeline שלי — זה הרס הכל

הוספתי reranker ל-RAG pipeline שלי. זה הרס לי מיד את הבדיקות שלי.

בגרסה 2, השתמשתי ב-hybrid retrieval עם FAISS ו-BM25. זה עבר את כל 19 שאלות הבדיקה שלי. לאחר מכן, הוספתי cross-encoder reranker כדי לשפר את הדיוק (precision).

התיאוריה היא פשוטה:

  • שלב 1: שימוש ב-fast retrieval כדי לקבל סט רחב של מועמדים (candidates).
  • שלב 2: שימוש ב-smart reranker כדי לבחור את הטובים ביותר.

זה לקח 20 דקות ליישום. זה נכשל מיד ב-2 מתוך 19 הבדיקות שלי.

הכישלון קרה בגלל פורמט הנתונים. הנתונים שלי מכילים chunks טבלאיים וצפופים כאלה: "Company: Zentara Robotics | CEO: Iris Kallas | Employees: 287"

מודל ה-cross-encoder אומן על פסקאות בשפה טבעית. כשזה ראה שורת טבלה, הוא נתן לה ציון נמוך מאוד. הוא חשב שה-chunk אינו רלוונטי.

ה-hybrid retrieval מצא את התשובה, אבל ה-reranker זרק אותה.

ניסיתי 7 דרכים שונות לתקן את זה:

  • שימוש ב-candidate pool גדול יותר.
  • שילוב (blending) של ציונים מה-reranker ומה-retriever.
  • שימוש ב-rank fusion.

אף אחת מהן לא עבדה. הציון של ה-reranker היה כל כך שלילי שהוא גבר על כל השאר. המודל לא רק דירג נמוך יותר; הוא דחה באופן פעיל את הפורמט הטבלאי.

הפסקתי לנסות לתקן את המתמטיקה ושיניתי את המבנה.

במקום לתת ל-reranker להחליט על הכל, הגנתי על התוצאות הטובות ביותר שלי. השתמשתי באסטרטגיית "guaranteed slot" (מקום מובטח):

  • אם רוצים את 3 התוצאות המובילות, שומרים את 2 המובילות מהשלב הראשון.
  • משתמשים ב-reranker כדי לבחור רק את התוצאה השלישית.

זה מבטיח שתוצאות ה-hybrid search יישארו ברשימה הסופית. ה-reranker רק משפר את המקומות הנותרים.

התוצאה: 19/19 בדיקות עברו בהצלחה.

לקחים שנלמדו:

  • Rerankers הם לא שדרוג מיידי. הם יכולים לפגוע בביצועים על נתונים מובנים או טבלאיים.
  • סט ההערכה (evaluation set) הוא רשת הביטחון שלך. בלי 19 הבדיקות שלי, הייתי משחרר מערכת שבורה.
  • הגן על מה שעובד. אם ה-retrieval בשלב הראשון טוב, אל תיתן ל-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