סקירה כללית של חיפוש וקטורים ב-Spanner Omni

חיפוש וקטורי ב-Spanner Omni הוא תכונה מובנית עם ביצועים גבוהים שמאפשרת חיפוש סמנטי והתאמה לפי דמיון של נתונים וקטוריים רב-ממדיים. באמצעות אחסון והוספה לאינדקס של הטמעות וקטוריות ישירות במסד הנתונים של העסקאות, Spanner Omni מבטל את הצורך במסדי נתונים וקטוריים נפרדים ובצינורות מורכבים של חילוץ, טרנספורמציה וטעינה (ETL).

הנושאים במסמך הזה רלוונטיים ל-Spanner Omni בדיוק כמו שהם רלוונטיים ל-Spanner.

חיפוש וקטורי מאפשר למצוא פריטים דומים מבחינה סמנטית על ידי ייצוג נתונים כווקטורים מספריים (הטבעות). ‫Spanner Omni תומך בשתי שיטות חיפוש עיקריות:

  • K-nearest neighbors (KNN): מבצע חיפוש מדויק על ידי חישוב המרחק בין השאילתה לבין כל וקטור במערך הנתונים. הוא מספק את ההחזרה הגבוהה ביותר, אבל יכול להיות שהוא יצרוך הרבה משאבי מחשוב במערכי נתונים גדולים.

  • שכנים קרובים משוערים (ANN): נעשה שימוש באינדקס וקטורי כדי למצוא התאמות במהירות במערכי נתונים גדולים. הוא מתפשר על דיוק (recall) כדי לשפר את המהירות וההתאמה.

החיפוש הווקטורי יעיל במיוחד בשילוב עם תכונות אחרות:

שילוב הטבה
חיפוש וקטורי עם סינון SQL שילוב יעיל של חיפוש וקטורי עם מסננים (לדוגמה, 'חיפוש תמונות דומות שבהן הקטגוריה היא 'נעליים' והמחיר נמוך מ-100').
חיפוש וקטורי + חיפוש טקסט מלא כדי לשפר את הרלוונטיות של החיפוש, אנחנו משלבים בין דמיון סמנטי לבין דיוק מילות המפתח באמצעות מיזוג הדדי של דירוגים (RRF).
וקטור + גרף אפשר להשתמש בחיפוש וקטורי כדי למצוא נקודות כניסה רלוונטיות (צמתים) בתרשים נכסים, ואז לעבור בין קשרים מורכבים.

מידע נוסף מופיע בסקירה הכללית על חיפוש וקטורים ב-Spanner במאמרי העזרה של Spanner.

‫Spanner Omni תומך בחיפוש של K-nearest neighbors ‏ (KNN) באמצעות פונקציות מרחק מובנות. אתם יכולים לספק הטמעה של וקטור כפרמטר קלט כדי למצוא את הווקטורים הקרובים ביותר במרחב N-ממדי.

אלה פונקציות המרחק שזמינות:

  • COSINE_DISTANCE(): חישוב הקוסינוס של הזווית בין שני וקטורים

  • EUCLIDEAN_DISTANCE(): מדידת המרחק הקצר ביותר בקו ישר בין שני וקטורים

  • DOT_PRODUCT(): חישוב קוסינוס הזווית כפול מכפלת גודלי הווקטורים (אידיאלי לנתונים מנורמלים)

מידע נוסף זמין במאמר ביצוע חיפוש של דמיון וקטורי על ידי מציאת השכנים הקרובים ביותר (K-nearest neighbors) במסמכי התיעוד של Spanner.

בחירת פונקציית המרחק הווקטורי המתאימה ביותר

בחירת פונקציית המרחק המתאימה תלויה בנתונים ובמודל שמשמש ליצירת ההטמעות.

תפקיד תיאור הקשר לעלייה בדמיון
מכפלה סקלרית מחשבת את הקוסינוס של הזווית כפול המכפלה של גדלי הווקטורים התואמים. עלייה
מרחק קוסינוס מדידת הקוסינוס של הזווית בין שני וקטורים (1 – דמיון קוסינוס). ירידות
מרחק אוקלידי מדידת המרחק בקו ישר בין שני וקטורים. ירידות

אם ההטמעות שלכם מנורמלות (גודל = 1.0), בדרך כלל DOT_PRODUCT() היא בחירה יעילה. אם הנתונים לא מנורמלים, כדאי לנסות את COSINE_DISTANCE() או את EUCLIDEAN_DISTANCE() כדי לקבוע איזו פונקציה מניבה תוצאות טובות יותר לתרחיש השימוש שלכם.

מידע נוסף זמין במאמר בחירה בין פונקציות של מרחק וקטורי במאמרי העזרה של Spanner.

שכנים קרובים משוערים (ANN)

חיפוש ANN מיועד לקבוצות נתונים גדולות מאוד שבהן חיפוש KNN מדויק הופך לאיטי מדי או ליקר מדי. הוא משתמש באינדקס וקטורי כדי לספק תוצאות מהירות עם פשרה קלה בזיכרון.

חיפוש משוער של השכן הקרוב ביותר (ANN) ב-Spanner Omni תומך במערכי נתונים של עד מיליון וקטורים, עבור וקטורים באורך של עד 128 ממדים. אם הווקטורים שלכם כוללים יותר ממדים, מספר הווקטורים הנתמך יקטן באופן יחסי.

כדי לבצע חיפוש ANN, משתמשים בפונקציות של מרחק משוער, כמו APPROX_COSINE_DISTANCE(), ‏ APPROX_EUCLIDEAN_DISTANCE() או APPROX_DOT_PRODUCT(). כדי להשתמש בפונקציות האלה צריך:

  • אינדקס וקטורי קיים בעמודת ההטמעה.

  • סעיף ORDER BY שמשתמש בפונקציית המרחק המשוער.

  • סעיף LIMIT שמציין את מספר התוצאות.

מידע נוסף מופיע במאמר חיפוש של שכנים קרובים משוערים (ANN) והטמעות של וקטורים לשאילתות במסמכי Spanner.

יצירה וניהול של אינדקסים של וקטורים

כשיוצרים אינדקס וקטורי, צריך לציין את vector_length של עמודת ההטמעה, ואפשר להשתמש בסעיף STORING כדי לכלול עמודות נוספות לסינון מהיר יותר.

הדוגמה הבאה ממחישה איך יוצרים אינדקס וקטורי:

CREATE VECTOR INDEX INDEX_NAME
  ON TABLE_NAME(EMBEDDING_COLUMN)
  OPTIONS (distance_type = 'DISTANCE_TYPE', tree_depth = 2, num_leaves = 1000);

מידע נוסף זמין במאמר בנושא יצירה וניהול של אינדקסים וקטוריים במסמכי Spanner.

שיטות מומלצות ליצירת אינדקס של וקטורים

כדי לשמור על רמת ביצועים גבוהה בחיפוש ועל יכולת שליפה גבוהה:

  • התאמת אפשרויות האינדקס: משנים את num_leaves ואת num_leaves_to_search בהתאם לגודל הנתונים ולדרישות הביצועים.

  • בנייה מחדש באופן תקופתי: אם חל שינוי משמעותי בפיזור של הווקטורים לאורך זמן, כדאי לבנות מחדש את האינדקס.

  • שימוש יעיל בסינון: כדי לשפר את יעילות החיפוש, כדאי לאחסן בעמודה אינדקס עמודות שמסננים לעיתים קרובות.

מידע נוסף זמין במאמר בנושא שיטות מומלצות ליצירת אינדקסים של וקטורים במסמכי Spanner.