Browse this library

Chinese source article

3.1 · 稀疏、稠密与混合召回

理解 BM25、双编码器与混合召回的信号差异、融合方式和失效边界.

View original Markdown ↗

1. 稀疏检索保留字面约束

BM25 以查询词在文档中的频率、语料中的稀有程度和文档长度产生分数. 它不理解完整语义, 却能稳定处理产品编号、法规条款、错误码和罕见实体. 字段化索引还可以提高标题或标签的贡献.

1.1. 词项统计的边界

同义表达、跨语言和隐式描述会让字面匹配漏召回. 分词、停用词和规范化也会改变专名. 因而索引分析器必须与真实查询共同测试.

词典和模型生成的扩展词能够补充释义, 也可能引入歧义. 保留原查询分支可以防止精确约束被改写覆盖.

2. 稠密检索压缩语义

双编码器将查询和文档独立编码为向量, 相似度可通过近似近邻索引高效搜索. 训练样本和负例决定空间学会区分什么. 通用 embedding 对领域编号、细微否定和新实体未必可靠.

2.1. 相似度与归一化

点积、余弦和向量归一化共同决定分数范围. 模型升级后原有阈值不能直接沿用. 查询模板、标题拼接和截断长度也属于索引版本.

HNSW、IVF 等索引用近似换取延迟和内存. 评测要把 ANN 结果与精确向量搜索比较, 区分表示模型漏召回和索引近似漏召回.

3. 混合召回

3.1. 排名融合

RRF 使用各路名次的倒数加权, 避免直接比较不同尺度的原始分数. 学习式融合可使用查询特征、分数和来源, 但需要独立校准集并防止过拟合.

混合召回的收益来自两类错误不完全重合. 如果稀疏和稠密始终返回相同文档, 融合只会增加成本.

包含编号或引号短语的查询可提高稀疏权重, 解释性自然语言可提高稠密权重. 路由器出错会完全丢失一路候选, 因此关键任务更常并行召回后融合.

4. 诊断召回

4.1. 按问题属性分组

分别观察专名、数字、释义、跨语言、时间和多跳问题的 recall@k. 总体平均值可能掩盖某一类严重缺口.

每个候选保留命中的检索器、原始分数、名次、过滤条件和索引版本. 融合后仍能反查单路表现, 才能解释改动.

召回阶段的停止点是把可能支持答案的证据送入可承受的候选集. 是否真正支持、是否互补, 留给重排与证据选择判断.

5. 从评分函数到域外边界

下面把稀疏、稠密与 late interaction 放进同一查询—文档评分坐标, 再用查询改写和跨域评测检查表示的边界. 各方法共享候选身份与过滤条件, 分数含义仍由训练目标和语料统计决定.

召回层的目标是让充分证据进入可承受的候选集. 单路最高分、混合后的名次和最终可回答性需要分别保存, 不能用一个端到端答案分数替代.

1. 召回器各自计算了什么

1.1. BM25 的词项证据

BM25 的一种常见形式为:

BM25⁡(q,d)=∑t∈qIDF⁡(t)f(t,d)(k1+1)f(t,d)+k1(1−b+b∣d∣avgdl⁡).\operatorname{BM25}(q,d)=\sum_{t\in q}\operatorname{IDF}(t) \frac{f(t,d)(k_1+1)}{f(t,d)+k_1\left(1-b+b\frac{|d|}{\operatorname{avgdl}}\right)}.

f(t,d)f(t,d) 是词项 tt 在文档 dd 中的频次, ∣d∣/avgdl⁡|d|/\operatorname{avgdl} 修正文档长度. 稀有词的 IDF 较高, 所以型号、错误码和人名通常能留下强信号. 公式族在 IDF、查询词频和参数约定上略有差异, 生产结果还取决于中文分词、规范化、同义词和字段权重.

BM25 的弱点不是「不懂语义」这么简单. 同义表达和跨语言会使共享词项减少; 常见概念词的区分度低; 长文包含查询词却未必在局部讨论该问题. 分析器版本改变后, 索引语义已经变化, 必须重建并跑同一回归集.

