跳到主要内容
约 8 分钟4 张卡

混合检索与重排序

混合检索同时用关键词检索和向量检索寻找候选,再把多路结果合并排序。重排序(Rerank)则让模型结合当前问题,为这些候选重新打分。两者组成先广泛召回、再精细排序的处理流程。

本文先说明 BM25 与向量检索各擅长什么,再介绍 RRF 排名融合和重排模型。最后讨论候选数量、上下文截断,以及重排服务异常时的处理。

1. 面试核心​

先记住这几条,再读正文
  • 多路召回。 BM25 根据词项统计匹配错误码、型号等文本,向量检索利用语义表示匹配同义改写,两者能补充不同的候选。卡 · 关键词检索与向量检索
  • 排名融合。 RRF 将文档在各路的排名按 Σ 1 / (k + rank) 累加,减少原始分数尺度不同带来的影响。卡 · 融合
  • 重排序。 交叉编码器把查询与文档一起输入模型,让两者的 Token 相互影响,再为每个候选计算相关性分数。卡 · 重排序
  • 候选范围。 重排只处理已经召回的候选,检索遗漏的证据需要通过补充检索找回。卡 · 候选预算与证据覆盖

2. 关键词检索与向量检索​

同一个问题换一种说法,适合它的检索方式也会变化。关键词检索依靠查询与文档中的词项重合,向量检索则比较模型学到的语义表示。词项是文本经过分词等处理后,用于匹配的单位。

BM25 是一种基于词项统计的排序函数,它综合以下三项因素:

  • 词频:查询词在文档中出现越多,相关得分越高。但增益会逐渐饱和,避免重复堆词持续推高分数。
  • 逆文档频率(IDF):包含某个词的文档越少,这个词的区分能力越强,权重也越高。
  • 文档长度:长文档更容易多次包含同一个词。长度归一化会减轻这种优势,让不同长度的文档更便于比较。

下表对比常见查询,以及两种检索方式能补充的候选:

查询特点词项检索的作用向量检索的作用
错误码、型号匹配保留的精确词项补充相关描述。
同义表达依赖词项重合或扩展匹配语义改写。
专业缩写依赖分词和词典依赖模型的领域表示。
“ERR_CONN_RESET 怎么解决”错误码作为完整词项保留时,能命中包含它的文档。容易找到网络错误的相关说明,但要检查是否对应同一错误码。
“怎么请假”与“休假申请流程”缺少共同词项时,需要同义词扩展等处理。语义表示有助于把两种说法匹配起来。
产品型号、人名、代码函数名完整保留名称有助于匹配指定对象。罕见名称的表示不足时,会混淆相近对象。
拼写错误、口语化表达依赖纠错、词典或查询扩展。可覆盖模型学过的近似表达,效果要用实际错误样本检查。

精确匹配也依赖正确的分析器,也就是执行分词等文本处理的组件。错误码被拆散后,BM25 同样会漏掉目标文档。中文分词、同义词和业务词典应单独测试,并补充缺少的专有名词。要求编号完全一致时,可使用保留原值的 keyword 字段查询。

两种检索方式遗漏的文档不同,所以取多路候选的并集能补充证据。不过,最终保留的数量有限,融合时仍会淘汰部分结果。因此,混合检索的净收益要在业务问题集上验证。

3. 融合​

融合要把多路结果放进同一个排序,但原始分数的含义和范围不同。RRF(Reciprocal Rank Fusion,倒数排名融合)只使用排名,减少分数尺度差异的影响。

score(d) = Σ_i 1 / (k + rank_i(d))

其中,rank_i(d) 表示文档 d 在第 i 路结果中的名次,从 1 开始。文档未出现在某一路时,该路贡献为零。平滑常数 k 越大,相邻名次的贡献越接近,也就越弱化单路头部名次的优势。这里的小写 k 与召回数量 K 是两个参数。

k 可以从常用的 60 开始评测。比如,A 在两路分别排名第 1 和第 3,得分为 1/61 + 1/63 ≈ 0.0323。B 仅在一路排名第 1,得分为 1/61 ≈ 0.0164。本例中,两路都认为相关的 A 排在前面。

BM25 分数没有跨查询统一的固定上界,会随查询和语料变化。原始余弦相似度则在 -1 到 1 之间,实际候选的分数还会集中在较窄区间。直接相加时,数值较大的一路就容易主导结果。

另一种融合方式是先归一化分数,再按权重相加。比如,min-max 归一化把当前分数按最小值与最大值缩放到同一范围。极端分数会影响这个范围,所以它对异常值敏感,权重也要用评测集校准。RRF 省去了原始分数校准,可以作为融合的起始基线。各路候选窗口和 k 仍需选择,候选窗口就是参与融合的前若干条结果。

融合时还要统一文档或块 ID,合并多路命中的同一条记录。相同正文若在索引中保存了多次,也要结合版本和内容标识去重。否则,重复候选会占掉后续重排和上下文的名额。

4. 重排序​

粗召回需要快速筛选大量文档,重排则要细看问题与候选是否相关。两者采用不同的编码方式,可以把在线计算集中在较少的候选上。

机制编码方式计算位置
双编码器查询和文档分别编码文档向量可离线计算。
交叉编码器查询与候选联合输入每次查询重新评分。

双编码器分别输出查询向量与文档向量,再计算相似度。文档向量能提前算好,适合从百万级文档中检索候选。分别编码时,文档的表示与当前问题无关,也就缺少两者在 Token 层面的直接交互。

交叉编码器把查询与候选拼接后一起输入,直接输出相关性分数。注意力机制可以同时读取问题和文档中的词,帮助模型判断局部内容是否回答了问题。代价是每个查询都要重新计算每个候选,所以更适合几十到上百个候选的精排。

