RRF 中常数如何确定?

考查重点:排名平滑与融合常数。常数平滑名次差,小值更重前排、大值更平均,可从60作基线,用标注集扫参而非当通用最优

本题目录

参考答案

核心回答

RRF 的常数控制名次差异对融合得分的影响,可以从常用的 60 建立基线,再用本业务的标注问题集验证。60 来自原论文的预实验选择,并在后续验证中固定,不是对所有知识库推导出的最优值。

为避免与 TopK 混淆,记它为 c:文档在某一路排第 r,其贡献为 1 / (c + r),多路贡献相加,缺席通道贡献为 0,名次从 1 开始。c 较小更强调各路前几名;c 较大让同一路前后名次的贡献更接近,有限候选列表中,多路共同出现的文档会相对更占优势。具体选择还要与各路候选深度和权重一起看。

常数为什么能改变顺序

假设文档 A 只在一路排第 1,文档 B 在两路都排第 4,通道权重相同。

  • c = 1:A 得分 1/2 = 0.5,B 得分 2/5 = 0.4,A 更靠前。
  • c = 60:A 得分约 0.01639,B 得分 0.03125,B 更靠前。

这个算例说明平滑程度会改变“单路极靠前”与“多路较靠前”的相对贡献,不代表多路共同出现一定更相关,也不能据此直接选定某个 c。

怎样调,而不是只报一个数

先固定文档与索引版本、每路召回策略、候选深度和去重规则,统一文档或块标识。建立包含精确编号、同义表达、不同版本、长问题与难负例的标注集,保留调参集与独立验证集。

围绕当前基线选若干不同量级的合法常数,比较融合后前列的 MRR、nDCG 或证据精度,以及所需证据覆盖。需要完整 RAG 结果时,再看最终上下文和答案质量、延迟与成本。按查询类型分析,避免总体分数掩盖编号查询变差。

确认常数影响后,再比较通道权重和候选深度,或者采用有控制的组合实验。若 BM25 候选少而向量候选很多,或多路实际高度重复,仅调 c 不一定解决偏向问题。固定并公开比较口径,才能解释提升来自哪里。

常数、候选深度与阈值的区别

c 平滑名次贡献,不决定每一路取多少候选;各路候选数决定哪些文档有资格参与融合;最终 TopN 决定返回或进入下一阶段的数量。部分产品分别使用 rank_constant、rank_window_size 等参数名,不能把搜索请求中所有 k 都理解为同一含义。

RRF 得分也不是跨查询通用的可信概率。通道数量、权重和候选出现情况变化后,分数范围随之变化;不能只设一个固定融合分阈值,就保证知识库有答案。

面试中怎样说明实际选值

可以说明以 60 为基线,比较过哪些查询类型、候选深度与其他常数,再给出数据集、指标和最终选择,让参数与实际任务关联。

工程实现还要检查同一路重复候选只计一次、缺席贡献为零、权限与版本范围一致。关于融合流程,可继续看BM25 与向量检索结果如何融合?。

参考资料

相关面经

3 篇

美团

AI 全栈开发工程师
校招秋招二面
查看原面经 →
两路召回结果怎么融合?RRF的k值怎么设

阿里巴巴

AI 应用研发工程师
校招秋招一面
查看原面经 →
BM25和向量检索怎么融合?RRF的k值怎么设

百度

Agent 应用开发工程师
秋招一面
查看原面经 →
追问
RRF 中的常数是怎么确定的?

相关题目

4 题