1.2. 双编码器与 late interaction

双编码器分别计算 q=fq(q)\mathbf q=f_q(q) 和 d=fd(d)\mathbf d=f_d(d), 再使用内积或余弦:

sdense(q,d)=q⊤d∥q∥2∥d∥2.s_{\text{dense}}(q,d)=\frac{\mathbf q^\top\mathbf d}{\|\mathbf q\|_2\|\mathbf d\|_2}.

查询与文档向量可以离线分开计算, 文档向量进入 ANN 索引. 单向量压缩了整段内容, 对释义有优势, 对多个独立条件可能发生信息竞争. 负样本选择决定模型学会区分什么;若训练负样本只来自随机文档, 模型未必能区分数字或相近版本.

ColBERT 式 late interaction 保留 token 级表示. 对查询 token 表示 qi\mathbf q_i 和文档 token 表示 dj\mathbf d_j, MaxSim 评分可写成:

slate(q,d)=∑imax⁡jqi⊤dj.s_{\text{late}}(q,d)=\sum_i\max_j\mathbf q_i^\top\mathbf d_j.

每个查询 token 在文档中寻找最佳局部匹配, 比单向量保留更多细节, 同时增加存储与候选打分成本. 它位于双编码器和完整 cross-encoder 之间, 不应按单向量索引估算资源.

3. 查询改写与多跳

3.1. 改写改变检索分布

对话问题「那海外的呢」不能直接送入索引. 改写器需要从有效历史恢复对象和属性, 例如「海外差旅报销期限是多少」. 原查询与改写都应保留, 因为改写可能错误继承已经被用户否定的条件. 对明确查询, 无条件改写还可能删除型号、引号或代码符号.

HyDE 生成一个假设答案或假设文档 d\tilde d, 用 fd(d)f_d(\tilde d)) 作为查询侧表示去找真实文档. 它把短问题扩成更接近文档语言的文本, 但假设内容中的错误实体也会带偏检索. 应同时跑原查询与 HyDE 查询, 分析独有命中, 而不是只看最终平均分.

3.2. 多跳需要集合标签

问题「负责 A 项目的团队采用的许可证是否允许商业分发」至少需要项目—团队关系与许可证条款两跳. 第一轮找到团队或仓库, 第二轮才能形成具体许可证查询. 评测标签应是证据集合 G={da,db}G={d_a,d_b}, 而不是任意命中其中一篇就成功.

迭代检索的状态包含待回答子问题、已获得证据和剩余预算. 下一步查询由缺失槽位生成, 而不是自由延长推理文本. 每轮记录输入证据和新查询, 便于发现第一轮错误怎样传播. 当所有槽位有证据、连续两轮没有新增支持或达到预算时停止.

检索管线接收查询 qq 与语料快照 Ct\mathcal C_t, 输出一组带来源身份和分数的候选 DKD_K. 这个定义刻意停在候选: 哪些候选最终进入模型上下文, 属于下一条路线的证据选择问题. 分开以后, 「正确证据从未出现」和「正确证据出现却被预算删除」才能用不同指标定位.

传统搜索系统早已形成稀疏检索、学习排序和索引工程. RAG 增加了稠密表示和生成环节, 但没有让旧问题消失. 词项仍然承载型号、编号和专名; 向量表示擅长释义; 结构化过滤执行时间、字段和权限; 重排器在较小候选集上计算更强的查询—文档交互. 检索管线的设计重点是信号分工, 不是选一个模型替代所有信号.

6. 交互强度、融合与调试

第 jj 个召回器产生排名 Rj(q)R_j(q). 稀疏召回器从倒排表累计词项分数, 稠密召回器比较查询向量与文档向量, 结构化通道根据字段谓词取记录. 各通道必须返回稳定证据身份, 随后才能去重和融合. 如果相同逻辑文档因滑窗切分出现五次, 直接融合会让重复数量变成额外投票.

