加载中

语义重排序

提示

本概述主要聚焦于语义重排的高级概念和用例。有关在 Elasticsearch 中设置和使用语义重排的完整实现细节,请参阅 Search API 文档中的参考文档

重排器可提高早期检索机制所得结果的相关性。语义重排器使用机器学习模型,根据搜索结果与查询之间的语义相似度对搜索结果进行重新排序。

语义重排需要相对庞大且复杂的机器学习模型,并实时响应查询。该技术适用于规模较小的 top-k 结果集,通常作为管道中的最后步骤之一。这是一种提高搜索相关性的强大技术,对关键词检索、语义检索或混合检索算法同样有效。

接下来的部分将详细介绍语义重排的优势、用例和模型类型。最后部分包含关于如何在 Elasticsearch 中实现语义重排的实用高级概述,以及完整参考文档的链接。

语义重排支持多种用例

  • 词法(BM25)检索结果重排

    • 只需向任何词法/BM25检索管道添加一个简单的 API 调用,即可实现开箱即用的语义搜索。
    • 在现有索引之上添加语义搜索功能,无需重新建立索引,非常适合快速改进。
    • 是拥有复杂现有索引的环境的理想选择。
  • 语义检索结果重排

    • 通过使用更强大的模型,改善使用 ELSER 稀疏向量嵌入或稠密向量嵌入的语义检索器的结果。
    • 在混合检索之上添加精炼层,结合了倒数排名融合 (RRF) 或使用线性检索器进行线性组合
  • 通用应用程序

    • 在检索增强生成(RAG)用例或其他涉及大语言模型(LLM)输入的场景中,提供对文档相关性的显式控制。

既然我们已经概述了语义重排的价值,接下来将探讨驱动此过程的具体模型以及它们的区别。

总体而言,语义重排使用两种类型的模型:交叉编码器和双编码器。

注意

在此版本中,Elasticsearch 仅支持交叉编码器用于语义重排。

  • 交叉编码器模型可以被视为一种功能更强大的多合一解决方案,因为它生成感知查询的文档表示。它将查询和文档文本作为一个单一的拼接输入。

  • 双编码器模型将文档或查询文本作为输入。文档和查询嵌入是分别计算的,因此它们彼此不感知。

    • 要计算排名分数,需要进行外部操作。这通常涉及计算查询与文档嵌入之间的点积或余弦相似度。

简而言之,交叉编码器提供高准确率,但更消耗资源。双编码器速度更快、成本效益更高,但精度较低。

在未来版本中,Elasticsearch 还将支持双编码器。如果您对交叉编码器和双编码器之间实际差异的更详细分析感兴趣,请展开下一部分。

Elasticsearch 提供了两种向搜索管道添加语义重排的方法

两者都使用相同的底层推理端点和重排模型。

这两种方法都需要配置用于 rerank 任务的推理端点。您有以下选项

  1. 使用由 Elastic 推理服务 (EIS) 提供支持的预配置 .jina-reranker-v3 端点。这是推荐选项。了解有关 Jina 重排模型的更多信息

  2. 通过预配置的 .rerank-v1-elasticsearch 端点使用 Elastic Rerank 交叉编码器模型,或者使用 推理 API 的 Elasticsearch 服务创建自定义端点。

  3. 使用 Jina AI Rerank 推理端点创建 rerank 端点。

  4. 使用 Cohere Rerank 推理端点创建 rerank 端点。

  5. 使用 Google Vertex AI 推理端点创建 rerank 端点。

  6. 使用 Eland 从 Hugging Face 将模型上传到 Elasticsearch。使用 Eland 加载模型时,您需要使用 text_similarity NLP 任务类型。然后,使用 rerank 端点类型设置 Elasticsearch 服务推理端点

    有关 Elasticsearch 支持用于语义重排的第三方文本相似度模型列表,请参阅 Elastic NLP 模型参考

您可以使用检索器或 ES|QL 执行语义重排。

使用检索器语法在单个 _search 调用中以声明方式组合多阶段检索管道。当您想要将重排与诸如 RRF线性置顶 等其他检索器阶段结合使用时,这非常合适。

您可以使用预配置的重排端点(例如 .jina-reranker-v3.rerank-v1-elasticsearch),或者使用 Elasticsearch 推理 API 创建自定义端点。然后在您的搜索请求中定义一个 text_similarity_reranker 检索器。

有关完整的参考文档,请参阅 text_similarity_reranker 检索器

使用 ES|QL RERANK 命令将重排添加为管道查询中的一个步骤。当您想要将重排与转换、聚合或带有 COMPLETION 的文本生成等其他 ES|QL 功能结合使用时,这非常合适。

有关完整的参考文档,请参阅 RERANK 命令

检索器 (Retrievers) ES|QL
语法 声明式 JSON(检索器树) 管道查询语言
可组合性 与其他检索器嵌套(RRF、线性、置顶、多样化) 与其他命令管道化(FORK、FUSE、COMPLETION、STATS)
多字段重排 仅支持单字段 支持多个字段
适用场景 _search API 中的多阶段检索管道 包含转换或生成的端到端搜索查询
客户端支持 所有 Elasticsearch 客户端 所有 Elasticsearch 客户端

许多交叉编码器模型的一个局限性是,当它们用于包含长文档的语料库时,性能表现不佳。这是因为许多模型会将输入截断到其 Token 窗口的长度,这可能会在将文档发送给重排器之前切断文档中最相关的部分。预配置的 .rerank-v1-elasticsearch 端点就是以这种方式进行截断的。

text_similarity_reranker 检索器中的 chunk_rescorer 允许显式控制发送给重排器的内容量。这解决了长文档问题,并通过向重排器发送更少的 Token 来控制推理成本。

警告

对打分的分块进行重排是一项专家级功能,如果与不执行截断的模型一起使用,可能会对相关性产生负面影响。

© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.