# 🧩 Summary ## RRF(Reciprocal Rank Fusion)算法详解 ### **核心问题:如何融合不同来源的排序结果?** text ``` 场景:混合检索 ├─ BM25检索结果: [Doc5, Doc2, Doc9, Doc1, Doc7] └─ 向量检索结果: [Doc2, Doc5, Doc1, Doc12, Doc8] 问题:怎么合并成一个排序? ``` ### **❌ 错误方案:直接加权分数** python ```python # 问题:不同算法的分数量纲不同 bm25_scores = { "Doc5": 15.2, # BM25分数范围:0-20 "Doc2": 12.8, "Doc1": 8.5 } vector_scores = { "Doc2": 0.92, # 余弦相似度:0-1 "Doc5": 0.88, "Doc1": 0.85 } # 直接相加没有意义! final_score = bm25_score + vector_score # 15.2 + 0.88 = ??? ``` ### **✅ RRF方案:只看排名,不看分数** #### **RRF公式** text ``` RRF_score(d) = Σ 1 / (k + rank_i(d)) i∈所有检索系统 参数: - k: 常数(通常取60),防止除零并平滑排名差异 - rank_i(d): 文档d在第i个检索系统中的排名 ``` #### **完整** # 💡 Cues # Notes