召回层最基本的指标是 Recall@k 或 hit rate, 它判断所需证据是否进入候选. MRR 关注第一个相关结果, nDCG 处理多等级相关性, 多跳任务还要测证据集合覆盖. 权限正确性是硬约束, 不进入相关性平均值. 所有指标绑定同一语料快照和标签口径, 否则模型差异会与语料变化混在一起.

双编码器在查询和文档相遇前已经各自压缩成单向量, 因而可以大规模预计算. late interaction 保留多个 token 表示, 在候选打分时进行局部最大匹配, 细节更多, 存储和计算也更高. Cross-encoder 把查询与候选联合输入完整 Transformer, 交互最充分, 通常只用于粗召回后的几十或几百条候选.

这三类方法不是按年份替代. 单向量召回决定大规模覆盖, 多向量可以承担更细的第一阶段检索或中间排序, cross-encoder 负责前排精度. 生产选择取决于语料规模、更新频率、延迟目标、GPU 批量和最终上下文预算. 论文中的同一模型离开其候选规模与硬件条件后, 延迟数字不能直接迁移.

6.3. 融合发生在什么位置

分数融合要求不同通道经过可比较校准, 排名融合则使用名次. RRF 对多路排名的倒数名次求和, 能保留各通道稳定靠前的候选. 学习排序可以加入原始分数、排名、来源、时效和字段匹配, 需要可靠标签并防止同一查询簇泄漏到训练与测试.

融合前后都可能做去重. 融合前按逻辑文档合并可以避免重复投票, 却可能过早丢掉同一文档中的不同证据区间;融合后再做片段级聚合能保留信息, 候选规模会更大. 多跳任务尤其不能把同一文档的所有片段视为重复, 应根据来源区间和支持命题判断.

Exact vector search 给定同一向量和距离函数, 可以作为 ANN 的参照. HNSW 用多层近邻图减少搜索范围, IVF 先通过粗量化定位部分倒排列表, PQ 等方法进一步压缩向量. 索引参数改变速度—召回—内存关系, 过滤与删除能力由具体实现决定.

评测 ANN 时, 分母应是相同过滤条件下 exact search 返回的近邻. 若先做全局 ANN 再过滤权限, 结果数量与召回会随可见集合变化, 还可能带来安全风险. 多租户系统需要比较预过滤、分区索引和独立索引, 不应只在无过滤公开数据上测速度.

两类具体页面

后续比较从 BM25、双编码器和 ColBERT 式 late interaction 推到 RRF 与 cross-encoder, 解释每层计算了什么、成本怎样传递. 具体检索方法应说明它改变查询表示、文档表示、交互函数还是训练负样本, 并与 exact 基线在同一标签上比较.

上下文构造位于检索之后. 它接收已排序候选, 处理证据覆盖、重叠、冲突、扩展和 token 预算. 检索管线会记录片段长度与来源关系供选择器使用, 但不会用「top-k」替代最终证据集合. 这种边界使新检索器可以在不改生成器的条件下独立回归.

6.5. 调试顺序

一次检索失败先确认正确证据存在且解析完整, 随后看每路召回的独有命中. 稀疏失败常与分词、规范化和词项缺失有关;稠密失败常与训练域、查询模板、截断和负样本有关. 两路都命中而融合下降, 检查去重和名次参数;融合正常而重排下降, 检查候选长度、难负样本与标签定义.

离线提升还要经过真实过滤、并发和缓存状态. top_k 增加会提高重排批量, cross-encoder 输入长度会影响二次方注意力成本, ANN 探索参数会改变长尾延迟. 只有把质量和资源放到同一运行表里, 才能选出可部署配置.

稀疏检索依赖语料统计, 稠密与重排模型还依赖训练数据. 正样本可以来自人工相关性、问答来源或点击, 三者含义不同. 问答来源说明文档支持某个答案, 不一定覆盖查询的全部意图;点击还受位置和界面影响. 训练前要把标签转换过程写清, 避免把弱信号当成完整相关性.

