הוספתי 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.
Optional learning community: https://t.me/GyaanSetuAi
