跳转至

第十一章:检索范式:稀疏、稠密与后期交互

11.1 三种范式的本质区别

范式 表示与匹配依据
稀疏检索 词表维度大部分为零,通常用倒排索引;BM25 按词项统计打分,SPLADE 等还能学习扩展词项
稠密检索 双塔将文本压成几百到几千维向量,按训练出的相关性匹配
后期交互 ColBERT 系保留 Token 级向量,在线聚合细粒度匹配分数

这三种范式不是简单的新旧替代关系,更准确的说法是:它们分别擅长不同类型的匹配。

11.2 稀疏检索:不要低估它

11.2.1 BM25 在做什么

BM25 的打分逻辑可以拆成三个直觉:

  1. 匹配词频增加可提高得分,但收益逐渐饱和,不是线性无限累加;
  2. 一个词在整个语料中越罕见,它的匹配越有价值(逆文档频率)——「的」匹配上不说明什么,「XR-2100」匹配上意义重大;
  3. 长文档天然容易包含更多词,需要按长度归一化,否则长文档会占便宜。

打分形式大致是:

\[ \mathrm{score}(q, d) = \sum_{t \in q} \mathrm{IDF}(t) \cdot \frac{f(t, d) \cdot (k_1 + 1)}{f(t, d) + k_1 \cdot \left(1 - b + b \cdot \frac{|d|}{\mathrm{avgdl}}\right)} \]

其中 \(f(t,d)\) 是词 \(t\) 在文档 \(d\) 中的频次, \(|d|\) 是文档长度, \(\mathrm{avgdl}\) 是平均文档长度, \(k_1\) 和 \(b\) 是可调参数。

公式本身不是重点,关键是词频、逆文档频率和长度归一化这三个因素。

具体实现的 IDF 和常数项存在差异。例如 Lucene 9.12 使用 log(1 + (N − df + 0.5) / (df + 0.5)),其中 N 是字段的文档数,df 是含词文档数;另一些历史公式没有外层的 1 +,常见词的 IDF 可能为负。比较分数时要固定分析器、字段统计和实现。

11.2.2 BM25 的不可替代之处

在专业术语密集的领域,BM25 经常优于稠密检索。

具体场景:

  • 产品型号、错误码、API 名:ERR_CONN_REFUSED、XR-2100——这些在 Embedding 模型的训练数据里出现极少,向量表示很差;
  • 人名、机构名、专有名词:语义空间里区分度低;
  • 域外领域(医疗、法律、企业内部黑话):Embedding 模型没见过这些分布;
  • 精确短语匹配:用户明确要找某个确切说法。

BM25 无需训练和 GPU,也不需要文档向量化;但新文档仍需完成分词、倒排更新并达到引擎的可见性条件。精确短语、型号完整匹配还要配置分析器和字段,BM25 分数本身不保证词序或字符串完全一致。

BM25 是值得保留的对照组;是否上线这一路,取决于它新增的证据覆盖与维护成本。

11.2.3 学习式稀疏检索

有一类方法(如 SPLADE)试图兼顾两者:用模型学习稀疏表示,在保留倒排索引效率的同时做词项扩展(把「汽车」自动扩展出「车辆」「轿车」等相关词的权重)。

不能说学习式稀疏检索已被混合方案取代。SPLADE 论文给出词项扩展与稀疏正则化方案;Elastic 的 ELSER v2 官方文档也提供可部署的学习式稀疏检索。这不意味着 ELSER 等同于 SPLADE,或在中文上自动有效:官方建议 ELSER 用于英语资料。

它减少纯字面重合的限制,但引入编码推理、扩展词项与倒排存储成本。应比较 BM25、学习式稀疏、稠密及其组合;稀疏正则越强通常越省检索资源,也可能损失召回。

11.3 稠密检索:语义匹配

原理已在第六章展开,这里只强调它的失败模式:

失败模式 例子
罕见词表示差 型号、错误码、内部术语
否定语义弱 「不含糖的饮料」可能召回含糖饮料
数值与精确条件不敏感 「超过 500 元的报销」中的数值约束
域外泛化差 通用模型在专业领域表现下降
短 Query 信息不足 两三个词的 Query 语义模糊

BM25 可补充罕见词的词项匹配,但不天然理解“不含糖”、数值范围或模糊短查询。否定、单位、范围、时间和权限等硬条件应解析为可验证谓词;混合检索的依据是实测互补,而非宣称一方能解决另一方所有错误。

11.4 后期交互:中间路线

第六章 6.3.4 已介绍原理。这里补充它在检索范式中的定位:

%%{init: {"flowchart": {"nodeSpacing": 12, "rankSpacing": 16, "padding": 8, "wrappingWidth": 110}}}%%
flowchart TB
    A[BM25:字面] --- B[双塔:语义]
    B --- C[ColBERT:词级]
    C --- D[Cross-Encoder:联合]