负样本决定模型在哪里形成边界. 随机文档通常太容易, BM25 或旧 dense 模型的高排误召更接近线上. 同实体旧版本、数值接近、否定相反和只覆盖一跳的候选属于任务难例. 训练集与测试集按查询簇和来源隔离, 防止同一模板泄漏.

模型更新后重新挖难负样本. 旧模型认为困难的样本, 对新模型可能已经容易;新模型也会产生新的系统性误召. 训练循环保留每轮模型、语料和负样本来源, 才能解释收益来自更好表示还是更贴近测试的数据.

6.7. 多语言、时效与权限

跨语言查询可以使用多语言 dense 表示, 也可以翻译后检索. 翻译会改变专名和数字, 因此原查询、译文与各自候选都进入 trace. 稀疏通道可建立语言字段或同义词, 不应让机器翻译覆盖原始文本.

时效既可作为过滤条件, 也可作为排序特征. 若问题明确指定历史时间, 最新版本并不相关. 候选携带生效区间, 过滤器根据任务时间选择;没有指定时间时再使用当前有效版本. 这种规则比在生成 prompt 中要求「优先最新」更稳定.

权限过滤与时效过滤一样属于候选合法性. 排名分数不能让越权文档进入结果. ANN 引擎后过滤导致结果不足时, 应增加探索、采用预过滤或分区索引, 不允许扩大可见范围.

6.9. 校准、预算与域漂移

Learned sparse 仍输出词表维度上的稀疏向量, 可以继续使用倒排索引. SPLADE 用 masked language model 为原词和扩展词产生非负权重, 常见形式为 wj=max⁡ilog⁡(1+ReLU⁡(hij))w_j=\max_i\log(1+\operatorname{ReLU}(h_{ij})), 查询与文档按 s(q,d)=∑jwjqwjds(q,d)=\sum_jw_j^qw_j^d 评分. FLOPS 类正则限制平均激活; 约束太弱会扩大索引, 太强会压掉有效扩展.

四维例子中, 查询为 [1.2,0,0.5,0][1.2,0,0.5,0], 文档 A 为 [0.8,0,0.7,0][0.8,0,0.7,0], B 为 [0,1.1,0.4,0][0,1.1,0.4,0]. 点积得 1.31 与 0.20. 真正系统使用大词表, 计算仍只遍历非零维度. 与 BM25 相比, 词项权重和扩展来自训练数据, 因而也更受训练域影响.

ColBERT 的 late interaction 保留 token 向量, 用 s(q,d)=∑i∈qmax⁡j∈dE(qi)TE(dj)s(q,d)=\sum_{i\in q}\max_{j\in d}E(q_i)^TE(d_j) 计算 MaxSim. 若两个查询 token 对文档 A 的最大相似度为 0.9、0.4, 对 B 为 0.6、0.8, A 得 1.3, B 得 1.4. 它比单向量保留更多对应关系, 代价是多向量存储、压缩和查询计算.

BEIR 用多领域异构任务比较零样本检索. 其结果表明, 在单一训练分布上强的稠密检索器, 换到论证、科研和事实核查等任务时未必持续领先 BM25; 多任务训练与更强交互通常更稳, 成本也更高.

域外变化包括查询语言、文档体裁、相关性定义和负例难度. 客服 FAQ 模型迁移到法规条款时, 编号、长句和否定条件都发生变化. 评测应按来源或时间留出完整域, 并保留 BM25 锚点. 若 dense 同域 recall@20 为 0.88、新域为 0.62, BM25 分别为 0.78 和 0.71, 混合在新域达到 0.76, 选择混合的依据是更稳的最差域表现.

多一路召回只有带来独有充分证据时才有价值. 每路记录独有命中、共同命中与独有错误, 再比较边际 recall 和重排成本. 第三路若在一千个问题中只增加两个目标证据却让候选翻倍, 更适合按查询路由.

