🎯 Reciprocal Rank Fusion (RRF) 算法

📚 什么是 RRF?

想象一下,你问两个朋友:"哪家餐厅最好吃?" 他们分别给你推荐了不同的餐厅,并且都排了名次。 RRF 算法就是用来把这两个排名合并成一个最终排名的方法!

🍕 生活例子:选餐厅

朋友A的推荐(按好吃程度排名):
1. 披萨店 🍕
2. 汉堡店 🍔
3. 寿司店 🍣

朋友B的推荐(按好吃程度排名):
1. 寿司店 🍣
2. 披萨店 🍕
3. 汉堡店 🍔

RRF 的作用:把两个朋友的推荐综合起来,找出大家都认为好吃的餐厅!

🤔 为什么需要 RRF?

在信息检索中,我们经常有多个"检索器"(就像多个朋友),它们用不同的方法找答案:

BM25检索器

擅长找关键词匹配

向量检索器

擅长理解语义相似

每个检索器都有自己的排名,RRF 帮我们把它们融合成一个更准确的最终排名!

📐 RRF 公式

RRF分数 = Σ (权重 / (60 + 排名))

这个公式的意思是:

💡 举个例子

假设"披萨店"在两个检索器中的排名分别是:

  • 检索器1:排名第 1(权重 0.5)
  • 检索器2:排名第 2(权重 0.5)

那么披萨店的 RRF 分数 = 0.5/(60+1) + 0.5/(60+2) = 0.0082 + 0.0081 = 0.0163

🔢 计算步骤

1 收集排名

从每个检索器获取文档的排名

2 计算每个文档的RRF分数

对每个文档,把所有检索器的贡献加起来

3 按分数排序

分数越高,排名越靠前

4 返回前K个

选择分数最高的几个文档作为最终结果

🎨 示例

假设我们搜索"机器人与人工智能",有两个检索器返回了不同的结果:

检索器1(BM25)的排名:

1 机器人学结合机械工程与人工智能
2 深度学习通过神经网络取得突破
3 美食点评:这家餐厅的川菜很正宗

检索器2(向量相似度)的排名:

1 深度学习通过神经网络取得突破
2 机器人学结合机械工程与人工智能
3 旅游攻略:云南大理的风景非常美丽

RRF 融合后的最终排名(权重都是0.5):

文档 检索器1排名 检索器2排名 RRF分数 最终排名
机器人学结合机械工程与人工智能 1 2 0.0164 🥇 1
深度学习通过神经网络取得突破 2 1 0.0164 🥈 2
美食点评:这家餐厅的川菜很正宗 3 - 0.0079 🥉 3
旅游攻略:云南大理的风景非常美丽 - 3 0.0079 4

说明:"机器人学"文档在两个检索器中排名都很靠前,所以最终排名第一!

🎮 演示

试试调整参数,看看结果如何变化!

0.5 0.5

✨ 总结

🎯 RRF 的核心思想

  • 多个意见比一个意见更可靠 - 就像问多个朋友而不是只问一个
  • 排名越靠前越重要 - 第一名的意见比第十名更重要
  • 可以调整权重 - 如果你更信任某个朋友,可以给他更高的权重
  • 自动去重和排序 - 自动处理重复的推荐,并给出最终排名

🚀 实际应用

RRF 算法在搜索引擎、推荐系统、问答系统等地方都有广泛应用。 它帮助我们结合不同算法的优势,得到更准确、更全面的搜索结果!