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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

כדי לבצע חיפוש 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.

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

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

במערכי נתונים גדולים – כמו טבלאות עם עשרות מיליוני שורות או יותר – אפשר לציין אחוז דגימה כדי לקצר את זמן היצירה של אינדקס הווקטורים. משתמשים באפשרות clustering_sampling_percentage בהצהרת CREATE VECTOR INDEX כדי לדגום קבוצת משנה של מערך הנתונים כשיוצרים את עץ האינדקס הראשוני.

ככלל, מומלץ לכלול לפחות 50 שורות לדוגמה בכל עלה. לדוגמה, אם יש מערך נתונים עם 10 מיליון שורות ו-10,000 עלים, שיעור דגימה של 5% (clustering_sampling_percentage = 5) ידגום 500,000 שורות, או 50 שורות לכל עלה, כמו בדוגמה הבאה:

CREATE VECTOR INDEX VectorIndex
  ON BaseTable(Embedding)
  WHERE Embedding IS NOT NULL
  OPTIONS (
    tree_depth = 3,
    num_leaves = 10000,
    num_branches = 100,
    leaf_scatter_factor = 32,
    distance_type = 'COSINE',
    min_branch_splits = 10,
    min_leaf_splits = 10,
    clustering_sampling_percentage = 5
  );

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

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

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

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

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

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

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