首页/AI/AI 应用速查/混合检索与 RRF 融合
本包目录(159 条)

混合检索与 RRF 融合

向量检索抓语义、BM25 抓关键词(专有名词、编号、错误码),两路各取 top 后用 RRF(倒数排名融合)合并——只看排名不看分数,天然规避两路分数量纲不同的问题。

AI 应用速查AI更新于 2026-10-12
为什么混合语义召回 + 字面精确匹配互补,专有名词场景明显更稳
RRFscore = Σ 1/(k + rank),k 常取 60
输入各路子结果列表(有序)
输出融合后的统一排序,可再送重排

RRF 融合实现(Python)

RRF 融合实现(Python)
def rrf(rank_lists, k=60):
    score = {}
    for lst in rank_lists:            # 每个列表:按相关性降序的 id 列表
        for rank, doc_id in enumerate(lst, start=1):
            score[doc_id] = score.get(doc_id, 0.0) + 1.0 / (k + rank)
    return sorted(score, key=score.get, reverse=True)

fused = rrf([dense_top50, bm25_top50])[:20]
RRF 不需要分数归一化,工程上比加权求和省事;若两路都有可靠分数,也可评测对比加权方案。

易错点

  • 直接相加两路分数:量纲不同,权重全靠拍脑袋
  • 只取各 top5 融合:候选池太浅,融合收益有限

数据来源与参考

  • Cormack et al., Reciprocal Rank Fusion 论文;Elasticsearch RRF 文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