首页/AI/RAG 与向量库速查/RRF 倒数排名融合
本包目录(229 条)
架构与流程30 条解析与切分33 条
Embedding 与检索50 条
向量数据库49 条重排与生成32 条评估与优化35 条

RRF 倒数排名融合

RRF(Reciprocal Rank Fusion)用排名而非原始分数融合多路召回:score(d)=Σ 1/(k+rank_i(d)),常数 k 默认 60 起缓冲作用,避免单路第 1 名过度主导。

RAG 与向量库速查AI更新于 2026-10-12
公式score(d) = Σ_i w_i / (k + rank_i(d))
k缓冲常数,论文取 60
优点免分数归一化,分数不可比的系统可合并

RRF 融合实现

RRF 融合实现
def rrf(rankings, k=60, weights=None):
    scores = {}
    for i, ranked in enumerate(rankings):
        w = 1.0 if weights is None else weights[i]
        for rank, doc_id in enumerate(ranked, start=1):
            scores[doc_id] = scores.get(doc_id, 0.0) + w / (k + rank)
    return sorted(scores, key=scores.get, reverse=True)
RRF 只看排名:某一路候选少或分数标定差时,融合后仍会退化为单路主导,记得对比单路基线。

易错点

  • k 设得过大让头部与尾部得分差被抹平,设得过小又放大小样本噪声
  • 直接拿余弦分与 BM25 分相加前没归一化,量纲不同导致单路始终压制另一路

数据来源与参考

  • Cormack et al., Reciprocal Rank Fusion Outperforms Condorcet and Individual Rank Learning Methods (SIGIR 2009)
  • Elasticsearch 官方文档(RRF retriever)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