提升 Elastic Stack 中的信息检索:混合检索

在本篇博文中,我们介绍了混合检索,并探讨了 Elasticsearch 中的两种具体实现。我们探索了如何通过使用倒序秩融合和加权分数和将 Elastic Learned Sparse Encoder 与 BM25 相结合来提高其性能。

在我们上一篇博文中,我们介绍了 Elastic Learned Sparse Encoder,这是一个经过训练用于有效零样本文本检索的模型。Elasticsearch

® 还具有强大的词法检索功能和丰富的工具来组合不同查询的结果。在本篇博文中,我们介绍了混合检索的概念,并探讨了 Elasticsearch 中可用的两种具体实现。特别是,我们探索了如何通过使用倒序秩融合和加权分数和将 Elastic Learned Sparse Encoder 与 BM25 相结合来提高其性能。

我们还讨论了我们进行的一些实验,以探索一些普遍的研究问题。这些问题包括如何最佳地参数化倒序秩融合以及如何校准加权分数和。

混合检索

尽管现代训练管道产生的检索模型在零样本场景中具有良好的性能,但众所周知,词法检索器(例如 BM25)和语义检索器(例如 Elastic Learned Sparse Encoder)在某种程度上是互补的。具体来说,如果假设它们检索的相关文档之间的匹配次数多于它们检索的不相关文档之间的匹配次数,则结合检索方法的结果将提高相关性。

对于使用非常不同的检索机制的方法,这个假设是合理的,因为对于大多数查询和语料库来说,不相关文档比相关文档多得多。如果方法独立且均匀地随机检索相关和不相关文档,则这种不平衡意味着相关文档比不相关文档更有可能匹配。我们进行了一些重叠测量,以检查 Elastic Learned Sparse Encoder、BM25 和各种稠密检索器之间的这种假设,如表 1 所示。这为使用所谓的混合搜索提供了一些依据。在下文中,我们将研究混合搜索的两种明确实现。

倒序秩融合

倒序秩融合这篇论文中被提出。它易于使用,完全无监督,甚至不需要分数校准。它的工作原理是使用 BM25 和模型对文档 d 进行排序,并根据两种方法的排序位置计算其分数。文档按分数降序排列。分数定义如下

该方法使用常数 k 来调整低排序文档的重要性。它应用于每种方法检索到的前 N 个文档集中。如果文档在任一方法的此集中缺失,则该项设置为零。

引入倒序秩融合的论文建议将 k 的值设置为 60,并且没有讨论要检索多少个文档 N。显然,随着任一方法的召回率@N 增加,排序质量可能会受到 N 增加的影响。从定性上讲,k 越大,低排序文档对最终顺序越重要。但是,对于现代词法语义混合检索来说,最佳的 k 和 N 值是什么,这一点并不先验地明确。此外,我们希望了解结果对这些参数选择的敏感程度,以及最优值是否在数据集和模型之间泛化。这对于在零样本设置中对该方法充满信心非常重要。

为了探索这些问题,我们执行了网格搜索,以最大化 BEIR 基准测试子集的加权平均 NDCG@10,并针对各种模型。我们在本次实验中使用 Elasticsearch 进行检索,每个文档由单个文本字段和向量表示。BM25 搜索使用匹配查询执行,稠密检索使用带脚本分数查询的精确向量搜索执行。

参考表 2,我们看到对于roberta-base-ance-firstp,k 和 N 的最佳值分别为 20 和 1000。我们强调,对于大多数单个数据集来说,相同的参数组合都是最佳的。我们对distilbert-base-v3minilm-l12-v3进行了相同的网格搜索,并且对每个模型得出了相同的结论。还值得注意的是,最佳和最差参数组合之间的差异仅约为 5%;因此,错误设置这些参数的惩罚相对较小。

我们还希望了解是否可以使用倒序秩融合来提高 Elastic Learned Sparse Encoder 在零样本设置中的性能。BEIR 基准测试的结果如表 3 所示。