召回器的职责是在预算内保住证据, 相似分数不足以证明问题已经可回答. OOD、权限过滤与 ANN 近似都会改变候选, 生产记录需要带模型、索引和过滤版本.

7.3. 混合召回的可复算比较

混合实验先固定每路候选深度. 假设 BM25 与 dense 各取 top-20, 去重后得到 31 个文档, 参考证据在 BM25 排名 3、dense 未命中. 另一问题的参考证据在 dense 排名 2、BM25 排名 17. 两个例子说明单路平均分无法表达互补性; 报告中要列出稀疏独有、稠密独有、共同命中与共同遗漏.

用 RRF 常数 k=60k=60 融合时, 第二个例子的参考文档得分为 1/(60+2)+1/(60+17)≈0.02911/(60+2)+1/(60+17)\approx0.0291. 某干扰文档两路排名均为 8, 得分 2/(60+8)≈0.02942/(60+8)\approx0.0294, 会略排在参考文档前. RRF 避免原始尺度问题, 仍会奖励多路一致; 如果一条召回器在某域系统性偏差, 一致不代表充分证据.

比较候选深度时同时测边际收益. 某数据集从每路 top-20 扩到 top-50, recall 从 0.83 升到 0.87, 去重候选从 31 增到 74, cross-encoder P95 从 180 ms 增到 410 ms. 若最终答案只提升 0.5 个百分点, 可以为多跳或低置信查询使用更深候选, 普通查询保持较小预算.

查询路由需要与并行混合做对照. 规则把含错误码、引号短语和长数字串的请求送到稀疏检索, 其余走 dense, 可以节省成本; 一旦路由错误, 被关闭的一路无法补救. 评测记录路由混淆矩阵, 并为低置信路由保留双路召回.

负例检查揭示“高相似但不支持”的原因. 对 BM25 常见的是同词异义和缺少条件, 对 dense 常见的是主题近邻、实体混淆与否定方向, 对 learned sparse 还要观察扩展词漂移. 将这些高排名错误加入训练或重排数据之前, 需要确认它们确实不属于另一组可接受证据.

索引更新也会改变混合权重. 新增大量同领域文档会改变 BM25 的文档频率, embedding 模型升级会改变向量分布, learned sparse 的模型修订会改变激活词项. 每次 release 在固定回归集上重新测单路与融合, 旧阈值和融合系数不能直接继承.

最终报告把质量和资源放在一张表中: 每路 recall@k、独有命中、索引大小、构建时间、查询 P50/P95 与过滤后的返回数量. exact dense 作为向量表示上限, ANN 结果与它比较; BM25 作为无需训练的词项锚点, learned sparse 与它比较. 这种参照能区分训练收益、近似搜索损失和索引成本.

对时间敏感的新实体, 还要构造按发布日期切分的测试. 训练截止后出现的型号、法规和人名主要依赖词项与文档内容, dense 模型可能没有形成稳定表示. 混合召回应允许 BM25 在这类查询中贡献独有候选, 重排器再依据完整条件判断. 当新实体积累到足够数据后重新训练, 也要保留时间外测试, 防止分数提升只来自记住已经见过的名称.

这套实验同时保留查询、候选和索引版本, 使每个边际收益与域外退化都能够复算, 并为后续重排提供稳定输入.

查询切片、候选来源和过滤结果共同保存后, 同一次漏召回才能在模型、索引与权限边界之间准确归因.

BM25、稠密点积和 learned sparse 分数都不是天然概率. 若下游需要“目标证据进入候选的概率”, 可以在独立校准集上学习 P(y=1∣s,x)P(y=1\mid s,x), 其中 ss 是分数, xx 包含查询类型、文档长度、来源与排名. Platt scaling 用 σ(as+b)\sigma(as+b) 拟合二分类概率, isotonic regression 则学习单调分段函数. 校准只适用于相同模型、语料和采样过程.

