使用自然语言理解过滤

本页介绍了如何应用自然语言理解技术,自动为搜索查询创建过滤条件,从而提高返回结果的质量。

您可以将此功能与连接到结构化数据存储区的搜索应用搭配使用。

自然语言查询理解功能简介

如果您有一个包含结构化数据的自定义搜索应用,则可以将用户的自然语言查询重新格式化为过滤查询。与搜索查询字符串中的字词相比,这种方法可以提供更优质的搜索结果。

与自行编写过滤条件表达式相比,使用自然语言查询理解功能更简单、更灵活。如需了解如何编写过滤表达式,请参阅过滤结构化或非结构化数据的自定义搜索

此功能最好通过示例来解释:

示例:从查询中提取字段

我们将通过搜索酒店的示例来介绍此自然语言查询理解功能。

以下是针对酒店网站的结构化数据存储区提出的查询: “帮我找一家适合家庭入住的酒店,至少四星级,每晚费用低于 300 美元,允许携带宠物狗,并提供免费 Wi-Fi。”

如果没有自然语言查询理解功能,搜索应用会查找包含查询中字词的文档。

借助自然语言查询理解和适当的结构化数据,通过将查询中的部分自然语言替换为过滤条件,可以提高搜索效率。 如果结构化数据包含 star_rating(数字)、price(数字)和 amenities(字符串)字段,则可以将查询重写为以下过滤条件加上剩余查询:

  • 从自然语言查询中提取的过滤条件:

    {
        "star_rating": ≥4,
        "price": ≤300,
        "amenities": "Wifi", "Pets Allowed"
    }
    
  • 提取过滤条件后重新制定的剩余查询:

    family-friendly

示例:使用地理位置过滤条件

此示例与上一个示例类似,不同之处在于它包含一个地理位置过滤条件,这是一种特殊的提取过滤条件。Vertex AI Search 能够识别查询中的位置,并为这些位置创建邻近度过滤条件。

以向州级商家网站提出的以下查询为例:“帮我找一家位于旧金山的时尚别致的四星级以上酒店。”

借助自然语言查询理解和地理位置过滤条件,搜索会重新表述为过滤条件和剩余查询:

  • 从自然语言查询中提取的过滤条件,用于查找至少 4 星级且位于旧金山方圆 10 公里范围内的酒店:

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

    在此示例中,GEO_DISTANCE 是一个地址,但在其他查询中,即使原始查询包含地址,GEO_DISTANCE 也可能会写成纬度和经度。

  • 提取过滤条件后重新制定的剩余查询:

    chic and stylish in San Francisco

    虽然已设置地理位置过滤条件,但地点名称仍保留在剩余查询中。这与其他过滤条件(例如 star_rating)不同。

限制

以下限制适用于自然语言查询理解:

  • 自然语言查询理解功能无法应用于混合搜索应用。如果您尝试在混合搜索应用中使用自然语言查询理解功能,系统会显示错误。

  • 自然语言查询理解功能仅适用于使用结构化数据存储区的自定义搜索应用。

  • 使用自然语言查询理解功能会增加延迟时间,因此如果延迟时间是个问题,您可能选择不使用此功能。

  • 对于地理位置信息,必须明确描述位置。您无法使用“我附近”或“家”等位置信息。

  • 地理定位的半径为 10 公里,且无法配置。

准备工作

在开始使用自然语言查询理解功能之前,您必须为与您计划使用的应用相关联的结构化数据存储区启用该功能。

如需启用自然语言查询理解功能,请按以下步骤操作:

REST

  1. 查找数据存储区 ID。如果您已拥有数据存储区 ID,请跳至下一步。

    1. 在 Google Cloud 控制台中,前往 AI Applications 页面,然后在导航菜单中点击数据存储区

      前往“数据存储区”页面

    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/v1beta/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/v1beta/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_N:类型为 geolocation 的值的列表。如果值类型不是 geolocation,则系统会忽略此字段。