שימוש בהטמעות מותאמות אישית

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

התכונה הזו זמינה למאגרי נתונים עם נתונים מובְנים בהתאמה אישית או נתונים לא מובְנים עם מטא-נתונים. התכונה הזו לא זמינה לחיפוש מדיה ולחיפוש בתחום הבריאות.

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

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

כדי להשתמש בהטמעות משלכם:

  1. לפני שמתחילים: חשוב לוודא שההטמעות עומדות בכל הדרישות
  2. הוספת נתונים באמצעות הטמעות: הוספת המסמכים באמצעות ההטמעות שלהם
  3. עדכון הסכימה: עדכון הסכימה עם שדות המאפיינים המרכזיים ומפרטי המאפיינים
  4. מציינים את ההטמעה: מציינים את ההטמעה באופן גלובלי או לכל בקשת חיפוש.

לפני שמתחילים

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

  • הטמעות נתמכות לנתונים מובנים ולנתונים לא מובנים עם מטא-נתונים
  • ההטמעות צריכות להיות מערכים חד-ממדיים
  • הערך של ממד ההטמעה חייב להיות בין 1 ל-768, כולל
  • הטמעות נתמכות לטקסט ולתמונות. אין תמיכה בסרטונים
  • אפשר לתייג עד שני שדות כשדות של נכסי מפתח להטמעה. יכול להיות שתשתמשו בשני שדות במקרים כמו בדיקות A/B להטמעות
  • אחרי שמגדירים את מאפייני המפתח של השדה המוטמע, אי אפשר להסיר אותם

הטמעת נתונים באמצעות הטמעות

אתם יכולים להטמיע את ההטמעות של מסמך בשדה אחד או שניים שכלולים כחלק מהנתונים או מהמטא-נתונים של המסמך במהלך הטמעת המסמך.

כדי להטמיע נתונים באמצעות הטמעות:

  1. בהתאם לסוג הנתונים, מכינים אותם להעברה:

    • נתונים מובְנים: כשמכינים את הנתונים, צריך לכלול את ההטמעות של כל מסמך כמערכים חד-ממדיים בשדה אחד או בשני שדות במסמך. אפשר לספק עד שני הטמעות (לדוגמה, אם מבצעים בדיקת A/B בין הטמעות). כל הטמעה צריכה להיות בשדה משלה במסמך, למשל: "example_embedding_vector": [0.1, 0.2, 0.3 ...]

      פועלים לפי ההנחיות להכנת נתונים מובְנים במסמך הכנת נתונים להוספה.

    • נתונים לא מובְנים עם מטא-נתונים: כשמכינים את הנתונים, צריך לכלול את ההטמעה של כל מסמך כמערך חד-ממדי בשדה במטא-נתונים של המסמך. אפשר לספק עד שני הטמעות (לדוגמה, כשמבצעים בדיקת A/B בין הטמעות). כל הטמעה צריכה להיות בשדה משלה במטא-נתונים של המסמך, לדוגמה: "example_embedding_vector": [0.1, 0.2, 0.3 ...]

      פועלים לפי ההנחיות להכנת נתונים לא מובנים עם מטא-נתונים לשיטת ההטמעה (Cloud Storage או BigQuery) שבה אתם משתמשים, שמופיעות במאמר הכנת נתונים להטמעה.

  2. פועלים לפי ההוראות לסוג הנתונים שלכם במאמר יצירת מאגר נתוני חיפוש כדי להטמיע את המסמכים עם הטמעות.

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

עדכון הסכימה

מעדכנים את הסכימה עם מיפויים של מאפייני מפתח ומאפיינים של שדות ההטמעה באמצעות Google Cloud המסוף או ה-API.

המסוף

