| 公式 | 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 只看排名:某一路候选少或分数标定差时,融合后仍会退化为单路主导,记得对比单路基线。