סינון באמצעות הבנת שפה טבעית

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

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

מידע על הבנת שאילתות בשפה טבעית

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

לדוגמה, שאילתה בשפה טבעית כמו "Find a coffee shop serving banana bread" יכולה להיות מנוסחת מחדש כשאילתה ומסנן: "query": "banana bread", "filter": "type": ANY(\"cafe\").

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

מסננים קשים ורכים

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

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

    ההתנהגות דומה לזו של השדה filter בבקשת החיפוש.

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

    ההתנהגות דומה לזו של השדה boostSpec בבקשת החיפוש.

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

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

דוגמאות

הדרך הכי טובה להסביר את התכונה הזו היא באמצעות דוגמאות:

דוגמה: חילוץ שדות משאילתות (מסנן קשיח)

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

הנה שאילתה שמוגשת למאגר נתונים מובנה באתר של מלון: "תמצא לי מלון שמתאים למשפחות עם ארבעה כוכבים לפחות, שעולה פחות מ-300 ללילה, שאפשר להביא אליו כלב ויש בו Wi-Fi בחינם".

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

בעזרת הבנה של שאילתות בשפה טבעית ונתונים מובְנים בצורה מתאימה, החיפוש יעיל יותר כי חלק מהשפה הטבעית בשאילתה מוחלף במסננים. אם הנתונים המובנים כוללים שדות של star_rating (מספרים), price (מספרים) ו-amenities (מחרוזות), אפשר לנסח את השאילתה כך שתכלול את המסננים הבאים:

   {
       "star_rating": >=4,
       "price": <=300,
       "amenities": "Wifi", "Pets Allowed"
   }

דוגמה: עם מסנן מיקום גיאוגרפי (מסנן קשיח)

הדוגמה הזו דומה לדוגמה הקודמת, אבל היא כוללת מסנן מיקום גיאוגרפי, שהוא סוג מיוחד של מסנן שחולץ. ל-Agent Search יש יכולת לזהות מיקומים בשאילתה וליצור מסנני קרבה למיקומים.

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

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

   {
       "star_rating": >=4,
       "location": GEO_DISTANCE(\"San Francisco, CA\", 10000)
   }

בדוגמה הזו, GEO_DISTANCE היא כתובת, אבל בשאילתות אחרות היא יכולה להיות כתובה כקו רוחב וקו אורך, גם אם השאילתה המקורית הכילה כתובת.

דוגמה: חילוץ שדות משאילתות (מסנן רך)

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

הנה שאילתה שמוגשת לאתר נסיעות: "תמצא לי מלון שמתאים למשפחות עם לפחות ארבעה כוכבים, שעולה פחות מ-300 ללילה ומאפשר להביא כלב".

החיפוש הופך ליעיל יותר באמצעות החלפה של חלק מהשפה הטבעית בשאילתה במסננים רכים, בעזרת הבנה של שאילתות בשפה טבעית ונתונים מובנים בצורה מתאימה. אם הנתונים המובְנים כוללים שדות של star_rating (מספרים), price (מספרים) ו-amenities (מחרוזות), אפשר לשכתב את השאילתה כך שתכלול את ההגברה הבאה:

תנאי ההגברה שחולץ מהשאילתה בשפה הטבעית:

{
  "boostSpec": {
    "conditionBoostSpecs": {
      "condition": "(star_rating >= 4.5) AND (price < 200) AND ANY(amenities, \"Pets Allowed\")",
      "boost": 0.7
    }
  }
}

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

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

מגבלות

ההגבלות הבאות חלות על הבנת שאילתות בשפה טבעית:

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

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

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

  • במקרה של מיקום גיאוגרפי, צריך לתאר את המיקום באופן מפורש. אי אפשר להשתמש במיקומים כמו 'בסביבה שלי' או 'הבית שלי'.

  • הרדיוס של המיקום הגיאוגרפי הוא 10 ק"מ ואי אפשר להגדיר אותו.

  • אי אפשר להשתמש בשדות בוליאניים במסננים. לדוגמה, אם השאילתה היא "Find me a non-smoking hotel room", אז שדה בוליאני כמו "non_smoking": true לא שימושי, אבל שדה מחרוזת כמו "non_smoking": "YES" יכול להיות חלק מהמסנן.

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

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

כדי להפעיל את ההבנה של שאילתות בשפה טבעית:

REST

  1. איך מוצאים את המזהה של מאגר הנתונים אם כבר יש לכם מזהה של מאגר נתונים, אפשר לדלג לשלב הבא.

    1. במסוף Google Cloud , עוברים לדף AI Applications ובתפריט הניווט לוחצים על Data Stores.

      מעבר לדף Data Stores

    2. לוחצים על השם של מאגר הנתונים.

    3. בדף Data של מאגר הנתונים, מעתיקים את המזהה של מאגר הנתונים.

  2. מריצים את פקודת ה-curl הבאה:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID?update_mask=natural_language_query_understanding_config.mode" \
    -d '{
          "naturalLanguageQueryUnderstandingConfig": {
            "mode": "ENABLED"
          }
        }'
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • DATA_STORE_ID: המזהה של מאגר הנתונים של חיפוש מבוסס סוכנים.
  3. חוזרים על שלבים 1 ו-2 לכל מאגר נתונים.

  4. ממתינים כ-24 שעות.

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

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

כדי לחפש שאילתה בשפה טבעית ולקבל תוצאות שעברו אופטימיזציה לשאילתות בשפה טבעית, צריך לפעול לפי השלבים הבאים:

REST

  1. מריצים את פקודת ה-curl הבאה, שמפעילה את השיטה search:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "naturalLanguageQueryUnderstandingSpec": {
              "filterExtractionCondition": "ENABLED"
            }
          }'
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • APP_ID: המזהה של אפליקציית חיפוש מבוסס סוכנים שרוצים לשלוח אליה שאילתה. האפליקציה צריכה להיות מקושרת למאגר נתונים שמכיל נתונים מובְנים. האפליקציה לא יכולה להיות אפליקציה של חיפוש משולב.
    • QUERY: השאילתה שנכתבה בשפה טבעית.

