返回
创建于
状态
公开
倒数排名融合(Reciprocal Rank Fusion, 简称 RRF) 是混合检索(Hybrid Search)中的“黄金准则”。它的核心魅力在于:不需要复杂的权重调优,就能把完全不同维度的评分(比如全文检索的 BM25 分数和向量检索的余弦相似度)公正地合并在一起。
1. 核心公式
RRF 的计算逻辑非常简单直观:
- :待排序的所有文档。
- :排序列表的集合(比如一个是全文检索给出的排名,一个是向量检索给出的排名)。
- :文档 在列表 中的排名索引(通常从 1 开始)。
- :一个常数(超参数),通常默认为 60。
为什么要加 ? 为了防止排名第一的文档()对结果产生压倒性的影响,平滑掉排名靠前的权重波动。
2. 直观理解:它如何解决你的问题?
假设你用“几个字”去搜:
- 全文检索(BM25):关键词匹配很准,给出了排名:文档 A (1), 文档 B (2), 文档 C (3)。
- 向量检索(Dense):语义比较模糊,给出了排名:文档 C (1), 文档 D (2), 文档 A (3)。
RRF 计算(假设 ):
- 文档 A:
- 文档 C:
- 文档 B:
最后,文档 A 和 C 因为在两套系统中表现都稳健,会排在最前面。即使单项冠军(比如向量检索里的文档 D)在另一项中表现很差,也会被过滤掉。
3. RRF 的三大优势
- 抹平分值差异:全文检索的分数可能是 (无上限),向量检索的分数是 ( 之间)。RRF 只看名次,不看分数值,强制把它们拉到同一个起跑线上。
- 无需专家经验:传统的权重加权需要你手动设置 。这个权重很难调,而 RRF 默认 在大多数场景下都是最优解。
- 奖励“双优生”:如果一个文档在两个列表里都在前 100 名,它的总分会远高于只在某一个列表中排第一、而在另一个列表里查无此人的文档。
4. 落地建议
如果你正准备实现它,请注意以下几点:
- 深度(Limit):通常从每个检索源取出前 50 到 100 个结果进行 RRF 合并即可,没必要对全量数据做 RRF。
- 与 Re-ranker 配合:
- 第一阶段:向量检索 + 全文检索 RRF 合并 选出 Top 30。
- 第二阶段:将 Top 30 送入 BGE-Reranker(重排序模型)进行深度打分。 这是目前性价比最高、准确度最强的链路。
- BGE-M3 的特殊性:
既然你在用 BGE-M3,它产生的
lexical_weights(Sparse Vector)其实已经自带了类似 BM25 的属性。如果你使用的是 Milvus 或 Qdrant 这类数据库,它们原生支持 RRF 算法,你只需要通过一个简单的配置开关就能启用。