倒数排名融合:为什么合并搜索结果比看起来更难

倒数排名融合:为什么合并搜索结果比看起来更难

💡 原文英文,约2000词,阅读约需8分钟。
📝

内容提要

本文介绍倒排融合(RRF)算法,用于合并关键词搜索和向量搜索的排名结果。RRF仅基于文档在各列表中的位置,而非原始分数,避免不同检索器分数尺度不匹配的问题。它无需训练数据,能有效提升混合检索质量,常用于RAG系统。实际应用中,检索速度比融合计算更关键,Redis Search支持在内存中快速执行此类混合查询。

🔎

延伸解读

为什么直接加分数会出问题

直接合并不同检索器的原始分数看似简单,但BM25分数没有固定范围,而余弦相似度在-1到1之间,两者量级差异大,直接相加往往让BM25主导结果。归一化虽能解决尺度问题,但异常值会压缩其他分数,且不同查询的最佳权重不同,难以在生产中逐查询调参。此外,分数分布会随索引增长或模型更换而漂移,导致校准失效,排名质量悄然下降。

RRF的核心优势与局限

RRF只依赖排名位置,避免了分数尺度不匹配和漂移问题,且无需训练数据,适合作为无监督的默认融合方法。但它无法区分同为第一但分数差异大的结果,且偏好共识,可能让单一检索器高分的文档输给两者都中等的文档。在有标注数据时,加权分数融合可能更优,但RRF的零调参特性使其成为实用起点。

检索速度比融合更关键

RRF的计算只是对少量候选做加法,开销极低,真正的瓶颈在于并行检索的耗时。关键词搜索走倒排索引,向量搜索走HNSW图,两者都随索引规模增长而变慢。因此应并行运行检索器,使总耗时接近较慢者而非两者之和。在交互式应用和智能体场景中,检索可能多次执行,延迟预算更紧,快速的内存检索层往往决定混合搜索的成败。

Q&A

什么是倒数排名融合(RRF)?

倒数排名融合(RRF)是一种将多个排序列表合并为单一排序的算法,它仅使用每个文档在每个列表中的位置,而忽略原始分数。公式为:对于每个列表中的文档d,计算1/(k+rank),然后将所有列表的贡献相加。k通常设为60。

为什么不能直接将BM25分数和余弦相似度相加来合并搜索结果?

因为BM25分数和余弦相似度具有不同的尺度和分布,直接相加会导致尺度不匹配,例如BM25的绝对值通常比余弦相似度大一个数量级,从而主导结果。归一化虽然可以解决尺度问题,但可能因异常值而压缩其他分数,且最佳权重因查询而异,难以在生产中校准。

RRF相比基于分数的融合方法有什么优势?

RRF的优势在于它仅使用排名位置,避免了不同检索器分数尺度不匹配的问题,无需归一化,对分数分布漂移不敏感,且无需训练数据,是一种无监督的融合方法。

RRF在混合检索中如何工作?

在混合检索中,关键词搜索和向量搜索并行运行,各自返回排名列表,然后RRF根据文档在各自列表中的位置合并结果,使在两个列表中都排名靠前的文档上升到顶部。

RRF有哪些局限性?

RRF无法区分得分差异很大的第一名(如0.99和0.51),且偏好共识,可能导致一个检索器非常喜欢但另一个忽略的文档输给两个检索器都喜欢的文档。在有标注数据的情况下,加权分数组合可能优于RRF。

在混合检索系统中,为什么检索速度比融合计算更关键?

因为融合计算(RRF)只涉及少量候选文档的加法运算,成本很低,而检索过程需要遍历倒排索引或HNSW图,成本随索引大小增长。因此,检索速度决定了系统能否满足延迟预算,尤其是在代理工作流中多次检索时。

RRF除了混合搜索外还有哪些应用场景?

RRF可以用于任何需要合并多个排序列表的场景,例如推荐系统融合基于新鲜度、流行度和个性化的列表,以及搜索管道中融合不同信号。

🏷️

标签

➡️

继续阅读