设某稠密模型的三个分数 0.82、0.74、0.66 经验证集得到支持频率 0.7、0.4、0.1, BM25 的 18、12、8 对应 0.6、0.35、0.15. 两路原始值无法相加, 转成同一标签下的概率后可以比较. 但候选之间不独立, 同文档重复片段会让概率求和超过真实覆盖, 因而集合阶段仍需去重.

校准误差可用 Expected Calibration Error: 把预测分桶, 计算 ∑b∣Bb∣n∣acc(Bb)−conf(Bb)∣\sum_b\frac{|B_b|}{n}|acc(B_b)-conf(B_b)|. 十个预测为 0.8 的候选中只有五个支持问题, 该桶误差为 0.3. 样本不足时宽桶掩盖局部偏差, 过细分桶又方差很大, 需要同时查看可靠性图和 Brier score.

OOD 会让映射失效. 在 FAQ 上 0.75 可能表示高相关, 在法规长文上同一分数可能只是主题近邻. 上线监控按来源与问题类型切片校准误差, 新域无足够标签时保留 RRF 和 BM25 锚点, 不把旧域概率当成跨域事实.

多路召回的概率边界

若稀疏与稠密命中事件分别为 S,DS,D, 目标证据被任一路找到的概率为 P(S∪D)=P(S)+P(D)−P(S∩D)P(S\cup D)=P(S)+P(D)-P(S\cap D). 假设两路 recall 为 0.7、0.6, 共同命中 0.5, 混合上限为 0.8, 不是 1.3. 共同命中越高, 新增一路的边际价值越低.

在一百个问题中, BM25 命中 70, dense 命中 60, 共同命中 50, 混合命中 80. dense 对 BM25 的独有增益为 10, BM25 对 dense 为 20. 若重排预算只容纳 40 个候选, 还要检查融合是否保住这 30 个独有命中, 否则理论互补不会进入下游.

相关性标注允许多份等价证据时, 上式按“至少一个充分证据组命中”计算. 多跳任务则要求某组全部成员命中, 单文档 recall 会高估可回答性. 评测资产必须先定义证据组, 再讨论混合概率. BM25 与向量分数为何不可裸加

BM25 可写为 ∑t∈qIDF(t)f(t,d)(k1+1)f(t,d)+k1(1−b+b∣d∣/avgdl)\sum_{t\in q}IDF(t)\frac{f(t,d)(k_1+1)}{f(t,d)+k_1(1-b+b|d|/avgdl)}. 分数随查询词数、语料文档频率和长度统计变化, 没有固定上下界. 余弦相似度位于 [−1,1][-1,1], 但实际分布由 embedding 模型和归一化决定; 点积连这个范围也没有. 把 BM25 + cosine 相加, 等价于让单位和方差偶然决定权重.

假设查询 A 的 BM25 候选分数为 24、18, dense 为 0.74、0.70; 查询 B 的 BM25 为 4、3, dense 仍为 0.74、0.70. 固定相加在 A 中几乎忽略 dense, 在 B 中 dense 相对影响显著. 即使先做 min-max, 每个查询只有少量候选时极值不稳, 新的异常高分还会重缩放全部结果.

可比较校准要定义共同标签, 例如“候选是否属于某个充分证据组”. 对每路分别拟合 pj(y=1∣sj,x)p_j(y=1\mid s_j,x), 再用 logistic regression 学 σ(β0+∑jβjlogit⁡pj)\sigma(\beta_0+\sum_j\beta_j\operatorname{logit}p_j). 训练、校准、测试按问题或时间隔离, 防止同一文档切片泄漏. 缺少稳定标签时, RRF 比伪概率更诚实.

7.5. RRF 的边界与召回预算

RRF 对第 rr 名的贡献为 1/(c+r)1/(c+r). 当 c=60c=60, 第 1 与第 10 名差约 0.00220.0022, 第 50 与第 100 名差约 0.00290.0029. 常数较大时头部差异被压平, 多路中等名次可能超过单路第一; 常数较小时头部更强. 它不使用分数间距, 第一名远胜第二名的信息会丢失.