כדי לעדכן את הסכימה באמצעות מסוף Google Cloud , פועלים לפי השלבים הבאים:

  1. נכנסים לדף AI Applications במסוף Google Cloud .

    אפליקציות AI

  2. בתפריט הניווט, לוחצים על מאגרי נתונים.

  3. בעמודה שם, לוחצים על מאגר הנתונים עם הסכימה שרוצים לעדכן.

  4. לוחצים על הכרטיסייה סכימה כדי לראות את הסכימה של הנתונים.

  5. לוחצים על הלחצן עריכה.

  6. מחפשים את שדה ההטמעה בסכימה ובעמודה מאפייני מפתח, ובוחרים באפשרות embedding_vector כמאפיין המפתח של השדה הזה.

    אם יש לכם שדה הטמעה שני, חוזרים על השלב הזה גם בשבילו.

  7. בעמודה מאפיין, מזינים את מספר המאפיינים בשדה ההטמעה הזה.

    אם יש לכם שדה הטמעה שני, חוזרים על השלב הזה גם בשבילו.

  8. לוחצים על שמירה כדי להחיל את השינויים בסכימה.

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

REST

כדי לעדכן את הסכימה באמצעות ה-API, פועלים לפי השלבים הבאים:

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

    • "keyPropertyMapping": "embedding_vector"
    • "dimension": NUMBER_OF_DIMENSIONS

    לדוגמה, הנה סכימת JSON מעוצבת עם 768 מימדים לשדה example_embedding_vector:

      {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "example_embedding_vector": {
            "type": "array",
            "keyPropertyMapping": 'embedding_vector',
            "dimension": 768,
            "items": {
              "type": "number"
            }
          }
        }
      }
    

    בבקשה לעדכון סכימה, ה-JSON המעוצב הזה ייכלל כמחרוזת JSON:

      "jsonSchema": "{\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"type\":\"object\",\"properties\":{\"example_embedding_vector\":{\"type\":\"array\",\"keyPropertyMapping\":\"embedding_vector\",\"dimension\":768,\"items\":{\"type\":\"number\"}}}}"
    

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

בשלב הבא, מציינים את ההטמעה.

הגדרת ההטמעה

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

יש שתי דרכים לציין הטמעה:

  • הגדרה של הטמעה באופן גלובלי: כדי להגדיר את אותה הטמעה לכל בקשות החיפוש, צריך לעדכן את הגדרות ההצגה כך שיכללו הגדרת הטמעה באמצעות Google Cloud המסוף או ה-API.
  • ציון הטמעה לכל בקשת חיפוש: שולחים embeddingSpec בכל בקשת חיפוש באמצעות ה-API. ההגדרה הזו מבטלת את ההגדרה הגלובלית אם היא מוגדרת.

הגדרה של הטמעה באופן גלובלי

אפשר לציין את אותו הטמעה בכל בקשות החיפוש באמצעותGoogle Cloud המסוף או ה-API.

המסוף

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

  1. נכנסים לדף AI Applications במסוף Google Cloud .

    אפליקציות AI

  2. לוחצים על הצגה במאגר הנתונים עם הסכימה שרוצים לעדכן.

  3. עוברים לדף Configurations ולוחצים על הכרטיסייה Control.

  4. בשדה נתיב שדה ההטמעה, מזינים את שם השדה שמיפיתם למאפיין של מפתח ההטמעה.

  5. בקטע Ranking expression (ביטוי לדירוג), מזינים פונקציה או פונקציות כדי לשלוט בדירוג התוצאות. המשתנים מקבלים משקל בהתאם לביטוי שמזינים. ביטוי הדירוג הוא פונקציה אחת או כמה פונקציות שמחוברות באמצעות + בפורמט function, { " + ", function }.

    הפונקציות הנתמכות הן:

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    אלה המשתנים המותרים:

    • relevance_score: משתנה מוגדר מראש שמועבר על ידי 'חיפוש מבוסס סוכנים' כדי למדוד את הרלוונטיות של מסמך. הציון נע בין 0 ל-1.0, כולל הגבולות.
    • dotProduct(): פונקציה מוגדרת מראש שסופקה על ידי חיפוש מבוסס סוכנים. צריך לציין לפונקציה הזו את אותו שם שדה שציינתם לפונקציה embeddingVector.fieldPath.

    לדוגמה:

    • 0.3 * relevance_score
    • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)

REST