重排放在融合之后、上下文组装之前,用有限候选的在线计算换取更细的相关性判断。实际精度仍取决于模型和任务。也可以用大模型重排,但需要独立比较收益、延迟和费用。

重排模型也有输入长度上限。输入过长时,应拆分文档或选取相关段落;直接截断若丢掉关键证据,就会影响模型打分。

4.1 候选预算与证据覆盖​

决定最终放入多少块之前,需要分别控制三种候选预算。它们影响的是不同环节,适合分开评测:

  • 每路召回量决定正确证据进入候选集的机会。可以从每路几十个候选开始比较,检查增加候选是否补回遗漏。
  • 重排输入量决定在线打分的工作量。可以从融合后的前几十个开始,评测需要时再扩大到上百个。
  • 最终块数和块长度共同决定提示占用。可把 3–10 个块作为初始试验范围,再按问题类型和上下文预算调整。

这些数量是试验起点。比如,多跳问题需要关联多个事实,单个高分片段不足以支持完整回答。相关但重复的块会挤掉互补证据,所以应合并同源重复片段,再检查所需条件是否齐全。

需要补齐命中段落的前后文时,可以回取父块,见文档解析与切分。

重排无法找回候选集外的证据。因此,诊断时应分别记录粗召回、融合、重排和最终上下文中的块。对照各阶段的证据覆盖,就能知道正确文档在哪一步被淘汰。

4.2 阈值与降级​

即使已经选出了前几个候选,其中也会有与问题无关的片段。可以先取排名前 N 的结果,再用分数阈值排除相关性过低的块。

阈值要用所选模型和业务标注样本校准,相关性分数不直接等于答案正确的概率。模型升级后,分数分布会改变,所以要重新检查阈值与拒答效果。全部候选低于阈值时,可以说明未找到相关文档,再追问或补充检索。

重排服务超时或不可用时,可以退回融合排名,并直接按预算截断,维持问答服务可用。同时要记录降级比例,并单独评测降级后的回答质量,避免正常流程的评测掩盖异常时的问题。

5 · 面试题卡片​

本页题目与参考回答

5.1 BM25 和向量检索有什么区别?为什么需要多路召回?​

考察重点:解释两种检索方式的匹配依据,并用错误码、同义表达等例子说明多路召回为何能互补。

相关内容:关键词检索与向量检索。

参考回答

BM25 按词项统计匹配文本,向量检索按语义表示匹配文本,多路召回用两者补充不同候选。

BM25 结合词频、逆文档频率和文档长度,适合匹配错误码、型号和函数名。向量检索有助于匹配同义改写和口语表达,但对罕见名称、精确编号的表示容易不足。比如,查询“怎么请假”与文档“休假申请流程”词项不同,却有相近含义。

多路候选合并后再融合与重排,可以兼顾精确词项与语义表达。中文分词、纠错和专业词典仍要单独检查,避免在词项处理时丢失名称。最终数量固定时,还要评测正确证据是否在融合后被淘汰。

5.2 多路召回结果如何融合?RRF 怎么计算?为什么不直接把分数相加?​

考察重点:解释 RRF 的计算和 k 的作用,并比较排名融合与分数归一化后加权的取舍。

相关内容:融合。

参考回答

多路结果可用 RRF 融合:将文档在各路的 1/(k+rank) 相加,避开原始分数尺度的差异。

排名从 1 开始,未出现的路贡献为零。k 是平滑常数,可从 60 开始评测,用来缩小头部相邻名次的贡献差距。它与召回数量 K 不同。

BM25 分数随查询和语料变化,原始余弦相似度在 -1 到 1 之间。直接相加容易让数值较大的一路主导结果。另一方案是先做 min-max 等归一化再加权,但异常值会影响缩放范围,权重也需要校准。RRF 省去分数校准,仍需评测 k、候选窗口和去重方式。

5.3 Rerank 模型的原理是什么?和 Embedding 模型有什么区别?放在哪个阶段?​

考察重点:解释两类编码器的输入与计算差异,并说明重排位置、候选截断和异常降级的关系。

相关内容:重排序。

参考回答

交叉编码器重排将查询与文档一起输入并输出相关性分数,位于候选融合之后、上下文组装之前。

双编码器分别生成两个向量,再算相似度,文档部分可离线计算。交叉编码器让查询与文档的 Token 直接交互,有助于判断文档是否回答了当前问题。但每个候选都要在线计算,所以适合先召回,再对几十到上百个候选精排。

最终块数由证据覆盖和 Token 预算决定,可以从 3–10 个块开始评测。再用标注集校准分数阈值,全部低于阈值时说明未找到相关文档。服务异常时退回融合排名,并记录降级比例、单独评测回答质量。

5.4 召回、重排和最终 Top-K 应怎样分配?​

考察重点:区分三个阶段的数量预算,说明怎样定位遗漏证据,以及怎样保留多跳问题需要的互补证据。

相关内容:候选预算与证据覆盖。

参考回答

召回量、重排量和最终 Top-K 应分别分配,依据是证据覆盖、在线计算成本和上下文预算。

每路召回可从几十个候选开始,融合后取前几十个重排,最终可从 3–10 个块开始比较。增加召回量有助于补充候选,增加重排量则会增加在线打分计算。最终块数还要结合块长度,确保有足够空间生成回答。

逐阶段记录候选,才能判断证据丢在召回、排序还是上下文截断环节。多跳问题要保留互补证据,并去掉重复片段。候选集外的证据需要重新检索,重排本身无法补回。

6. 参考资料​