知行札记
专题数据与信息系统搜索、索引与检索

查询匹配、候选与排序

理解 BM25 的词频与长度规则,以及交叉编码、模型重排和结果去重的条件。

候选与顺序分两步解释

匹配规则决定哪些记录进入候选,排序规则决定候选怎样排列。布尔条件、短语、字段匹配、时间范围与权限可能直接限制集合;相关性分数在允许候选中排列顺序。权限条件应约束可见集合,不能用一个加分或减分项替代。

查询解析器需要说明输入表达的是全部词、任一词、连续短语还是精确标识。搜索框的空格和引号只有在解析器提供相应语法时才有约定含义。拼写纠正、同义词扩展和查询改写会改变表示,需要保留原始要求,避免扩大精确检索范围。

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(1-b+b|d|/\operatorname{avgdl})}

qq 是查询词项集合,dd 是被评分的搜索单位,f(t,d)f(t,d) 是词项 tt 在该单位中的出现次数;∣d∣|d| 和 avgdl⁡\operatorname{avgdl} 分别是该单位及集合平均的分析后长度。这里省略了长查询的查询词频项。k1k_1 控制词频收益的饱和程度,bb 在 0 到 1 之间控制长度归一化强度。教材的 Okapi BM25给出了这些因素的推导关系与不同变体。

在长度等于平均长度、k1=1.2k_1=1.2 的构造例子里,词频从 2 增到 4,对应的词频因子从 4.4/3.2=1.3754.4/3.2=1.375 增到 8.8/5.2≈1.6928.8/5.2\approx1.692。出现次数翻倍,收益逐渐饱和;不断重复一个词不会按次数无限增加这一因子。b=0b=0 时长度不起作用;增大 bb 会更强地调整长单位较容易包含查询词的差异。

一种采用正值平滑的 IDF 是:

IDF⁡(t)=log⁡(1+N−nt+0.5nt+0.5)\operatorname{IDF}(t)=\log\left(1+\frac{N-n_t+0.5}{n_t+0.5}\right)

NN 是相应集合或字段的文档数,ntn_t 是包含该词的文档数。Lucene 9.12.2 的 BM25Similarity API采用这个 IDF;其他变体可以使用不同平滑。引擎还可能在字段统计、重叠词项、长度编码和常数因子上不同,同一名称不能保证相同数值。

如果查询和文档在分析及扩展后没有任何共享词项,上述逐词求和模型不会从这些词项取得匹配贡献。词形、同义词、字符片段或学习扩展可以改变这个条件。精确代号需要合适的标识字段与分析规则;罕见词的高 IDF 无法补救被错误拆分的代号,也无法保证包含代号的文档一定最有用。

字段权重与任务有关

标题中的匹配可能比正文中的一次提及更能指认主题,正文完整短语也可能比标签更贴近细节。字段权重应服务任务,并用代表性查询检查。将标题权重提高,会同时改变主题导航和细节查证的顺序,不能只凭标题命中次数判断收益。

时间、热度和个性化可以改变顺序,同时也改变“相关”的定义。用于查证的搜索重视原始来源和精确定位,用于发现内容的搜索可能更重视覆盖。评价前先确定用户要完成什么,才能解释排序是否合适。

交叉编码把比较推迟到查询之后

单向量双塔分别编码查询与文档,用两个已形成的向量计算分数。交叉编码器(cross-encoder)把查询和一个候选文档共同送入模型,让文档的处理依赖当前查询,再输出相关性分数。联合输入可以保留更细的词项、关系和条件比较,但最终质量仍取决于训练与任务。ColBERT 原论文的模型比较与重排讨论说明了预计算与查询时交互的区别。

例如查询“哪些格式可以保留批注”,候选分别说“导出 PDF 保留批注”和“导出文本不保留批注”。联合比较可以利用“保留”和“不保留”的关系。单向量模型也可能学会这一差别;联合输入增加了使用当前查询检查细节的机会,不能保证任何模型都作出正确判断。

查询与文档的完整联合分数无法在未知查询时离线预计算。候选数量、序列长度、模型、硬件和批处理方式决定在线代价。比较 100 个候选意味着需要处理 100 组输入,可以分批并行,不能把它直接写成 100 次串行调用。大集合通常先用较便宜的检索取得候选,再用联合模型重排;小集合也可以直接逐项比较,使用阶段由成本约束决定。

重排只能改变当前候选的顺序。第一阶段漏掉的记录,需要扩大候选、补充检索或改变表示才能找回。文档截断还可能让模型看不到决定性的后半句,即使原始记录已进入候选。

生成模型怎样参与重排

生成模型可以按任务说明判断相关性,常见输入与输出组织如下:

方式比较对象与输出需要核对的条件
单项判断(pointwise)每次给查询与一个候选,输出相关等级或评分不同调用的尺度是否可比,分数是否有校准依据
成对比较(pairwise)给查询与两个候选,输出较相关者交换位置后的稳定性、比较次数及循环偏好
列表排序(listwise)给查询与一组候选,输出候选 ID 的排列上下文长度、初始顺序、遗漏或重复 ID

候选过多时可以分窗口比较,再将结果合成。窗口大小、移动次序和跨窗口候选决定哪些记录真正被共同比较,结果不能直接当作一次全局最优排序。Sun 等人的 RankGPT,§3 与附录给出列表排列与滑动窗口的具体设计。

模型输出需要检查:每个 ID 是否来自候选,是否缺失或重复,结果是否保留过滤条件,以及异常时怎样回退。输入文档是待比较的数据,文档中的命令式文字也可能影响生成判断。固定任务说明、数据边界和输出契约各自需要检查,相关性判断不能授予文档执行权限。

模型规模、指令遵循和推理能力不能直接推出排序精度上限。How Good are LLM-based Rerankers?,§5—7在指定基准和新查询集上比较了多种重排方式,报告泛化表现随方法和任务变化。采用时需要比较同一候选集上的排序质量、端到端延迟、费用和失败率,候选条数或单次任务价值只能提供成本条件。

去重与来源身份影响结果含义

同一来源可能有多个段落命中。按段落取前 kk 项、先按文档去重再取 kk 项、保留同文档最优段落并回填邻近上下文,具有不同含义。一个来源出现多次,会占用结果位置,也不能被计作多个独立来源支持。

去重应使用来源 ID、版本和位置,避免只靠展示标题。同名文档可能不同,重复发布也可能只是同一材料的多个副本。检索分数表明表示关系,内容真实性与时效仍需返回原文检查;本页没有宣称固定参数或重排器对所有语料最优。

最后更新于

本页目录