Link Search Menu Expand Document Documentation Menu

神经稀疏查询两阶段处理器

2.15 版引入

neural_sparse_two_phase_processor 搜索处理器旨在为神经稀疏搜索提供更快的搜索管道。它通过将原始的用所有词元对所有文档进行评分的方法分为两个步骤来加速神经稀疏查询:

  1. 高权重词元对文档进行评分并筛选出靠前的文档。
  2. 低权重词元对靠前的文档进行重新评分。

请求正文字段

下表列出了所有可用的请求字段。

字段 数据类型 描述
enabled 布尔型 控制两阶段处理器是否启用。默认值为 true
two_phase_parameter 对象 表示两阶段参数及其关联值的键值对映射。您可以指定 prune_ratioexpansion_ratemax_window_size 的值,或这三个参数的任意组合。可选。
two_phase_parameter.prune_type 字符串 用于分离高权重和低权重词元的剪枝策略。默认值为 max_ratio。有关有效值,请参阅稀疏向量剪枝
two_phase_parameter.prune_ratio 浮点型 此比率定义了高权重和低权重词元如何分离。阈值通过将词元的最高得分乘以其 prune_ratio 计算得出。当 prune_type 设置为 max_ratio 时,有效值在 [0,1] 范围内。默认值为 0.4
two_phase_parameter.expansion_rate 浮点型 文档在第二阶段进行微调的比率。第二阶段文档数量等于查询大小(默认值为 10)乘以其扩展率。有效范围大于 1.0。默认值为 5.0
two_phase_parameter.max_window_size 整数 可以使用两阶段处理器处理的最大文档数量。有效范围大于 50。默认值为 10000
标签 字符串 处理器的标识符。可选。
描述 字符串 处理器的描述。可选。

示例

以下示例使用 neural_sparse_two_phase_processor 搜索请求处理器创建一个搜索管道。

创建搜索管道

以下示例请求使用 neural_sparse_two_phase_processor 搜索请求处理器创建一个搜索管道。该处理器在索引级别设置了一个自定义模型 ID,并为两个特定索引字段提供了不同的默认模型 ID。

PUT /_search/pipeline/two_phase_search_pipeline
{
  "request_processors": [
    {
      "neural_sparse_two_phase_processor": {
        "tag": "neural-sparse",
        "description": "This processor is making two-phase processor.",
        "enabled": true,
        "two_phase_parameter": {
          "prune_ratio": custom_prune_ratio,
          "expansion_rate": custom_expansion_rate,
          "max_window_size": custom_max_window_size
        }
      }
    }
  ]
}

设置搜索管道

创建两阶段管道后,将 index.search.default_pipeline 设置为要使用两阶段管道的索引的管道名称。

PUT /index-name/_settings 
{
  "index.search.default_pipeline" : "two_phase_search_pipeline"
}

限制

neural_sparse_two_phase_processor 具有以下限制。

版本支持

neural_sparse_two_phase_processor 仅可与 OpenSearch 2.15 或更高版本一起使用。

复合查询支持

截至 OpenSearch 2.15,仅支持布尔复合查询

还支持神经稀疏查询和带有提升参数(而非提升查询)的布尔查询。

示例

以下示例展示了支持的查询类型的神经稀疏查询。

单个神经稀疏查询

GET /my-nlp-index/_search
{
  "query": {
    "neural_sparse": {
      "passage_embedding": {
        "query_text": "Hi world"
        "model_id": <model-id>
      }
    }
  }
}

嵌套在布尔查询中的神经稀疏查询

GET /my-nlp-index/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "neural_sparse": {
            "passage_embedding": {
              "query_text": "Hi world",
              "model_id": <model-id>
            },
            "boost": 2.0
          }
        }
      ]
    }
  }
}

P99 延迟指标

使用在三台 m5.4xlarge Amazon Elastic Compute Cloud (Amazon EC2) 实例上设置的 OpenSearch 集群,OpenSearch 对对应于 10 多个数据集的索引进行了神经稀疏查询 P99 延迟测试。

仅文档模式延迟指标

在仅文档模式下,两阶段处理器可以显著降低查询延迟,如以下延迟指标所示:

  • 不使用两阶段处理器的平均延迟:53.56 毫秒
  • 使用两阶段处理器的平均延迟:38.61 毫秒

这使得总延迟降低了约 27.92%。大多数索引在使用两阶段处理器时显示出显著的延迟降低,降低幅度从 5.14% 到 84.6% 不等。具体的延迟优化值取决于索引内的数据分布。

双编码器模式延迟指标

在双编码器模式下,两阶段处理器可以显著降低查询延迟,如以下延迟指标所示:

  • 不使用两阶段处理器的平均延迟:300.79 毫秒
  • 使用两阶段处理器的平均延迟:121.64 毫秒

这使得总延迟降低了约 59.56%。大多数索引在使用两阶段处理器时显示出显著的延迟降低,降低幅度从 1.56% 到 82.84% 不等。具体的延迟优化值取决于索引内的数据分布。