作者:来自 Elastic Thomas Veasey, Quentin Herreros 及 Thanos Papaoikonomou
了解在搜索和 RAG 管道中使用语义重新排序(rerank)的权衡。
在本系列博客中,我们将介绍 Elastic 的新语义重新排序器。语义重新排序通常可以提高相关性,尤其是在零样本设置中。它还可用于通过显著提高词汇检索相关性来权衡索引计算成本和查询计算成本。在这第一篇博客中,我们介绍了一些语义重新排序的背景知识以及它如何融入你的搜索和 RAG 管道。
检索
通常,文本搜索分为多个阶段,这些阶段逐渐将结果集过滤到呈现给用户(或 LLM)的最终列表中。
第一阶段称为“检索”,其系统必须能够扩展,以便高效地将查询文本与大量候选匹配语料库进行对比。这对可采用的方法提出了限制。
多年来,检索的唯一范式是词汇检索。在这种方法中,文档和查询被视为一组词,并通过统计模型推导其相关性。此范式中最常见的选择是 BM25。使用这种方法,查询可以通过倒排索引结合一些巧妙的优化手段高效地与大量文档进行比对,从而剔除不具竞争力的候选项。这种方法在许多情况下仍然非常有用,尤其适用于关键词搜索和精确短语匹配,并且还能高效地应用过滤条件。BM25 的评分也根据语料库特性进行调整,因此在没有调整的情况下能提供较强的基线效果。此外,BM25 在索引效率方面特别出色:无需运行模型推理,更新索引数据结构非常高效,许多状态可以永久存储在磁盘上。
近年来,语义检索越来越受欢迎。这种方法有多种风格;例如,密集段落、学习稀疏和后期交互检索。总之,他们使用转换器模型独立创建查询和每个文档的表示,并在这些表示上定义距离函数以捕获语义相似性。例如,查询和文档可能都嵌入到高维向量空间中,其中查询及其相关文档具有较低的角度分离。这些方法与 BM25 相比具有不同的优势:它们可以找到需要理解同义词的匹配项,其中上下文对于确定单词含义很重要,存在拼写错误等等。它们还允许全新的相关性信号,例如将图像和文本嵌入公共向量空间。
通过放弃找到精确最近邻集的要求,可以有效地将查询与非常大的文档语料库进行比较。可以使用 HNSW 等数据结构在语料库大小中以对数复杂度找到大多数最佳匹配。智能压缩方案允许大量数据驻留在磁盘上。但是,值得注意的是,在索引之前必须在所有文档上运行模型推理,并且与倒排索引相比,这些数据结构的构建成本相对较高。
人们已经做了大量工作来改进通用语义检索模型的训练,事实上,最好的模型在尝试评估零样本检索质量的基准测试中明显优于 BM25。
语义重新排序
到目前为止,我们讨论了独立创建查询和文档表示的方法。为了实现检索的可扩展性,这种选择是必要的。然而,对于第一阶段检索返回的前 N 个结果,我们不再有同样的约束。比较查询和这些前 N 个结果所需的工作量自然要小得多,因此我们可以考虑新的方法来对它们重新排序,以提高最终结果的相关性。这个任务称为重排序(reranking)。
我们将语义重新排序定义为使用模型来评估查询和一个(或多个)文档文本的语义相似性。这是为了将其与其他重新排序方法(例如学习排序 - learn to rank)区分开来,后者通常使用各种特征来模拟用户偏好。请注意,构成语义相似性的因素可能因任务而异:例如,查找相似文档需要评估两个文本的相似性,而回答问题则需要了解文档文本中是否包含必要的信息。
原则上,任何语义第一阶段检索方法都可以用于重新排序。例如,ELSER 可用于对 BM25 搜索的顶级结果进行重新排序。但请记住,BM25 检索中可能存在盲点,其召回率往往低于语义检索,并且没有重新排序方法能够修复这些问题。因此,重要的是根据你自己的数据评估此类设置。
从性能角度来看,这是一种将索引计算成本换成查询计算成本并可能增加延迟的权衡。相比语义检索,除了嵌入查询的成本外,还必须为每个需要重排序的文档创建嵌入。如果有一个非常庞大或经常更新的语料库,同时每秒的查询量相对较少,那么这种成本权衡可能是合理的。此外,对于 GPU 来说,这种额外的成本部分上被摊销了,因为文档推理可以作为一个批次处理,从而更好地利用计算资源。然而,与能够同时看到查询和文档的模型相比,这种方法的成本优势较小。这种方法被称为交叉编码(cross-encoding),而不是用于语义检索的双编码(bi-encoding),并且可以带来显著的收益。
交叉编码器
对于交叉编码器(cross-encoders),查询和文档文本都通过特殊的分隔标记一起呈现给模型。模型本身会返回相似度分数。从示意图上看,文本的建模方式如下:
在双编码器(bi-encoder )中,查询和文档首先单独生成嵌入,然后使用简单的相似度函数进行比较。从示意图上看,文本的建模如下:
使用交叉编码器对固定查询进行重新排序被视为回归问题。该模型为每个查询 - 文档对输出一个数值分数。然后按分数降序对文档进行排序。我们将在本系列的第二篇博客中回顾该模型的训练过程。从概念上讲,认识到这允许模型关注查询和文档文本的不同部分并学习用于评估相关性的丰富特征很有用。
据观察,这个过程允许模型学习更强大的表示以通常评估相关性。它还可能允许模型捕获更细微的语义。例如,双编码器模型难以处理否定(negation)之类的问题,而是倾向于选择文本中大多数概念的匹配项,而不管查询是要包含还是排除它们。交叉编码器模型有能力学习否定如何影响相关性判断。最后,交叉编码器分数通常在各种查询类型和主题中得到更好的校准。这使得选择删除文档的分数更加可靠。
与
与 RAG 的联系
改进提供给大型语言模型(LLM)的内容能够提升 RAG(检索增强生成)的质量。事实上,检索质量通常是 RAG 性能的瓶颈。例如,如果回答问题所需的信息仅存在于特定文档中,那么该文档必须被包含在 LLM 的上下文窗口中。此外,尽管当前一代长上下文模型在从长上下文中提取信息方面表现出色,但处理额外输入令牌的成本是相当高的,而将资金投入到检索上通常会带来显著的总体成本效率。RAG 用例通常对延迟的要求较为宽松,因此在重排序上花费额外时间影响不大。实际上,如果为了达到相同的召回率在提示中提供更少的段落,则可以通过减少生成时间来抵消延迟。这使得语义重排序特别适合在 RAG 场景中应用。
总结
在这篇文章中,我们介绍了语义重新排名的概念,并讨论了如何根据此用例定制模型架构以提高相关性,特别是在零样本设置中。我们讨论了与语义检索相对的语义重新排序相关的性能权衡。在这种情况下讨论性能时,一个关键的选择是重新排序多少文档,这严重影响了重新排序方法的性能和相关性之间的权衡。当我们讨论如何评估重新排序模型并调查一些最先进的开放和封闭重新排序模型时,我们将再次讨论这个话题。
准备好自己尝试一下了吗?开始免费试用。
希望将 RAG 构建到你的应用程序中?想要尝试使用向量数据库的不同 LLM?
查看我们在 Github 上针对 LangChain、Cohere 等的示例笔记本,并立即加入 Elasticsearch Relevance Engine 培训。
原文:What is semantic reranking and how to use it? - Search Labs