想象一下,你想找一部“最好看的科幻电影”。你没法自己看完所有电影,于是你问了三位你非常信任的朋友(我们叫他们小A、小B、小C),让他们每人给你一个前5名的推荐名单。
现在你拿到了三个不同的名单:
-
小A的名单 (偏爱经典)
-
《银翼杀手》
-
《2001太空漫游》
-
《星际穿越》
-
《黑客帝国》
-
《阿凡达》
-
-
小B的名单 (偏爱新片)
-
《流浪地球2》
-
《星际穿越》
-
《沙丘》
-
《降临》
-
《银翼杀手2049》
-
-
小C的名单 (偏爱视觉)
-
《阿凡达》
-
《黑客帝国》
-
《星际穿越》
-
《银翼杀手》
-
《沙丘》
-
现在问题来了:如何综合这三个名单,得出一个最终的、最靠谱的推荐榜单? 这就是 RRF 算法要解决的问题。
RRF算法的核心思想
RRF 的全称是 Reciprocal Rank Fusion,中文叫 “倒数排名融合”。
它的核心思想非常简单,可以总结为两句话:
-
排名越靠前,价值越大。 (被任何一个朋友排在第1名,远比被排在第10名要有分量得多)。
-
综合所有人的意见。 (一部电影在多个名单里都出现,即使排名不都是第一,也说明它很不错)。
RRF具体是怎么做的?
RRF 用一个非常巧妙的数学方法来实现这个思想——“排名的倒数”。
我们给每部电影在每个名单里的排名算一个分数:分数 = 1 / 排名。
-
排名第 1 -> 分数 = 1/1 = 1 分
-
排名第 2 -> 分数 = 1/2 = 0.5 分
-
排名第 3 -> 分数 = 1/3 ≈ 0.33 分
-
...
-
排名第 10 -> 分数 = 1/10 = 0.1 分
-
如果没出现在名单里 -> 分数 = 0 分
你看,这个分数完美体现了“排名越靠前,价值越大”的思想。从第1名掉到第2名,分数直接砍半(少了0.5分),而从第9名掉到第10名,分数只少了一点点(约0.01分)。
接下来,我们把每部电影在 所有名单里 的分数加起来,得到一个总分。
我们来算一下几部热门电影的总分:
-
《星际穿越》
-
在小A名单排第3名 -> 0.33分
-
在小B名单排第2名 -> 0.5分
-
在小C名单排第3名 -> 0.33分
-
总分 = 0.33 + 0.5 + 0.33 = 1.16 分
-
-
《银翼杀手》
-
在小A名单排第1名 -> 1分
-
在小B名单没出现 -> 0分
-
在小C名单排第4名 -> 0.25分
-
总分 = 1 + 0 + 0.25 = 1.25 分
-
-
《阿凡达》
-
在小A名单排第5名 -> 0.2分
-
在小B名单没出现 -> 0分
-
在小C名单排第1名 -> 1分
-
总分 = 0.2 + 0 + 1 = 1.2 分
-
-
《流浪地球2》
-
在小A名单没出现 -> 0分
-
在小B名单排第1名 -> 1分
-
在小C名单没出现 -> 0分
-
总分 = 1 分
-
最后,我们根据这个总分从高到低排序,就得到了最终的融合榜单:
-
《银翼杀手》 (1.25分)
-
《阿凡达》 (1.2分)
-
《星际穿越》 (1.16分)
-
《流浪地球2》 (1分)
-
...
总结一下
RRF加权算法,就是一种用来合并多个排名列表的方法。 它通过计算 “排名的倒数” 来给每个项目打分,然后把各个列表的分数加起来,最终根据总分得出一个更可靠、更全面的新排名。
它在现代搜索引擎(特别是混合搜索)中非常流行,因为搜索引擎也需要综合“关键词匹配结果”、“语义理解结果”等多个来源的排名,RRF提供了一种简单、高效且无需复杂训练的融合方法。