五厂面经真题集腾讯面经高频腾讯真题信息检索RAG速答 · 约 5 分钟更新 2026-09-29

多路检索结果怎么高效实现 Reciprocal Rank Fusion?

一句话结论

用 RRF 按各路排名倒数累加文档得分,再用哈希表聚合、排序取 Top-K;k 常取 60,无需归一化相似度分数。

先这样答

多路检索结果可以用 Reciprocal Rank Fusion,也就是 RRF,高效合并。它按文档在各路结果中的排名计算分数,再把各路分数相加。文档得分等于各路排名倒数之和,具体是把每一路的 1 除以排名加常数 k,再对同一个文档累加。

实现时,先让每路检索返回一个 Top-N 排名列表。遍历每路列表,用文档 ID 作为哈希表的键。根据当前文档的排名计算 1 除以排名加 k 的值,并累加到这个文档的总分里。所有结果处理完后,按总分排序,取前 K 个文档作为融合结果。整个过程的复杂度是 O(总文档数)。

k 常取 60。它可以压制头部排名对结果的支配,让不同检索路由的排名更容易合并。RRF 最大的优点是只依赖排名,不要求不同检索路由提供可直接比较的相似度分数。因此不需要做相似度分数归一化,也不需要针对不同量纲反复调参。

面试官会怎么追问

  • 「为什么 RRF 不直接把多路相似度分数加起来?」
    不同检索路由的相似度分数可能使用不同量纲。直接相加会受到分数范围影响。RRF只使用排名,因此不需要先归一化分数,也不需要调参数对齐不同量纲。

  • 「RRF 的具体实现步骤是什么?」
    先获取每路的 Top-N 排名列表。再用文档 ID 作为哈希表键,遍历每个列表并累加 1 除以排名加 k 的值。最后按累加后的文档得分排序,取 Top-K。

  • 「k 为什么常取 60?它解决什么问题?」
    k 常取 60,用来压制头部排名的支配性。这样排名靠前的文档仍然有更高贡献,但单一路由的头部结果不会过度主导融合结果。

回答的坑

  • 只说“把多个结果拼起来”而不按文档 ID 聚合,就没有实现 RRF 的核心计算。
  • 把不同路由的相似度分数直接相加,会忽略分数归一化和量纲不一致的问题。
—— 本题完 ——