RRF倒数排名融合
编辑2026-05-08·3 分钟阅读·RAG
未分类
RRF(Reciprocal Rank Fusion,倒数排名融合) 是一种将多个不同搜索系统返回的结果列表合并成一个统一、高质量排名列表的算法。
它的核心思想非常巧妙:不看每个搜索系统给出的具体“分数”,只看每个文档在各自结果列表中的“排名”。一个文档在越多列表中排名靠前,其最终的融合排名就越高。
为什么要用RRF?
在复杂的搜索场景中,我们常常会结合多种搜索方式,比如:
- 全文检索(BM25):擅长关键词匹配,但分数可能很高(如100分)。
- 向量检索(KNN):擅长语义理解,但分数可能很小(如0.9分)。
这两种方式的分数范围和含义完全不同,直接相加或加权平均会非常不合理。RRF的巧妙之处就在于抛弃了原始的、不可比的分数,转而使用统一的“排名”作为衡量标准。
RRF是如何工作的?
RRF通过一个简单的公式为每个文档计算最终得分:
score(d) = Σ 1 / ( k + rank(d) )
d: 某个文档。Σ: 对所有包含文档d的搜索结果列表进行求和。rank(d): 文档d在某个列表中的排名(从1开始)。k: 一个平滑常数,默认值通常为 60。它的作用是防止排名靠后的文档获得过高的权重。
简单来说,这个公式意味着:文档在某次检索中排名越靠前(rank越小),它对最终得分的贡献就越大(1/(k+rank)越大)。
举个例子
假设搜索“入职流程”:
| 文档 | 在“全文检索”中的排名 | 在“向量检索”中的排名 | 计算过程 (k=60) | 最终RRF得分 |
|---|---|---|---|---|
| 文档1 | 第1名 | 第2名 | 1/(60+1) + 1/(60+2) | 0.03251 |
| 文档2 | 第2名 | 第1名 | 1/(60+2) + 1/(60+1) | 0.03251 |
| 文档3 | 第3名 | 未上榜 | 1/(60+3) + 0 | 0.01587 |
| 文档4 | 未上榜 | 第3名 | 0 + 1/(60+3) | 0.01587 |
可以看到,在两个系统中都排名靠前的文档1和文档2,获得了最高的融合分数。而只在单一系统中排名第3的文档,得分明显更低。
RRF的核心优势
- 无需归一化:直接解决了不同检索系统分数不可比的问题。
- 简单有效:算法本身非常简洁,效果却很好,且无需复杂调参。
- 鲁棒性强:不依赖具体的分数,因此对个别系统的分数波动不敏感。
RRF的主要应用场景
- 混合搜索(Hybrid Search):这是RRF最经典的应用,用于融合全文检索和向量检索的结果,兼顾精确匹配和语义理解。这在RAG(检索增强生成) 系统中非常重要。
- 多路召回融合:在推荐系统或信息检索中,将来自不同索引、不同特征或不同算法的多个结果集进行融合。
- 多模态搜索:融合来自文本、图像、音频等多种模态的搜索结果。