הערכת ביצועים, Hybrid Search ומגמות עתידיות

הערכת ביצועים: Recall, Latency וזיכרון יחד

recall@k, שהוצג בפרק העוסק ב-kNN מול ANN, נמדד בפועל על קבוצת שאילתות מייצגת (curated או held-out), מול תוצאות exact search כאמת מידה. אבל recall לבדו לא מספיק כדי להעריך מערכת חיפוש וקטורי — צריך למדוד אותו יחד עם latency וצריכת זיכרון, כי שלושת הגורמים האלה תלויים זה בזה במלואם.

latency נמדד בדרך כלל לא רק כממוצע, אלא בפרסנטילים — p50 (latency חציוני), p95 ו-p99 (latency של המקרים הגרועים יחסית) — כי שאילתה בודדת איטית במיוחד יכולה לפגוע בחוויית משתמש גם אם הממוצע נראה טוב. הבחירה בין HNSW, IVF ו-IVF-PQ (שנסקרו בפרקים הקודמים) היא בדיוק בחירת נקודה במרחב התלת-ממדי הזה — recall, latency וזיכרון — ואין קונפיגורציה שממקסמת את שלושתם בו-זמנית.

תרשים משולש עם שלושה קדקודים, כל אחד מסומן באייקון בתוך עיגול: קדקוד עליון עם סימן ✓ כחול (Recall), קדקוד שמאלי-תחתון עם סמל שעון כתום (Latency), וקדקוד ימני-תחתון עם סמל ערימת שכבות (זיכרון). נקודה כתומה קטנה בתוך המשולש מסמנת שאי אפשר למקסם את כל השלושה בו-זמנית — כל קונפיגורציה היא נקודה כלשהי בתוך המשולש.
שלושת הגורמים תלויים זה בזה: אי אפשר למקסם Recall, Latency וזיכרון בו-זמנית — רק לבחור נקודת איזון

Hybrid Search: שילוב חיפוש וקטורי וחיפוש מילות מפתח

חיפוש וקטורי מצוין בתפיסת דמיון סמנטי, אך חלש דווקא במקרים שבהם חיפוש מילות מפתח קלאסי (כמו BM25) מצטיין: התאמה מדויקת של מק"ט מוצר, שם ספציפי, או מונח טכני נדיר — מונחים כאלה לא בהכרח מקבלים embedding שמבדיל אותם היטב ממונחים דומים, בעוד שחיפוש מילות מפתח פשוט מוצא אותם ישירות.

הפתרון הנפוץ הוא Hybrid Search: הרצת שני סוגי החיפוש במקביל — וקטורי וטקסטואלי — ומיזוג התוצאות לדירוג אחד משולב. שיטה מקובלת למיזוג נקראת Reciprocal Rank Fusion (RRF): במקום להשוות ציוני דמיון גולמיים משיטות שונות (שלא ניתנים להשוואה ישירה), משלבים את הדירוגים (המיקום ברשימה) של כל פריט בכל אחת מהרשימות, כך שפריט שמדורג טוב בלפחות אחת מהשיטות מקבל דירוג משולב גבוה — גם אם הוא לא הופיע כלל ברשימה השנייה.

תרשים המציג שתי רשימות מדורגות: משמאל רשימת תוצאות חיפוש וקטורי (פסים כחולים באורך יורד), מימין רשימת תוצאות חיפוש מילות מפתח (פסים כתומים באורך יורד). חצים משתי הרשימות מצביעים כלפי מטה אל משפך מיזוג, ומשם חץ יוצא לרשימה מדורגת אחת משולבת (פסים אפורים-כהים) בתחתית התרשים.
Hybrid Search: מיזוג שתי רשימות מדורגות (וקטורי וטקסטואלי) לדירוג אחד משולב באמצעות Reciprocal Rank Fusion

לאן זה הולך: כיוונים נוכחיים

אחד הכיוונים הפעילים בתחום הוא מעבר מ-embedding יחיד למסמך לגישות multi-vector / late-interaction, שבהן כל מסמך מיוצג ע"י כמה וקטורים (למשל אחד לכל טוקן או קטע קטן) במקום וקטור בודד — מה שמאפשר ייצוג עשיר ומדויק יותר, במחיר עלות אחסון וחישוב גבוהה יותר. זהו כיוון מחקר ותעשייה פעיל, לא סטנדרט אחיד עדיין.

מגמה יציבה יותר: RAG, כפי שהוצג בפרק הראשון של הנושא, ממשיך להיות הכוח המניע המרכזי מאחורי הביקוש לחיפוש וקטורי מהיר ומדויק — ככל שיישומי LLM דורשים גישה לידע עדכני ופרטי בקנה מידה גדול, כך גדלה החשיבות של כל מה שנלמד בנושא הזה: embeddings איכותיים, מדדי דמיון נכונים, ואינדקסים שמתפקדים היטב תחת עומס אמיתי.

סיכום הנושא

התחלנו בפרק הראשון עם עיקרון פשוט: חיפוש לפי משמעות, לא לפי התאמת מחרוזת. מאז עברנו דרך embeddings כדרך לייצג משמעות כמספרים, המתמטיקה המדויקת שמגדירה "קרוב" במרחב הזה, האתגר שהממדיות הגבוהה מציבה, האלגוריתמים (HNSW, IVF, PQ) שהופכים חיפוש בקנה מידה עצום לישים, הכלים שמממשים את כל זה בפרקטיקה, ולבסוף איך בונים ומעריכים מערכת כזו בעולם האמיתי.

כל השכבות האלה יחד הן מה שהופך משפט כמו "מצא לי את הדבר שהכי דומה למשמעות לזה" מרעיון מעורפל לפעולה מחושבת, מהירה ומדידה.