使用自然語言理解技術篩選

本頁說明如何運用自然語言理解技術,自動為搜尋查詢建立篩選條件,進而提升傳回結果的品質。

這項功能適用於已連結結構化資料儲存庫的搜尋應用程式。

關於自然語言查詢理解

如果您有使用結構化資料的自訂搜尋應用程式,系統可以將使用者的自然語言查詢重新格式化為經過篩選的查詢。與在查詢字串中搜尋字詞相比,這項做法可提供品質更優異的搜尋結果。

舉例來說,自然語言查詢 (例如 "Find a coffee shop serving banana bread") 可能會重新改寫為查詢和篩選器: "query": "banana bread", "filter": "type": ANY(\"cafe\")

與撰寫自己的篩選器運算式相比,使用自然語言查詢理解功能更簡單且更具彈性。如要瞭解如何編寫篩選運算式,請參閱「篩選自訂搜尋的結構化或非結構化資料」。

硬式和軟式篩選器

您可以套用兩種篩選條件,瞭解自然語言查詢:嚴格寬鬆

  • 困難。根據預設,系統會將擷取的篩選條件套用為必要條件,結果必須符合這些條件才會傳回。

    行為與 SearchRequest 訊息中的 filter 欄位類似。

  • 柔和。除了硬性篩選器,您也可以對搜尋結果套用加成。系統會優先傳回加權結果,但也會傳回不符合加權條件的結果。

    行為與 SearchRequest 訊息中的 boost_spec 欄位類似。

您可以嘗試使用這兩種篩選器。如果搜尋結果不夠多,請改用軟性篩選器。

如要瞭解如何套用寬鬆篩選器,請參閱下方的「使用寬鬆篩選器搜尋」一節。

範例

以下範例可協助您瞭解這項功能:

範例:從查詢中擷取欄位 (硬性篩選器)

我們將以搜尋飯店為例,說明這項自然語言查詢理解功能。

請針對飯店網站的結構化資料儲存空間,採用以下查詢: 「尋找適合家庭入住的飯店,至少四星級,每晚費用低於 300 美元,可攜帶寵物入住,並提供免費 Wi-Fi。」

如果無法理解自然語言查詢,搜尋應用程式會尋找含有查詢字詞的文件。

透過瞭解自然語言查詢和適當結構化資料,系統會以篩選條件取代查詢中的部分自然語言,進而提升搜尋效率。如果結構化資料含有 star_rating (數字)、price (數字) 和 amenities (字串) 的欄位,則可制定查詢,加入下列篩選器:

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

範例:使用地理位置篩選條件 (嚴格篩選條件)

這個範例與前一個範例類似,差別在於這個範例包含地理位置篩選器,這是特殊的擷取篩選器。Vertex AI Search 可辨識查詢中的位置,並為這些位置建立鄰近篩選器。

以下是向全州商家網站提出的查詢: 「幫我找舊金山至少 4 星的時尚飯店。」

系統會運用自然語言查詢理解功能和地理位置篩選器,重新制定搜尋條件,加入以下篩選器,搜尋舊金山方圓 10 公里內至少 4 星級的飯店:

   {
       "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. 找出資料儲存庫 ID。如果已有資料商店 ID,請跳到下一個步驟。

    1. 前往 Google Cloud 控制台的「AI Applications」頁面,然後點按導覽選單中的「Data Stores」(資料儲存庫)

      前往「Data Stores」頁面

    2. 點按資料儲存庫的名稱。

    3. 在資料儲存庫的「資料」頁面中,取得資料儲存庫 ID。

  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/v1beta/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 專案的 ID。
    • DATA_STORE_ID:Vertex AI Search 資料儲存庫的 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 專案的 ID。
    • APP_ID:要查詢的 Vertex AI Search 應用程式 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 專案的 ID。
    • APP_ID:要查詢的 Vertex AI Search 應用程式 ID。應用程式必須連結至包含結構化資料的資料儲存庫。應用程式不得為混合搜尋應用程式。
    • QUERY:以自然語言撰寫的查詢。
    • GEO_FIELD_NAME_1, GEO_FIELD_NAME_Ngeolocation 型別的值清單。如果值類型不是 geolocation,系統會忽略這個欄位。

使用柔焦濾鏡搜尋

如要套用柔和濾鏡,請按照下列步驟操作:

REST

  1. 找出應用程式 ID。如果已有應用程式 ID,請跳到下一個步驟。

    1. 前往 Google Cloud 控制台的「AI Applications」頁面。

      前往「應用程式」

    2. 在「應用程式」頁面中找出應用程式名稱,然後從「ID」欄取得應用程式的 ID。

  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 專案的 ID。
    • APP_ID:搜尋應用程式的 ID。應用程式必須連結至含有結構化資料的資料儲存庫。應用程式不得為混合搜尋應用程式。
    • QUERY:以自然語言提出的查詢。

指定自然語言查詢的欄位

如要將欄位做為自然語言查詢理解的篩選條件,必須在結構定義中將該欄位標示為可建立索引。(如需查看及編輯結構定義的一般資訊,請參閱「更新結構定義」一文)。

Vertex AI Search 會判斷結構定義中哪些可建立索引的欄位,適合用於自然語言查詢理解篩選條件。但如果包含您不想要的欄位,則需要建立允許清單,指定可使用的欄位。

以飯店訂房網站為例,其中有 amenitiesidprice_per_nightratingroom_types 等欄位。如果 id 是字元和數字的字串,Vertex AI Search 可能會將其從用於瞭解自然語言查詢的欄位中排除。

不過,如果發現 Vertex AI Search 未排除應排除的欄位,導致查詢結果品質不佳,則需要指定可使用的欄位。舉例來說,如果飯店結構定義包含對消費者無用,且可能讓連鎖飯店感到尷尬的 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. 找出應用程式 ID。如果已有應用程式 ID,請跳到下一個步驟。

    1. 前往 Google Cloud 控制台的「AI Applications」頁面。

      前往「應用程式」

    2. 在「應用程式」頁面中找出應用程式名稱,然後從「ID」欄取得應用程式的 ID。

  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 專案的 ID。
    • APP_ID:搜尋應用程式的 ID。應用程式必須連結至含有結構化資料的資料儲存庫。應用程式不得為混合搜尋應用程式。
    • QUERY:以自然語言提出的查詢。
    • FIELD_N:結構定義中的可編列索引欄位,可用於瞭解自然語言查詢。