RRF
一种多路检索结果融合算法,将不同检索系统返回的结果按排名倒数加权求和,无需分数归一化,实现简单、鲁棒性强,常用于混合检索的结果融合。
核心事实
时间轴 (近 90 天)
Beau Carnes 在 freeCodeCamp 课程中演示了在 PostgreSQL 内结合 BM25 关键词检索与向量检索,并用倒数排名融合(RRF)合并两路结果的方法。
课程中的混合查询执行计划显示:关键词取 20 行、向量取 20 行,聚合后 40 条记录去重为 32 篇,即有 8 篇同时被两种方法找到。
在E4012查询中,BM25将正确页面排第1(得分1/61),向量搜索排第14(1/74),RRF融合后正确页面得分约0.030,而E4021页面得分约0.016,正确页面得分几乎翻倍。
混合检索时应从每侧取约50个候选而非5个,否则若正确文档在一个列表中排第14,融合永远看不到它。
在自建测试集(120条真实查询,其中38条包含标识符)上,纯向量检索命中21/38条标识符查询,纯BM25(保留标识符分词器)命中36/38条,混合+RRF命中全部38条。
RRF 只依赖排名而非原始分数,因此不受不同通道分数尺度不一致的影响,且不需要为每个通道调参。
Elastic的RRF融合默认平滑常数k为60。
RRF只使用每个列表中的排名(rank)而非原始分数,因此对BM25和向量相似度的分数尺度差异免疫。
RRF中常数k=60的作用是平滑,压低第1名与第2名之间的差距,让在多路中都出现比单路第一更重要。
Elasticsearch在其RRF文档中使用k=60作为rank_constant的默认值。
还有 26 条时间轴事件
全部知识事实 (20)
混合检索(Hybrid Search)将向量检索与BM25关键词检索的结果通过RRF(倒数排名融合)等算法合并,兼顾语义理解与精确匹配
90%已验证混合检索通常通过RRF(倒数排名融合,Reciprocal Rank Fusion)算法将两路检索结果加权合并
80%已验证混合检索结合BM25稀疏检索与向量稠密检索,通过RRF或线性加权合并排名结果
70%已验证RRF 是一种无需调参的排名合并算法,仅利用排名位置按 1/(k+rank) 累加得分,常数 k 通常取 60。
65%已验证RRF 的核心公式为 RRF_score(d) = Σ 1 / (k + rank_i(d)),其中 k 是平滑常数常取 60
65%已验证PostgreSQL可通过pgvector支持向量检索
65%已验证RRF(倒数排名融合)将两路检索结果按排名倒数加权求和,无需对分数做归一化,实现简单且鲁棒性强
65%已验证RRF不需要对不同检索器的原始分数进行归一化,只依赖排名信息,但当多个检索器在同类查询上系统性犯错时RRF只会放大错误
65%已验证混合检索通过BM25关键词得分与向量相似度得分加权融合(通常采用RRF倒数排名融合算法),已成为RAG系统的主流范式
65%已验证RRF(倒数排名融合)仅利用各路召回的排名位置信息(公式RRF(d)=Σ1/(k+rank_i(d)),k通常取60),对分数分布不敏感,绕开了跨模态分数对齐难题
65%已验证Reciprocal Rank Fusion(RRF)算法由Cormack等人于2009年提出,其核心公式为Score = Σ 1/(k + rank_i),其中k通常取60作为平滑常数
65%待验证RRF对各路检索的原始分数分布不敏感,相比简单的线性加权在混合检索场景中更加鲁棒
60%待验证课程中的混合查询执行计划显示:关键词取 20 行、向量取 20 行,聚合后 40 条记录去重为 32 篇,即有 8 篇同时被两种方法找到。
50%待验证混合检索时应从每侧取约50个候选而非5个,否则若正确文档在一个列表中排第14,融合永远看不到它。
50%待验证在自建测试集(120条真实查询,其中38条包含标识符)上,纯向量检索命中21/38条标识符查询,纯BM25(保留标识符分词器)命中36/38条,混合+RRF命中全部38条。
50%待验证在E4012查询中,BM25将正确页面排第1(得分1/61),向量搜索排第14(1/74),RRF融合后正确页面得分约0.030,而E4021页面得分约0.016,正确页面得分几乎翻倍。
50%待验证RRF 只依赖排名而非原始分数,因此不受不同通道分数尺度不一致的影响,且不需要为每个通道调参。
50%待验证Elastic的RRF融合默认平滑常数k为60。
50%待验证RRF只使用每个列表中的排名(rank)而非原始分数,因此对BM25和向量相似度的分数尺度差异免疫。
50%待验证Elasticsearch在其RRF文档中使用k=60作为rank_constant的默认值。
50%