חיפוש, המרה של מיקומים בשאילתות למסנני מיקום גיאוגרפי

כדי לחפש שאילתה בשפה טבעית ולקבל תוצאות שעברו אופטימיזציה לשאילתות בשפה טבעית, כולל קרבה למיקומים, צריך לפעול לפי השלבים הבאים:

REST

  1. מריצים את פקודת ה-curl הבאה, שמפעילה את השיטה search:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "naturalLanguageQueryUnderstandingSpec": {
              "filterExtractionCondition": "ENABLED",
              "geoSearchQueryDetectionFieldNames": ["GEO_FIELD_NAME_1", "GEO_FIELD_NAME_N"]"
            }
          }'
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • APP_ID: המזהה של אפליקציית חיפוש מבוסס סוכנים שרוצים לשלוח אליה שאילתה. האפליקציה צריכה להיות מקושרת למאגר נתונים שמכיל נתונים מובְנים. האפליקציה לא יכולה להיות אפליקציה של חיפוש משולב.
    • QUERY: השאילתה שנכתבה בשפה טבעית.
    • GEO_FIELD_NAME_1, GEO_FIELD_NAME_N: רשימה של ערכים מסוג geolocation. אם סוג הערך לא geolocation, המערכת מתעלמת מהשדה הזה.

חיפוש עם מסנן רך

כדי להחיל מסנן רך:

REST

  1. מאתרים את מזהה האפליקציה. אם כבר יש לכם מזהה אפליקציה, דלגו לשלב הבא.

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

      מעבר אל 'אפליקציות'

    2. בדף אפליקציות, מאתרים את שם האפליקציה ומעתיקים את המזהה שלה מהעמודה מזהה.

  2. מריצים את פקודת ה-curl הבאה, שמפעילה את השיטה search:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "naturalLanguageQueryUnderstandingSpec": {
              "filterExtractionCondition": "ENABLED",
              "extractedFilterBehavior": "SOFT_BOOST"
            }
          }'
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • APP_ID: המזהה של אפליקציית החיפוש. האפליקציה צריכה להיות מקושרת למאגר נתונים שמכיל נתונים מובְנים. האפליקציה לא יכולה להיות אפליקציה של חיפוש משולב.
    • QUERY: השאילתה בשפה טבעית.

ציון שדות לשאילתות בשפה טבעית

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

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

אפשר להשתמש באתר להזמנת מלונות, שבו יש שדות כמו amenities,‏ id,‏ price_per_night,‏ rating ו-room_types. אם id היא מחרוזת של תווים ומספרים, סביר להניח ש-חיפוש מבוסס סוכנים לא יכלול אותה בשדות שמשמשים להבנת שאילתות בשפה טבעית.

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

דוגמה לרשומה ממאגר הנתונים המובְנים של נתוני מלונות.

{
  "title": "Miller-Jones",
  "rating": 1.7,
  "price_per_night": 115.16,
  "id": 2902,
    
  ],
  "amenities": [
    "Spa",
    "Parking",
    "Restaurant"
    
  ],
  "renovation_status": "Restaurant and spa renovation planned for 2027"
}

רשימת ההיתרים המתאימה לשדות בדוגמה הזו היא ["amenities", "price_per_night", "rating", "title"]. הפריט renovation_status חסר ברשימה.

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

REST

  1. מאתרים את מזהה האפליקציה. אם כבר יש לכם מזהה אפליקציה, דלגו לשלב הבא.

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

      מעבר אל 'אפליקציות'

    2. בדף אפליקציות, מאתרים את שם האפליקציה ומעתיקים את המזהה שלה מהעמודה מזהה.

  2. מריצים את פקודת ה-curl הבאה, שמפעילה את השיטה search:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "naturalLanguageQueryUnderstandingSpec": {
              "allowedFieldNames": ["FIELD_1", "FIELD_2"],
        }
      }'
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • APP_ID: המזהה של אפליקציית החיפוש. האפליקציה צריכה להיות מקושרת למאגר נתונים שמכיל נתונים מובְנים. האפליקציה לא יכולה להיות אפליקציה של חיפוש משולב.
    • QUERY: השאילתה בשפה טבעית.
    • FIELD_N: שדה שאפשר להוסיף לאינדקס בסכימה, שאפשר להשתמש בו כדי להבין שאילתות בשפה טבעית.