反例中, 专门错误码检索器把唯一正确文档排第一, 通用 dense 未命中; 两个低质量改写检索器都把同一主题干扰文档排第五. RRF 可能因两路一致把干扰项放在正确文档前. 合理处理是验证召回器质量、查询路由和独有命中, 必要时给专用精确匹配保留槽位, 而非盲目增加某一路权重.

预算例: BM25 与 dense 各取 20 条, 去重后 32 条, recall 为 0.82; 各取 50 条得到 78 条, recall 为 0.89. cross-encoder 每候选 3 ms, 重排从约 96 ms 增到 234 ms, 最终上下文覆盖只从 0.77 到 0.80. 增加的 7 个召回点只有 3 个传到上下文. 普通查询使用 20, 多跳或低置信查询使用 50, 比全量扩大更接近预算最优.

域漂移可以来自查询 P(q)P(q)、文档 P(d)P(d) 和相关标签 P(y∣q,d)P(y\mid q,d) 三处. 用户从完整问句变成关键词属于查询漂移, 新增扫描 PDF 属于文档漂移, “主题相关”改成“能够独立支持答案”属于标签漂移. 只看分数分布无法区分三者.

监控同时保存查询长度、语言、实体率, 文档类型与长度, 各路独有命中和人工标签. embedding 分数均值稳定并不代表质量稳定: 新域可能把相关与不相关分数一起移动, 排名指标仍下降. 定期抽样标注比只设分数阈值可靠.

时间外测试把训练截止后的实体与版本独立成集. BM25 常能凭新词项命中, dense 可能因未见实体落后; 另一方面, 新术语有大量别名时 dense 仍可能占优. 混合权重按时间外集校准, 不能从同域平均结果推断.

查询为“XJ-17 在固件 3.2 出现 E42 如何恢复”. 语料有六个关键候选: D1 精确型号与错误码但版本 3.1, D2 版本 3.2 的正式手册, D3 讨论 E42 的论坛, D4 语义相关的通用恢复指南, D5 型号 XJ-71, D6 已撤回旧公告. 权限和有效期先排除 D6, 型号与版本仍作为相关条件参与判断.

BM25 排名为 D1、D2、D3、D5、D4, dense 为 D4、D2、D3、D1、D5. BM25 把字面完全匹配但版本错误的 D1 放在前面, dense 把语义宽泛的 D4 放在前面, 两路都把充分证据 D2 放第二. 取 c=60c=60 的 RRF, D2 得 2/(62)≈0.032262/(62)\approx0.03226, D1 得 1/61+1/64≈0.032021/61+1/64\approx0.03202, D4 得 1/65+1/61≈0.031781/65+1/61\approx0.03178, D2 排到第一.

若 dense 只取 top-1, D2 只获得 BM25 的 1/621/62, D1 则仍有两路贡献, 结果反转. 这说明每路截断深度属于融合参数. 扩大 dense 深度会增加重排候选, 需要用独有命中和最终证据覆盖验证, 不能只看这个成功样本.

对 D1 与 D2 的区分需要版本条件. 若召回标签只标“讨论 E42”, 两者都为正例, 模型学不到 3.2 的充分性. 将标签分为主题相关、条件匹配、充分支持三级, 召回层可接受主题相关进入候选, 重排与选择以充分支持为目标. 评测口径随流水线阶段改变, 但同一标签定义必须固定.

在一千个问题上, BM25 命中 720, dense 命中 750, 共同命中 610, 理论混合覆盖 860. 实际融合 top-20 只保住 830, 30 个互补命中因截断丢失. cross-encoder 后证据覆盖 790, 最终上下文为 760. 这条漏斗把混合器损失 30、重排/选择损失 70 分开, 避免把全部 100 个差距归给 embedding.

可辨识性边界

只观察最终 top-k 无法辨认“召回器没有返回”和“融合器删掉”. 运行记录必须保存各路候选到足够深度. 同样, 只观察相关性标签无法判断 dense 命中来自真正语义泛化还是训练语料记忆; 时间外实体与文档族隔离提供更强证据.