כדי לספק את אותה הגדרת הטמעה לכל בקשות החיפוש, מעדכנים את servingConfig עם embeddingConfig.

  1. מבצעים תיקון של ישות servingConfig עם השדות שרוצים לעדכן. מציינים את השדות שרוצים לעדכן באמצעות updateMask.

    בדוגמה הבאה, embeddingConfig משתמש בהטמעות בשדה example_embedding_field ונותן משקל של 0.5 ל-relevance_score.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d '{
          "name": "projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search",
          "embeddingConfig": {
            "fieldPath": "example_embedding_field"
          },
          "ranking_expression": "0.5 * relevance_score"
        }' \
    'https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search?updateMask=embeddingConfig,rankingExpression'
    
    • fieldPath: השם של השדה שמיפיתם למאפיין של מפתח ההטמעה.
    • ranking_expression: קובע את דירוג התוצאות. המשתנים מקבלים משקל בהתאם לביטוי שמזינים. ביטוי הדירוג הוא פונקציה אחת או כמה פונקציות שמחוברות באמצעות + בפורמט function, { " + ", function }.

    הפונקציות הנתמכות הן:

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    אלה המשתנים המותרים:

    • relevance_score: משתנה מוגדר מראש שמופיע בחיפוש מבוסס סוכנים.
    • dotProduct(): פונקציה מוגדרת מראש שסופקה על ידי חיפוש מבוסס סוכנים. המכפלה הסקלרית מנורמלת. חובה לציין לפונקציה הזו את אותו שם שדה שציינתם לפונקציה embeddingVector.fieldPath.

    לדוגמה:

    • 0.3 * relevance_score
    • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
  2. כששולחים בקשות חיפוש, servingConfig.embeddingConfig נכלל באופן אוטומטי.

    אם שולחים בקשת חיפוש שכוללת באופן מפורש embeddingSpec אחר, הוא מבטל את servingConfig.embeddingConfig. בקטע לכל בקשה מוסבר איך לספק מפרטים להטמעה של בקשות חיפוש בודדות.

ציון הטמעה לכל בקשת חיפוש

אפשר לספק מפרט הטמעה לבקשת חיפוש יחידה באמצעות ה-API. הגדרת הטמעה ספציפית לבקשה מבטלת כל הגדרת הטמעה גלובלית.

  1. שולחים בקשת חיפוש שכוללת את embeddingSpec.

    בדוגמה הבאה של embeddingSpec נעשה שימוש בהטמעות בשדה example_embedding_field, מצוין 'Example query' כווקטור הקלט, וניתן משקל של 0.5 ל-relevance_score ומשקל של 0.3 ל-example_embedding_field כשמחשבים את הדירוג.

      "embeddingSpec": {
        "embeddingVectors": [{
          "fieldPath": "example_embedding_field",
          "vector": [
            0.96241474,
            -0.45999944,
            0.108588696
          ]
        }]
      },
      "ranking_expression": "0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)"
    
    • fieldPath: השם של השדה שמיפיתם למאפיין של מפתח ההטמעה.
    • vector: וקטור הקלט שמועבר כמערך.
    • ranking_expression: קובע את דירוג התוצאות. המשתנים מקבלים משקל בהתאם לביטוי שמזינים. ביטוי הדירוג הוא פונקציה אחת או כמה פונקציות שמחוברות באמצעות + בפורמט function, { " + ", function }.

      הפונקציות הנתמכות הן:

      • DOUBLE * relevance_score
      • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

      אלה המשתנים המותרים:

      • relevance_score: משתנה מוגדר מראש שמועבר על ידי חיפוש מבוסס סוכנים כדי למדוד את הרלוונטיות של מסמך. הציון נע בין 0 ל-1.0, כולל הגבולות.
      • dotProduct(): פונקציה מוגדרת מראש שסופקה על ידי חיפוש מבוסס סוכנים. צריך להזין לפונקציה הזו את אותו שם שדה שהזנתם לפונקציה embeddingVector.fieldPath.

      לדוגמה:

      • 0.3 * relevance_score
      • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
  2. לקבל תוצאות בתגובה לחיפוש. כל תוצאת חיפוש כוללת את ציון הרלוונטיות שלה ואת ערכי המכפלה הסקלרית. לדוגמה:

    "modelScores": {
      "dotProduct(example_embedding_field)": [0.02150772698223591],
      "relevance_score": [ 0.8828125 ]
    }
    
    • dotProduct(): מכפלה סקלרית מחושבת של מסמך תוצאת החיפוש.
    • relevance_score: ניקוד הרלוונטיות המחושב של מסמך תוצאת החיפוש.

המאמרים הבאים