按文档级相关性过滤搜索结果

在 Vertex AI Search 应用中进行搜索时,您可以指定文档级相关性过滤条件,以便仅返回符合过滤条件阈值的文档作为结果。本页介绍了阈值类型、优化阈值的重要性,以及如何指定相关性过滤条件及其阈值。

按文档级相关性过滤简介

当搜索查询返回结果时,它会为每个检索到的文档分配相关性级别。在搜索请求中,您可以设置一个阈值,以便仅返回满足过滤条件阈值的文档。设置较高的阈值可以减少查询返回的文档数量。而设置较低的阈值可能会导致结果中包含与用户查询的相关性较低的文档,从而稀释结果。

因此,如果您发现结果中包含太多与用户相关性不足的文档,请设置较高的相关性阈值,以将结果范围缩小到最相关的少数文档。如果高阈值过于严格,您可以将其降低到更优的值。

搜索类型

您可以对以下类型的搜索应用相关性过滤条件:

  • 关键字搜索:根据关键字搜索检索文档。
  • 语义相似度搜索:根据嵌入检索文档。

在相关性过滤条件定义中,您可以为每种搜索指定阈值类型。搜索会检索给定搜索的文档,然后应用指定的阈值。

阈值类型

发送搜索请求时,您可以为关键字和语义相似度搜索指定以下任一类型的阈值。

  • 相关性阈值:设置此阈值后,搜索会使用专有模型来确定文档的相关性。在这种情况下,搜索可能会使用任何相关信号,例如关键字相似度得分、主题相关性得分和语义相似度得分。

    相关性阈值是一种粗略的设置,允许以下值:HIGHMEDIUMLOWLOWESTHIGH 阈值可能会返回相关性得分较低的文档,而 LOWEST 阈值可能会返回更多可能与搜索查询无关的文档。

  • 语义相关性阈值:设置此阈值后,过滤条件将仅根据语义相似度得分来确定文档的相关性。

    语义相关性阈值是一项精细的设置,是一个介于 [0,1] 范围内的浮点值。将阈值设置为零会返回所有文档,而将阈值设置为 1 会返回相关性最高的文档。

相关性过滤条件定义和示例

如需在搜索请求中定义相关性过滤条件,请针对每种类型的搜索(关键字搜索和语义搜索)仅指定一种类型的阈值(相关性阈值和语义相关性阈值)。您可以在相关性过滤条件规范中指定一种或两种搜索类型。不过,每种类型的搜索中只能定义一种类型的阈值。例如,应该考虑以下事项:

{
  "relevanceFilterSpec": {
    "keywordSearchThreshold":  {
      "relevanceThreshold": "LOW"
    },
    "semanticSearchThreshold":  {
      "semanticRelevanceThreshold": 0.871
    }
  }
}

在此搜索请求中,结果分两个阶段返回:检索和过滤。

  • 搜索会根据关键字匹配检索文档,然后使用较低的相关性阈值过滤文档。这会返回大量检索到的文档。
  • 同时,搜索会根据语义相似度检索文档,然后使用 0.871 的高语义相关性阈值过滤文档。这样会减少检索到的文档数量。

搜索重点更多地放在关键字匹配上,而不是语义相似度上。 过滤条件允许检索更多因关键字匹配而检索到的文档。

同样,您可以按以下方式定义相关性过滤条件,以返回更少的包含匹配关键字的文档,以及更多具有语义相似性的文档。

"relevanceFilterSpec": {
    "keywordSearchThreshold":  {
        "semanticRelevanceThreshold": 0.871
    },
    "semanticSearchThreshold":  {
        "relevanceThreshold": "LOW"
    }
}

支持文档级相关性过滤条件的数据类型和应用

文档级相关性过滤器可应用于包含以下类型数据的数据存储区:

  • 具有高级网站索引编制功能的网站数据
  • 自定义非结构化数据
  • 自定义结构化数据

文档级相关性过滤条件不适用于具有基本网站索引、媒体数据或医疗保健数据的数据存储区。

此外,文档级相关性过滤条件不能与混合搜索应用搭配使用。混合搜索应用是指连接到多个数据存储区的应用。

其他类型的过滤器

文档级相关性过滤条件并不是过滤查询返回的数据的唯一方法。您还可以使用过滤表达式根据元数据(在高级网站索引和带有元数据的非结构化数据存储区中)和字段值(在结构化数据存储区中)过滤结果。

如需了解详情,请参阅以下主题:

如果您同时使用过滤表达式和文档级相关性过滤器,系统会先将过滤表达式应用于结果,然后再应用文档级相关性过滤器。

准备工作

确保您已创建应用和数据存储区,并且已将数据注入数据存储区。如需了解详情,请参阅创建搜索应用。另请参阅支持文档级相关性过滤条件的数据类型和应用

如需按相关性过滤,请按以下步骤操作:

  1. 找到您的应用 ID。如果您已拥有应用 ID,请跳到下一步。

    1. 在 Google Cloud 控制台中,前往 AI Applications 页面。

      前往应用

    2. 应用页面上,找到应用的名称,并从 ID 列获取应用的 ID。

  2. 如需按文档级相关性过滤搜索结果,请使用 engines.servingConfigs.search 方法指定 relevanceFilterSpec 字段,该字段仅为每种搜索类型定义一种阈值。也就是说,您可以为给定的搜索类型指定 relevanceThresholdsemanticRelevanceThreshold

    curl -X POST -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
    -d '{
     "servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search",
    "query": "QUERY",
    "relevanceFilterSpec": {
      "keywordSearchThreshold":  {
          "relevanceThreshold": "RELEVANCE_THRESHOLD"
      },
      "semanticSearchThreshold":  {
          "semanticRelevanceThreshold": SEMANTIC_RELEVANCE_THRESHOLD
      }
    }
    }'
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • APP_ID:您要查询的 Vertex AI Search 应用的 ID。
    • QUERY:要搜索的查询文本。
    • RELEVANCE_THRESHOLD:以下项之一:HIGHMEDIUMLOWLOWEST
    • SEMANTIC_RELEVANCE_THRESHOLD:一个介于 [0,1] 范围内的浮点值。
  3. 使用不同的阈值测试多个查询,以确定适合您的数据和应用的最佳阈值设置。