分数校准也有不可辨识情形. 若校准集只包含每个查询的 top-5, 低分区域全部是被选择后的样本, P(y∣s)P(y\mid s) 受到截断偏差. 需要从更深候选或随机语料采样负例, 并记录采样概率. 否则模型给 0.2 的“概率”只适用于 top-5 内部, 不能用于全库阈值.

消融按四步执行: 去掉稀疏路、去掉稠密路、保留两路但取消校准、保留校准但改变候选深度. 每步报告总体与实体/释义/版本切片. 若去掉某路总体不变但新实体切片下降, 该路仍提供关键长尾价值.

带采样校正的校准例子

假设每个查询保留 top-10, 其中相关候选比例为 20%; 为覆盖尾部, 又从排名 11–100 中均匀抽 10 个, 该区间真实候选有 90 个, 每个被抽中的概率为 10/90=1/910/90=1/9. 训练校准器时, top-10 样本权重为 1, 尾部样本用逆概率权重 9. 不校正时, 尾部只出现十个样本, 会把其总体质量和数量严重低估.

若抽到的尾部十项中一项相关, 未加权估计只看到 1 个相关; 加权后它代表约 9 个, 对应尾部相关率约 10%. 加上 top-10 中 2 个相关, 全部百项预计约 11 个相关. 这个估计方差较大, 需要跨查询汇总并报告区间, 但比把选择后样本当成总体更合理.

校准器还应检验单调性. 对同一检索器, 更高分候选平均相关率若反而更低, 可能是标签口径、采样或分数方向错误. 对混合模型则不强求每个原始分数单调, 因为一路高分可能被另一条条件否决; 最终融合概率应在独立测试集画可靠性图.

把各路候选深度记为 kjk_j, 质量为 R(k1,…,km)R(k_1,\ldots,k_m), 延迟与重排成本为 C(k1,…,km)C(k_1,\ldots,k_m), 可优化 R−λCR-\lambda C. RR 通常边际递减: BM25 从 10 增到 20 可能新增 5 个证据, 从 90 到 100 只新增 1 个; 成本却近似随去重候选数增长.

数值例中, 稀疏/稠密深度组合 (20,20) 的覆盖 0.82、成本 40, (50,20) 为 0.86、成本 67, (50,50) 为 0.89、成本 92. 若每单位成本惩罚 λ=0.001\lambda=0.001, 三者效用为 0.780、0.793、0.798; 若高峰期 λ=0.003\lambda=0.003, 效用变为 0.700、0.659、0.614, 小候选更优. 同一质量曲线在不同容量状态下可以选择不同工作点.

动态预算要由请求前可见特征决定, 例如问题长度、实体数量、是否多跳和第一轮分数间隔. 不能看到正确答案后再选择深度. 离线模拟用相同路由规则重放, 同时报告平均预算和最差切片, 防止系统把资源集中在容易识别的问题而放弃难题.

当新域校准样本不足, 系统可以降低学习式融合权重, 保留 BM25 与 RRF 基线, 并扩大人工抽样. 漂移检测只触发复核, 不自动断言质量下降; 查询长度或分数分布变化可能来自正常产品活动. 只有标签样本确认召回或校准退化后才更新模型与阈值.

回退也要版本化. 新 embedding 索引上线后若时间外切片下降, 读别名切回旧索引, 查询缓存和融合参数也要匹配旧版本. 只回退向量而保留新校准器, 分数分布不再对应, 可能产生新的排序错误.

回归集同时保存每一路原始排名和融合结果. 这样回退后可以确认独有命中、共同命中与截断损失都恢复到预期范围, 而非只观察少量最终答案. 分数分布、校准映射和索引 release 作为一个版本组发布.

容量调整必须留下逐路命中与截断记录;否则总召回率相同,也无法判断改进来自真实互补,还是某一路偶然覆盖了测试集。