רווחים:
- יישום חיפוש היברידי המשלב בחירת top-k וחיפוש סמנטי ומילות מפתח
- הגדלת הדיוק של החיפוש הראשון עם דירוג מחדש
- הפיכת שאלות קשות לניתנות יותר לחיפוש באמצעות טכניקות כגון טרנספורמציה של שאילתות ו-HyDE
גרסת את המסמכים יפה והכנסת אותם למסד הנתונים הווקטוריים. עכשיו העבודה האמיתית: להביא את החלקים הנכונים כשהמשתמש שואל שאלה. זה נקרא אחזור והוא עמוד השדרה של איכות RAG. זכור את המשפט "איכות שליפה = איכות RAG"; היחידה הזו היא בדיוק האומנות לשפר את האיכות הזו. נסקור טכניקות מעשיות מבחירה מובילה לחיפוש היברידי, מדירוג מחדש ועד לשינוי שאילתה.
Top-k: כמה חתיכות נביא?
ההגדרה הבסיסית ביותר: כמה חתיכות (k) להחזיר מהחיפוש. אם תביא פחות (k=1) יש סיכון גבוה להחמיץ את החתיכה הנכונה; אם תוסיף יותר מדי (k=20), זה יוסיף רעש לדגם והעלות האסימון תגדל.
הבחנה בין שני מושגים. נזכיר: הקצב שבו היצירה הנכונה נכללת בין אלו שנשלפו. דיוק: הקצב שבו מה שנשלף רלוונטי. הגדלת k מגבירה את הזיכרון אך מפחיתה את הדיוק. המטרה היא לאזן בין השניים.
top-k
השפעה
מצב מתאים
1-3
דיוק גבוה, סכנת החמצה
שאלות פשוטות עם תשובה אחת
4-8
איזון; רוב התרחישים
RAG תאגיד כללי
10-20
זיכרון גבוה יותר, הרעש עולה
עם דירוג מחדש (למטה)
טיפ: דפוס נפוץ ורב עוצמה: אחזר רחב (k=20), ואז צר עם דירוג מחדש (4 העליון). כך לא תפספסו כלום ואתם נותנים הקשר נקי לדגם.
חיפוש היברידי: הכוח של שני חיפושים
חיפוש סמנטי (וקטורי) לוכד את המשמעות אבל מפספס דברים: קוד מוצר מלא ("XR-4471"), קיצור נדיר, שם פרטי, מספר גרסה. עבור משימות ההתאמה המדויקת הללו, חיפוש מילות מפתח מהבית הספר הישן - במיוחד האלגוריתם הקלאסי שנקרא BM25 - הוא טוב מאוד.
חיפוש היברידי משלב את השניים: גם חיפושים סמנטיים וגם חיפושים של מילות מפתח עובדים, ומשלבים את התוצאות. לפיכך, בשאלה כגון "תקופת האחריות של ה
המיזוג נעשה בדרך כלל עם RRF (Reciprocal Rank Fusion): המסלול שנמצא גבוה יותר בשתי הרשימות מגיע קדימה.
# שליפה היברידית (קונספטואלית)sem = vector_search(question, k=20) # meaningkey = bm25_search(question, k=20) # fullwordresult = rrf_merge(sem, key)[:8] # fuse the two, top 8
דירוג מחדש: מעבר שני וחכם יותר
השיחה הראשונה יכולה להיות מהירה אך גסה. דירוג מחדש מדרג את המועמדים שהוחזרו בחיפוש הראשון בזה אחר זה עם מודל חזק יותר (בדרך כלל מקודד צולב - מודל שקורא את השאלה והקטע ביחד ומנקד את הרלוונטיות) ומעביר את הרלוונטיים ביותר לראש.
ההיגיון הוא כזה: החיפוש הראשון מקצה מספר רב של מועמדים לריקול (20 מועמדים), המדרג מחדש בוחר את ה-4 הטובים ביותר לדיוק. גישה דו-שלבית זו היא הרבה יותר מדויקת מחיפוש חד-שלבי. זה עולה קצת עיכוב ועיבוד נוסף; הרווח הוא עלייה משמעותית באיכות.
# מועמדים (קונספטואלי) של אחזור דו-שלבי = hybrid_search(שאלה, k=20) # רחב, ציון מהיר = reranker.score(שאלה, מועמדים) # ציון רלוונטיות עבור כל הקשר של מועמד = rated.rank()[:4] # top 4
שינוי השאילתה
לפעמים הבעיה היא לא בחיפוש, אלא בשאלה עצמה. אם המשתמש שואל "מה לגבי עובדים מרוחקים?" ', אי אפשר לחפש את זה לבד (לא ברור מה מתאים לעובדים מרוחקים). להלן טכניקות טרנספורמציה של שאילתות:
- כתוב מחדש: השתמש בהיסטוריית השיחות כדי להפוך את השאלה לעצמאית: "מה זכאים עובדים מרוחקים לחופשה שנתית?"
- ריבוי שאילתות: צור 3 ביטויים שונים של אותה שאלה, חפש עם כולם, שלב את התוצאות. מילים שונות מוצאות חלקים שונים.
- HyDE (הטמעות מסמכים היפותטיות): תחילה הדפס "תשובה אפשרית" למודל, ואז הטמע וחפש את התשובה הדמיונית הזו. התשובה הדמיונית מוצאת לפעמים טובה יותר כי היא קרובה יותר במילים למסמך האמיתי.
# רב-שאילתות (קונספטואלי)variants = model.uret("הבע את השאלה הזו ב-3 דרכים שונות: " + question)tum_sonuc = []עבור v בווריאציות: all_sonuc += vector_intermediate(v, k=6)context = singular_and_order(tum_result)[:6]
שליפה חלשה / שליפה חזקה
חלש (שלב בודד, סמנטיקה בלבד, קבוע k=3):
תוצאה = vector_search(question, k=3)# בעיה: קוד המוצר הוחמצה, לא ניתן להזין חלק 3 נכון בשאלות קשות.
רב עוצמה (היברידית + widek + דירוג מחדש + שאילתה מרובה במידת הצורך):
candidates = hybrid_search(rewrite(question, past), k=20)context = reranker.score(question, candidates).first(4)# הן התאמה מדויקת והן המשמעות נלכדות; זה מגיע ל-4 הדגמים הטובים ביותר.
שלושה מיני מארזים
מקרה 1 - קוד המוצר נמלט. חיפוש סמנטי טהור בצוות תמיכה לא הצליח למצוא את "RTX-9080" מילה במילה בשאלה "שגיאת מנהל התקן RTX-9080"; הוא הביא מוצרים אחרים עם שמות דומים. כאשר נוסף חיפוש היברידי, התרחשה התאמת קוד מדויקת ושיעור החזרת המאמרים הנכונים עלה מ-58% ל-92%.
מקרה 2 - הבדל בדירוג מחדש. עורך דין עבד עם k=5 אבל הפריט הנכון הוא 7-10 רוב הזמן. הוא נשאר בשורות. כאשר הוצג k=20 + דירוג מחדש, שיעור המאמר הנכון ב-3 המובילים עלה מ-61% ל-94%; האחזור גדל ב-300 אלפיות השנייה בלבד - פשרה מקובלת.
מקרה 3 - שאלת המשך ללא הקשר. בעוזרת משאבי אנוש, המשתמש שואל "מה לגבי עובדים חלקיים?" כששאלתי, המערכת הביאה חלקים לא רלוונטיים. על ידי שכתוב השאילתה (משיכת ההקשר של "חופשה שנתית" מהעבר והוספת "עובדים במשרה חלקית זכאים לחופשה שנתית"), שיעור התשובה הנכונה עלה מ-40% ל-86%.
טעויות נפוצות
- הסתמכות על חיפוש סמנטי בלבד: חסרים קוד מוצר, קיצור, שם תקין; הוסף היברידי.
- שמירה על k קטן מדי: היצירה הנכונה לא יכולה להיכנס לרשימה; לעשות אותו רחב וצמצם אותו עם דירוג מחדש.
- לעולם אל תחשוב על דירוג מחדש: החיפוש הראשון הוא גס רוח; המעבר החכם השני משפר משמעותית את האיכות.
- חיפוש שאלות המשך כפי שהוא: שאלה ללא הקשר מחפשת חסר משמעות; לִכתוֹב מִחָדָשׁ.
- הגדלת k באופן עיוור (ללא דירוג מחדש): המודל מתמלא ברעש, התגובה מעוותת והעלות עולה.
היזהר: כל טכניקה מוסיפה עלות ועיכוב. ריבוי שאילתות פירושו חיפוש פי 3, דירוג מחדש פירושו קריאת דגם נוספת. התחל עם היבריד פשוט + k סביר קודם; מדוד והוסף טכניקות כבדות היכן שצריך. להוסיף בלי למדוד.
לסיכום
- Top-k הוא האיזון בין ריקול ודיוק; בדרך כלל 4-8 זו התחלה טובה.
- חיפוש היברידי משלב חיפוש סמנטי עם חיפוש מילות מפתח (BM25); משחזר התאמות מדויקות.
- דירוג מחדש מדרג מחדש את המועמדים מהחיפוש הראשוני הרחב עם מודל חזק ובוחר את הטובים ביותר.
- טרנספורמציה של שאילתות (שכתוב, ריבוי שאילתות, HyDE) הופכת שאלות קשות וללא הקשר לחיפוש.
- דפוס חזק: אחזור רחב → התמזג עם היברידי → צר עם דירוג מחדש; אך הוסף כל טכניקה על ידי מדידתה.
משימת יישום
הכן 6 שאלות קשות עם נתונים מיחידות קודמות: לפחות 2 הדורשות התאמות מדויקות (קוד מוצר, קיצור, תאריך), 2 סמנטיות (אותו נושא עם מילים שונות), 2 שאלות המשך ללא הקשר. (1) ראשית חשבו על כל שאלה כעל חיפוש סמנטי טהור וסמנו ידנית אילו חלקים יעלו. (2) העריכו מחדש את אותן שאלות בתוספת כלאיים ודירוג מחדש. (3) שכתוב שאלות המשך ללא הקשר. שים לב בצורה טבלה איזו טכניקה משנה באיזה סוג שאלה.
רשימת בדיקה
- [ ] אני יודע ש-top-k הוא איזון דיוק ריקול וטווח התחלה סביר.
- [ ] אני יכול להסביר מדוע חיפוש היברידי משחזר התאמות מדויקות.
- [ ] אני יכול ליישם את ההיגיון הדו-שלבי של דירוג מחדש (רחבה → צר חכם).
- [ ] אני מכיר בצורך לשכתב שאלות המשך ללא הקשר.
- [ ] אני מאשר שהוספתי טכניקות כבדות על ידי מדידה, לא על ידי מדידה.