在这个系列博客中,我们将介绍 Elastic 的新语义重排器。语义重排通常可以在零样本设置中显著提高相关性,还可以通过显著提升词汇检索的相关性,在索引计算成本与查询计算成本之间进行权衡。在这篇博客中,我们将介绍语义重排的背景以及它如何融入你的搜索和 RAG(检索增强生成)流水线。在第二篇文章中,我们将向你介绍 Elastic Rerank: Elastic 的新语义重排模型,这是我们训练并在技术预览中发布的新模型。
通常,文本搜索分为多个阶段,这些阶段逐步筛选结果集,最终呈现给用户(或 LLM)。第一个阶段称为检索,必须能够扩展以有效地将查询文本与大量候选匹配进行比较。这限制了可考虑的方法集。
多年来,唯一可用的检索范式是词汇检索。在这种方法中,文档和查询被视为词袋,并使用统计模型推断相关性。最流行的选择是 BM25。通过使用倒排索引和巧妙的优化来修剪非竞争性候选项,可以有效地将查询与庞大的文档库进行比较。这种方法仍然有用,因为许多查询(如关键词搜索和精确短语匹配)与这种模型高度一致,并且可以同时有效地应用过滤谓词。评分也根据语料库特性进行调整,这使其在未进行调优时成为一个强有力的基准。最后,从索引角度来看,它特别高效:无需运行模型推理,更新索引数据结构非常高效,并且大量状态可以永久驻留在磁盘上。
近年来,语义检索变得越来越流行。这种方法有多种形式,例如密集段落、学习稀疏和后期交互检索。简而言之,它们使用变压器模型独立创建查询和每个文档的表示,并在这些表示上定义距离函数以捕捉语义相似性。例如,查询和文档可以嵌入到一个高维向量空间中,其中查询和其相关文档具有低角度分离。这些方法在某些方面比 BM25 更强大:它们可以找到需要理解同义词的匹配,词义需要上下文决定的匹配,有拼写错误的匹配等。它们还允许全新的相关性信号,例如将图像和文本嵌入到一个共同的向量空间中。
通过放弃找到精确最近邻集的要求,可以有效地将查询与庞大的文档库进行比较。像 HNSW 这样的数据结构可以用对数复杂度找到大多数最佳匹配。智能压缩方案允许大量数据驻留在磁盘上。然而,值得注意的是,必须在索引前对所有文档进行模型推理,并且这些数据结构相对于倒排索引构建成本相对较高。
大量工作已致力于改进通用语义检索模型的训练,实际上最好的模型在基准测试中显著超越 BM25,这些测试试图评估零样本检索质量。
到目前为止,我们已经讨论了独立创建查询和文档表示的方法。这种选择对于扩展检索来说是必要的。然而,给定第一阶段检索返回的前 N 个结果,我们不再有相同的约束。比较查询和这些前 N 个结果所需的工作量自然要小得多,因此我们可以考虑新的方法来重新排序它们,以提高最终结果的相关性。这项任务称为重排。
我们将语义重排定义为使用模型评估查询和一个(或多个)文档文本之间的语义相似性。这与其他重排方法如学习排序区分开来,后者通常使用各种特征来建模用户偏好。注意,不同任务对语义相似性的定义可能会有所不同:例如,查找相似文档需要评估两个文本的相似性,而回答问题则需要理解文档文本中是否包含必要的信息。
原则上,任何语义第一阶段检索方法都可以用于重排。例如,ELSER 可以用于重排 BM25 搜索的顶级结果。但请记住,BM25 检索可能存在盲点,其召回率通常低于语义检索,且没有任何重排方法能够修复这些盲点。因此,重要的是在自己的数据上评估这些设置。
从性能角度来看,这是一种在索引计算成本和查询计算成本之间进行权衡的方法,可能还会影响延迟。与语义检索相比,除了嵌入查询的成本外,还必须嵌入每个需要重排的文档。如果你有一个非常大的语料库和/或一个频繁更新且每秒查询次数较少的语料库,这可以是一个不错的成本权衡。此外,对于 GPU 来说,额外成本部分被文档推理可以作为批处理处理的事实所摊销,这允许更好的利用率。然而,与可以同时看到查询和文档的模型相比,几乎没有成本效益。这种方法称为交叉编码,而语义检索中使用的则是双编码,它可以带来显著的好处。
对于交叉编码器,查询和文档文本一起呈现给模型,并以特殊的分隔符连接。模型本身返回一个相似性分数。示意图如下所示:
在双编码器中,查询和文档首先分别嵌入,然后使用一个简单的相似性函数进行比较。示意图如下所示:
对于固定查询的交叉编码器重排被框定为回归问题。模型为每个查询-文档对输出数值分数,然后按降序排列这些文档。我们将在本系列的第二篇博客中详细介绍训练这种模型的过程。概念上,它允许模型关注查询和文档文本的不同部分,并学习丰富的特征来评估相关性。
研究表明,这种过程允许模型学习更稳健的表示来评估相关性。它也有可能捕捉到更细微的语义。例如,双编码器模型在处理否定时表现不佳,往往只关注文本中的主要概念,而不管查询是希望包含还是排除它们。交叉编码器模型则有能力学习否定应如何影响相关性判断。最后,交叉编码器分数在各种查询类型和主题中通常更好地校准。这使得选择丢弃文档的分数阈值更加可靠。
改进提供给 LLM 的内容可以提高 RAG 的质量。实际上,搜索质量通常是 RAG 性能的瓶颈。例如,如果正确回答问题所需的信息仅存在于特定文档中,则必须在 LLM 上下文窗口中提供该文档。此外,尽管当前一代长上下文模型在从长上下文中提取信息方面表现出色,但处理额外输入标记的成本很高,花在搜索上的钱通常会带来显著的整体成本效率。RAG 用例通常也有较宽松的延迟约束,因此在重排上花费一些额外时间不是问题。实际上,如果为了实现相同的召回率,提示中需要提供的段落数量减少,延迟也可以通过减少生成时间来抵消。这使得语义重排特别适合应用于 RAG 场景。
在这篇文章中,我们介绍了语义重排的概念,并讨论了如何针对这个用例调整模型架构以提高相关性,特别是在零样本设置中。我们讨论了语义重排与语义检索相关的性能权衡。在讨论性能时,一个关键的选择是重排多少文档,这直接影响重排方法的性能和相关性之间的权衡。当我们讨论如何评估重排模型并调查一些最新的开放和封闭重排模型时,我们将再次讨论这个话题。
在本系列的第二篇文章中,我们将向你介绍 Elastic Rerank: Elastic 的新语义重排模型,这是我们训练并在技术预览中发布的新模型。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。