手写 RRF,先补齐重复 ID、Top-K=0 和并列排序

发布时间:2026/10/25 9:53:46

手写 RRF,先补齐重复 ID、Top-K=0 和并列排序 RRF的公式很短同一文档在每路结果中的贡献为1/(crank)再把贡献相加。实现却可能在三个地方出问题重复文档重复加分、Top-K等于零访问空堆、同分结果随map遍历顺序变化。Elasticsearch文档把rank_constant默认值列为60并定义rank_window_size。默认值不是所有数据的最优值。尤其不要把返回数量k和公式里的平滑常数c用同一个变量名。概念示意图非控制台截图、跑分或真实事件记录。先用全排序写一个可检查的版本这里定义每路结果是唯一文档排名重复ID先保留首次出现再重新连续编号。另一种协议可以保留原始名次但必须说明不能由循环偶然决定。为避免浮点同分比较受加法次序干扰教学实现使用Fraction精确有理数。from collections import defaultdict from fractions import Fraction def fuse(channels, top_k, rank_constant60): if top_k 0 or rank_constant 1: raise ValueError(invalid top_k/rank_constant) if top_k 0: return [] scores defaultdict(Fraction) for hits in channels: unique list(dict.fromkeys(hits)) for rank, doc_id in enumerate(unique, 1): scores[doc_id] Fraction(1, rank_constant rank) return sorted(scores.items(), keylambda pair: (-pair[1], pair[0]))[:top_k] assert fuse([[A]], 0) [] assert fuse([[A,A,B]], 2) fuse([[A,B]], 2) assert [x[0] for x in fuse([[A,B],[B,A]], 2)] [A,B] assert fuse([], 10) [] assert fuse([[],[A]], 1)[0][0] A try: fuse([[A]], -1) except ValueError: pass else: raise AssertionError(negative top_k accepted) print(PASS zero/negative K, deduplication, ties, empty channels)这个版本的用途是参考答案不是极限吞吐实现。D个候选全排序约O(D log D)Fraction也有额外开销。以后换成浮点、堆和对象池时先让新实现与它在约定容差和排序协议下对齐再谈分配次数。一条重复ID到底算几票若一路返回A、A、B不去重就会让同一路给A投两票。它不等于A被两个独立检索器召回。上面的定义将它变成A、B若后端按chunk返回两个chunk是否归并到同一document也要先定义。同分排序同样是产品契约。例子中两路是A、B与B、A贡献完全对称。按文档ID升序打破平局才能让重复请求、分页和回归测试得到稳定顺序。生产ID未必是字符串比较规则要在各语言中一致。候选窗口之外融合器没有魔法RRF只能给已经召回的候选排序。某文档在各路都被窗口截掉后面调整c也找不回来。官方文档还要求关注分页时固定rank_window_size否则可见候选集合变化会改变排序。本地运行已覆盖零/负Top-K、去重、对称同分、空通道和单路结果。没有接入搜索后端没有测NDCG或网络时延。封面沿用的k60只是示意参数图上的机制图也不代表一次相关性评测内图展示本次实际核对的三个边界。比起“高性能融合引擎”先做到同一输入给同一答案比较好交差。本文的本地检查仅覆盖明确列出的合成示例外部研究与产品文档不作为本人性能实测。复现命令将完整Python块保存为 rrf_demo.py运行 python3 rrf_demo.py本轮使用Python 3.9.6。
延伸阅读

更多相关文章

2026/10/25 9:48:46

t3code:基于CLI+Electron+iOS模拟的前端跨端预览工作流

1. 项目概述:t3code 是什么?它解决的不是“工具问题”,而是开发者工作流断点 t3code 这个名字乍看像某个新出的 CLI 工具缩写,但结合当前全网高频搜索词——t3code、CLI、Electron、web app、iOS——它实际指向一个非常具体且高频…

2026/10/25 9:48:46

Python实现AI五子棋:极大极小值搜索与alpha beta剪枝实战

简介:这是一份面向Python初学者与AI算法爱好者的五子棋AI实战项目源码,围绕极大极小值搜索与Alpha-Beta剪枝两大经典决策树技术展开,帮助读者理解零和博弈中的搜索策略与剪枝优化思路。压缩包共12个文件,约150KB,以py源…

2026/10/25 10:53:51

基于知识图谱与生成式AI的食谱推荐系统:从图谱构建到落地避坑

简介:这套Python毕业设计源码围绕知识图谱与生成式AI的智能食谱推荐系统展开,面向计算机相关专业正在做毕设的学生,也可用于课程设计或期末大作业。项目经导师指导并通过审核,源码已完成本地编译与调试,评审得分98分&a…

2026/10/25 10:53:51

基于深度神经网络与MCTS的Python五子棋博弈引擎实现

简介:基于Python深度神经网络的五子棋博弈引擎设计资料,面向人工智能、通信、自动化、电子信息、物联网等计算机相关专业的在校学生与教师,适用于课程设计、毕业设计、项目初期立项演示,也可作为博弈算法方向的学习进阶素材。项目…

2026/10/25 10:53:51

农业产量预测模型选型:随机森林、SVR与BP网络对比实战

简介:一套面向农业粮食产量预测的机器学习项目资源,以BP神经网络、随机森林与SVR三种典型算法为核心,适合计算机相关专业学生完成毕业设计、课程设计,也适合机器学习回归任务入门者对照学习。压缩包共七个文件,包括两个…

2026/10/25 10:53:51

基于Python与OpenCV的智能答题卡识别:图像预处理与填涂判读实战

简介:一套基于Python与OpenCV的智能答题卡识别系统,面向深度学习、图像识别方向的开发者和学习者,适合课程设计、毕业设计或工程预研,解决答题卡自动检测、选项识别、答案判定与分数统计等常见场景。压缩包共60个文件,…

2026/10/25 10:53:51

LangChain架构本质:RUNNABLE协议与LCEL组合范式

1. 这不是“框架说明书”,而是你第一次真正看懂LangChain的起点如果你刚点开LangChain官网,被满屏的Chain、Agent、Retriever、Tool、Callback、Memory、LLM这些词砸得头晕,翻了几页文档发现全是API签名和类型定义,最后默默关掉页…

2026/10/25 10:48:50

Wikidata搜索轨迹数据集:训练知识图谱智能体的SPARQL调试模拟器

1. 项目概述:这不是一个“搜索框”,而是一套训练知识图谱智能体的“驾驶模拟器”你有没有试过教一个AI助手去查维基数据(Wikidata)?不是简单地丢给它一句“查查爱因斯坦的出生地”,而是让它像人类研究员一样…

2026/10/25 0:02:22

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/25 0:02:23

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/25 0:02:22

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/25 0:02:23

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