与单独使用 Elastic Learned Sparse Encoder 相比,倒序秩融合使平均 NDCG@10 提高了 1.4%,与单独使用 BM25 相比提高了 18%。此外,重要的是,对于所有测试数据集,结果要么优于单独使用 BM25,要么与之相似。改进的排序是在无需模型调整、训练数据集或特定校准的情况下实现的。唯一的缺点是,由于两个查询在 Elasticsearch 中依次执行,因此当前查询延迟有所增加。这可以通过 BM25 检索通常比语义检索快的事实来缓解。

我们的研究结果表明,倒序秩融合可以安全地用作有效的“即插即用”策略。此外,值得在您自己的数据上审查使用 BM25、Elastic Learned Sparse Encoder 及其秩融合获得的结果质量。如果要在 BEIR 套件中的每个单个数据集上选择性能最佳的方法,则与单独使用 Elastic Learned Sparse Encoder 和 BM25 相比,平均 NDCG@10 分别提高了 3% 和 20%。

作为这项工作的一部分,我们还进行了一些简单的查询分类,以区分关键词和自然语言问题搜索。这是为了尝试理解导致特定方法表现最佳的机制。到目前为止,我们还没有对这种情况给出明确的解释,并计划进一步探索。但是,我们确实发现,当两种方法具有相似的总体准确度时,混合搜索的性能很强。

最后,倒序秩融合可以与两种以上的方法一起使用,或者可以用于组合来自不同字段的排名。到目前为止,我们还没有探索这个方向。

加权分数和

Elasticsearch 支持的另一种执行混合检索的方法是使用线性函数组合 BM25 分数和模型分数。这种方法在这篇论文中进行了研究,该论文表明,当经过良好校准时,它比倒序秩融合更有效。我们通过如下定义的得分凸线性组合探索了混合搜索

其中 α 是模型分数权重,介于 0 和 1 之间。

线性组合的理想校准并非易事,因为它需要类似于微调模型时使用的标注。给定一组查询及其关联的相关文档,我们可以使用任何优化方法来找到检索这些文档的最佳组合。在我们的实验中,我们使用了 BEIR 数据集和贝叶斯优化来找到最佳组合,并针对 NDCG@10 进行优化。理论上,分数尺度的比例可以整合到 α 的学习值中。但是,在以下实验中,我们使用最小-最大归一化对每个数据集的 BM25 分数和 Elastic Learned Sparse Encoder 分数进行了归一化,通过计算每个数据集上一些代表性查询的前 1000 个分数的最小值和最大值。希望通过归一化分数,传递的最佳值会得到改善。我们没有找到这方面的证据,但它更加一致,因此归一化很可能提高了校准的鲁棒性。

获取标注成本很高,因此了解需要收集多少数据才能确信击败倒数排名融合 (RRF) 非常有用。图 1 显示了 BM25 和 Elastic Learned Sparse Encoder 分数的线性组合的 NDCG@10 作为 ArguAna 数据集中标注查询数量的函数。作为参考,还显示了 BM25、Elastic Learned Sparse Encoder 和 RRF 的 NDCG@10。这种曲线在各个数据集上都很典型。在我们的实验中,我们发现使用大约 40 个标注查询就可以超越 RRF,尽管精确的阈值在不同数据集之间略有差异。

我们还观察到,最佳权重在不同数据集之间(见图 2)以及不同的检索模型之间差异很大。即使在归一化分数后,情况也是如此。人们可能会预期出现这种情况,因为最佳组合将取决于各个方法在一个给定数据集上的表现。

为了探索零样本参数化的可能性,我们尝试为基准集中所有数据集选择一个单一的权重 α。虽然我们使用了相同的有监督方法来做到这一点,但这次选择权重是为了优化整个数据集套件的平均 NDCG@10,我们认为数据集之间存在足够的变化,因此我们的发现可能代表了零样本性能。