连线用于比较方法,并不要求按此顺序组成流水线。BM25 速度快且无需训练,但字面匹配不理解同义词。稠密双塔速度快,能够处理包括同义词在内的语义相似性,但细粒度匹配较弱,可能遗漏区别。ColBERT 使用词级后期交互,以更高存储成本兼顾这些特性。Cross-Encoder 在查询时进行完整跨文本交互,不能缓存与 Query 无关的文档相关性分数。

后期交互保留 Token 级语义匹配,可能缓解单向量压缩造成的细节丢失,文档表示也仍可离线预计算。但它不保证型号、词序或数字约束精确成立,质量仍依赖训练和分词。

主要代价包括多向量存储、候选生成和细粒度匹配。ColBERTv2 的残差压缩可降低空间;应按向量数、维度、量化与索引开销比较,不能仅用“几百个向量”推出固定几十倍总成本。

11.4.1 视觉文档检索

后期交互在多模态方向上有一个重要衍生:直接对文档页面图像做多向量嵌入,用视觉语言模型编码页面,完全绕开 OCR 和版面解析(第三章 3.5 节)。

在版面复杂、图表密集的文档上,公开评测显示它优于「OCR + 文本嵌入」管线。

主要约束是多向量存储、图像编码和生成成本,以及区域级引用定位;应依据视觉语料比例与实测收益选择,不能由年份推断生产成熟度。

11.5 怎么组合

默认方案:BM25 + 稠密检索并行召回,用 RRF 融合,再接 Rerank。

它值得作为对照基线,原因是:

  • 覆盖了字面和语义两类匹配;
  • 每个组件都成熟、可独立调优、可独立降级;
  • 成本可控。
flowchart TB
    Q[Query] --> B[BM25 召回]
    Q --> D[稠密向量召回]
    B --> RRF[RRF 融合]
    D --> RRF
    RRF --> RR[Rerank 精排]
    RR --> TOP[Top-K]

什么时候考虑加第三路(后期交互):

  • 前两路 + Rerank 已经调到位,效果仍不达标;
  • 领域内的细粒度词级匹配确实很重要;
  • 存储成本可以接受。

如果没有这些条件,通常不必加。每多一路召回,就多一套需要维护、调优和监控的链路。

11.6 一个实用的判断方法

不确定该侧重哪一路时,做这个实验:

  1. 用评测集分别跑纯 BM25 和纯稠密检索,记录各自的 Hit@K;
  2. 重点看两者的 Query 分布——哪些问题只有 BM25 能召回、哪些只有稠密能召回;
  3. 分析这两类问题的特征。

这个分析结果会直接影响融合权重的设定,以及是否需要引入第三路。 它来自你自己的数据分布,通常比通用经验更有针对性。

11.7 常见错误

11.7.1 认为向量检索全面优于关键词检索

在术语密集领域经常相反。这一类 Query 往往更依赖字面匹配。

11.7.2 只用一路召回

单路可能在某类输入上持续较弱,但是否需要多路应看新增召回与成本,不能把单路设计本身判为错误。

11.7.3 把学习式稀疏检索说成已经淘汰

这是一条仍可使用的技术路线;要核实具体模型的语言、许可证、编码与索引成本,而不是用“主流/淘汰”代替比较。

11.7.4 把后期交互和 Rerank 混为一谈

后期交互与 cross-encoder 是交互架构,Rerank 是流水线阶段。重排既可以用 cross-encoder,也可以对多向量候选做精确 MaxSim;不能因为用于重排,就说文档表示一定不能预计算。

11.7.5 忽略后期交互的存储成本

需要将压缩后的载荷、索引开销、匹配计算和数据更新成本一起计入,不能只报向量数。

11.7.6 说视觉文档检索已经取代了 OCR 管线

它在特定视觉任务上有优势,但不能据此宣布全面取代 OCR;文本搜索、数字转录与合规引用仍可能需要 OCR。

11.8 本章总结

  1. 三种范式各自擅长不同类型的匹配,不是新旧替代关系;
  2. BM25 的三个直觉:词频、逆文档频率、长度归一化;
  3. BM25 是重要的词项检索基线;精确匹配依赖分析器与字段,新写入的可见性依赖索引引擎;
  4. 混合检索依赖实测互补,否定、数值范围与权限不能仅靠 BM25 或向量分数保证;
  5. 后期交互可离线预计算文档表示,但多向量匹配与索引增加成本;视觉版本减少显式 OCR 依赖;
  6. 常用基线:BM25 + 稠密 + RRF + Rerank;学习式稀疏和后期交互仍是可比较的替代或补充;
  7. 是否加第三路要靠实测:分析两路各自独占的召回 Query,比套用通用经验更有针对性。

参考资料

本章的参考资料、阅读建议与来源说明见集中参考资料章节。