资讯

倒数排序融合 RRF 是什么?把多路搜索结果合成一份排名

2026-11-052 分钟阅读百科
TL;DR倒数排序融合(RRF)是 2009 年由滑铁卢大学和谷歌研究者提出的结果融合算法,根据每个文档在各路检索结果中的排名倒数求和来生成统一排序,不需要调参、也不要求各路分数可比,常用于混合检索和 RAG 中融合关键词检索与向量检索。

倒数排序融合(Reciprocal Rank Fusion,RRF)是一种把多个排序结果合并成一个统一排序的算法。它由加拿大滑铁卢大学的 Gordon Cormack 等人与谷歌的研究者在 2009 年提出。论文的作者表示,这种方法产生的结果比任何单一的检索系统都好,也比当时的一些标准融合方法更好。如今,它在混合检索和检索增强生成(RAG)中被广泛使用。

它要解决的问题

在搜索时,常常会同时使用多种检索方法。比如关键词检索(如 BM25)擅长精确匹配名称、术语和编号;向量检索擅长理解语义,能找到意思相近但用词不同的内容。两者结合起来效果更好,但问题是:它们给出的相关性分数完全不在一个尺度上,关键词检索的分数可能是 15.3,向量检索的相似度可能是 0.82,无法直接相加或比较。如果要把分数归一化再加权,又需要仔细地调整权重,而且换一个数据集可能就不适用了。

RRF 的做法

RRF 的巧妙之处在于:完全不看各路检索给出的分数,只看每个文档在各路结果中排第几名。对于每个文档,计算它在每一路结果中排名的“倒数”,然后把这些值加起来,作为它的最终得分。具体的公式是:每一路的得分等于 1 除以(k 加上该文档在这一路中的排名),其中 k 是一个常数,通常取 60;如果某个文档在某一路中没有出现,这一路就不计分。最后按照总分从高到低排序。

举个例子:某个文档在关键词检索中排第 1 名,在向量检索中排第 3 名,它的得分就是 1/(60+1) 加上 1/(60+3)。另一个文档只在向量检索中排第 1 名,在关键词检索中没有出现,它的得分就只有 1/(60+1)。这样,在多路检索中都排名靠前的文档会脱颖而出。常数 k 的作用是平滑:它让排名第 1 和第 2 的差距不至于过大,避免某一路的头名结果权重过高。

优点

RRF 简单、不需要训练,也几乎不需要调参;不要求各路检索的分数具有可比性,可以融合任意多种检索方法;结果稳定,在各种数据集上表现都不错。它的局限在于丢弃了分数本身的信息:一个文档以压倒性的高分排第一,和以微弱优势排第一,在 RRF 中是一样的。如今,Elasticsearch、OpenSearch 等搜索引擎以及很多向量数据库都内置了 RRF,它是实现混合检索最常用的融合方法之一,常与之后的重排序模型配合使用。