总之,这种方法产生的平均 NDCG@10 比 RRF 要好。但是,我们还发现结果不如 RRF 一致,并且我们强调最佳权重是特定于模型的。因此,即使针对特定模型进行校准,我们也对该方法迁移到新设置的信心不足。在我们看来,线性组合不是一种“即插即用”的方法。相反,我们认为必须仔细评估组合在您自己的数据集上的性能,以确定最佳设置。但是,正如我们将在下面看到的,如果经过良好校准,它会产生非常好的结果。

归一化对于比较不同数据集和模型之间的分数至关重要,因为如果没有归一化,分数可能会发生很大变化。这并不总是容易的,特别是对于 Okapi BM25,在发出查询之前,分数范围是未知的。密集模型的分数更容易归一化,因为它们的向量可以进行归一化。但是,值得注意的是,一些密集模型是在没有归一化的情况下训练的,并且可能在使用点积时表现更好。

Elastic Learned Sparse Encoder 经过训练以复制交叉编码器分数的边际。我们通常看到它产生的分数在 0 到 20 之间,但这并非保证。一般来说,查询历史及其前 N 个文档分数可用于近似分布并使用最小值和最大值估计来归一化任何评分函数。我们注意到非线性归一化可能导致改进的线性组合,例如,如果存在分数异常值,尽管我们没有对此进行测试。

至于倒数排名融合,我们希望了解 BM25 和 Elastic Learned Sparse Encoder 的线性组合的准确性——这次是在最佳可能的情况下。在这种情况下,我们针对每个数据集优化一个权重 α,以使用线性组合获得理想的 NDCG@10。我们使用了 300 个查询进行校准——我们发现这足以估计所有数据集的最佳权重。在生产环境中,这种情况在现实中很难实现,因为它需要准确的最小-最大归一化和一个代表性的标注数据集来调整权重。如果文档和查询发生重大漂移,也需要刷新此权重。尽管如此,对最佳情况性能进行界定仍然很有用,可以了解是否值得付出努力。结果显示在表 4 中。这种方法使平均 NDCG@10 比单独使用 Elastic Learned Sparse Encoder 提高了 6%,比单独使用 BM25 提高了 24%。

结论

我们证明可以结合不同的检索方法来提高它们的性能,特别是词汇检索和语义检索可以相互补充。我们探索的一种方法是倒数排名融合。这是一种简单的方法,通常可以在不需要任何标注或分数分布的先验知识的情况下产生良好的结果。此外,我们发现其性能特征在不同模型和数据集之间非常稳定,因此我们相信我们观察到的结果将推广到其他数据集。

另一种方法是分数的加权和,这种方法设置起来更困难,但在我们的实验中,在正确的设置下产生了非常好的排名。要使用这种方法,应将分数进行归一化,对于 BM25,这需要典型查询的分数分布,此外,应使用一些标注数据来训练方法权重。

在我们这个系列中计划的最终博客中,我们将介绍我们围绕推理和索引性能所做的工作,因为我们将转向 text_expansion 功能的 GA。

本文中描述的任何功能或功能的发布和时间安排完全由 Elastic 自行决定。任何当前不可用的功能或功能可能无法按时或根本无法交付。

Elasticsearch 与业界领先的生成式 AI 工具和提供商具有原生集成。查看我们关于超越 RAG 基础知识的网络研讨会超越 RAG 基础知识,或构建可用于生产的环境的应用程序Elastic 向量数据库

要为您的用例构建最佳搜索解决方案,请开始免费云试用或立即在您的本地机器上试用 Elastic。

准备好构建最先进的搜索体验了吗?

充分先进的搜索并非一人之力所能完成。Elasticsearch 由数据科学家、机器学习运维工程师、软件工程师等等许多同样热爱搜索的人员提供支持,他们与您一样充满热情。让我们联系并共同努力,构建出能为您带来所需结果的奇妙搜索体验。

亲自试一试