news 2026/7/6 10:00:56

RRF--Reciprocal Rank Fusion融合排序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RRF--Reciprocal Rank Fusion融合排序

文章目录

      • Reciprocal Rank Fusion 简介
      • 核心原理
      • 算法特点
      • 应用场景
      • 示例代码
      • 注意事项

Reciprocal Rank Fusion 简介

Reciprocal Rank Fusion (RRF) 是一种用于融合多个排序列表的算法,常用于信息检索、推荐系统或搜索引擎中。它通过结合不同排序结果的排名信息,生成一个更优的最终排序。RRF 的核心思想是利用排名的倒数加权求和,使得高排名项在融合结果中更具优势。

核心原理

RRF 的公式如下:

RRFscore ( d ) = ∑ i = 1 k 1 r i ( d ) + c \text{RRFscore}(d) = \sum_{i=1}^{k} \frac{1}{r_i(d) + c}RRFscore(d)=i=1kri(d)+c1

其中:

  • d dd表示待排序的文档或项。
  • k kk表示参与融合的排序列表数量。
  • r i ( d ) r_i(d)ri(d)表示文档d dd在第i ii个排序列表中的排名(从 1 开始)。
  • c cc是一个常数(通常设为 60),用于平滑低排名项的影响。

算法特点

  1. 无需归一化:RRF 直接利用排名信息,无需对原始分数进行归一化处理。
  2. 高排名优先:排名越靠前的项对最终分数的贡献越大,倒数加权强化了头部效应。
  3. 鲁棒性:对部分列表的噪声或偏差具有一定容错能力。

应用场景

  • 多模型融合:结合不同检索模型(如 BM25、深度学习模型)的结果。
  • 跨领域排序:合并来自文本、图像等多模态数据的排序列表。
  • 推荐系统:聚合用户历史行为、协同过滤等多种推荐策略的输出。

示例代码

以下是一个简单的 Python 实现:

defreciprocal_rank_fusion(rank_lists,c=60):scores={}forr,rank_listinenumerate(rank_lists):forrank,docinenumerate(rank_list,1):scores[doc]=scores.get(doc,0)+1/(rank+c)# 按分数降序排序sorted_docs=sorted(scores.keys(),key=lambdax:-scores[x])returnsorted_docs# 示例输入:两个排序列表list1=["docA","docB","docC"]list2=["docB","docC","docA"]result=reciprocal_rank_fusion([list1,list2])print(result)# 输出融合后的排序

注意事项

  • 常数 (c) 的选择会影响低排名项的权重,需根据实际场景调整。

  • 若某些列表未包含全部项,缺失项的排名可按固定值(如列表长度 +1)处理。

  • RRF 更关注排名相对位置,而非绝对分数,适合异构排序列表的融合。

  • 示例

defrrf_rescore(lists,k=60):rrf_scores={}forrank_listinlists:forrank,iteminenumerate(rank_list,start=1):rrf_scores[item]=rrf_scores.get(item,0)+1/(k+rank)sorted_items=sorted(rrf_scores.items(),key=lambdax:x[1],reverse=True)return[{"score":score,"document":item,"index":i}fori,(item,score)inenumerate(sorted_items)]if__name__=="__main__":lists=[["a","b","c","d"],["b","c","e"],["c","f"],["a","c","g"]]result=rrf_rescore(lists)print(result)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 17:40:13

如何用Dify批量解析加密PDF?99%的人都不知道的3个关键点

第一章:加密 PDF 的 Dify 批量解析在处理企业级文档自动化时,常需对大量加密 PDF 文件进行内容提取与分析。Dify 作为一款支持 AI 工作流编排的平台,结合自定义节点可实现加密 PDF 的批量解析任务。该流程依赖于预处理模块解密文件&#xff0…

作者头像 李华
网站建设 2026/7/5 22:44:52

【课程设计/毕业设计】基于JavaEE的电子印章管理系统的设计与实现印章申请、印章下发【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/6 6:22:18

雷速体育:赛事数据一手掌握

雷速体育平台介绍 雷速体育是一个专注于体育赛事数据、比分直播和资讯的平台,涵盖足球、篮球、网球等主流赛事。提供实时比分、赛程统计、历史数据查询等功能,适合体育爱好者追踪比赛动态。 核心功能推荐 实时比分与赛程 支持全球多个联赛和杯赛的实时…

作者头像 李华
网站建设 2026/7/6 3:23:18

小折叠屏手机兴起,铰链与屏幕成考量重点及三星实例

于智能手机形态寻觅突破的当下,折叠屏设计无疑是近些年来极为引人注目的方向当中的一个,特别是那横向翻折的“小折叠”手机,依靠着其精巧的设计以及便携性,吸引了大批追求个性与时尚的用户。这类产品在确保基础手机功能的情形下&a…

作者头像 李华
网站建设 2026/7/5 10:56:38

Nginx 平滑升级

Nginx 平滑升级(Ubuntu 24.04 环境) 一、平滑升级核心原理 Nginx 平滑升级通过向主进程发送特定信号实现,核心优势是不中断现有请求处理: 新请求逐步由新版本 Worker 进程接管;旧 Worker 进程处理完现有连接后优雅退出…

作者头像 李华
网站建设 2026/7/4 21:03:57

C++ 中另一种用户自定义的可用的数据类型

结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性: Title :标题Author :作者Subject :类目Book ID :书的 ID 定义结构 在 C 中,struct 语…

作者头像 李华