Ch13 RAG修订于 二〇二六年七月六日

概念-ColBERT

一句话理解

ColBERT(Contextualized Late Interaction over BERT)是一种延迟交互检索模型,它的核心思想是:不对 query 和 document 各自压缩成单个向量,而是保留每个 token 的独立向量表示,在检索的最后阶段进行细粒度的 token 级交互,从而以接近 Cross-Encoder 的精度实现接近 Bi-Encoder 的速度。

核心创新:Late Interaction

传统检索模型的两极

检索模型存在一个经典的速度-精度权衡:

模型类型原理速度精度
Bi-EncoderQuery 和 Doc 各自编码成单向量,点积算分极快(可预计算 Doc 向量)较低(丢失细粒度信息)
Cross-EncoderQuery 和 Doc 拼接后同时编码极慢(每次查询需重新编码所有 Doc)最高
ColBERT多向量 + 延迟交互快(预计算 Doc 多向量)接近 Cross-Encoder

ColBERT 的解决方案

ColBERT 的核心创新在于保留 token 级别的向量表示:

Bi-Encoder 的做法:

Query: "什么是深度学习" → [CLS] 向量 → 一个 [1, d] 向量
Doc:   "深度学习是..."  → [CLS] 向量 → 一个 [1, d] 向量
→ 两个向量点积 → 相似度分数

ColBERT 的做法:

Query: "什么是深度学习" → [q1, q2, q3, ..., q_Nq] → Nq 个 [1, d] 向量
Doc:   "深度学习是..."  → [d1, d2, d3, ..., d_Nd] → Nd 个 [1, d] 向量
→ 每个 query token 找最相似的 doc token → sum of max → 相似度分数

Late Interaction 公式

ColBERT 的评分函数定义为:

S(q, d) = Σ_{i=1}^{Nq} max_{j=1}^{Nd} E_q(q_i) · E_d(d_j)^T

对于每个 query token 向量 q_i,找到所有 doc token 向量中与它最相似的那个(max),然后对所有 query token 的这些最大相似度求和(sum)。

这种 “先分别编码,后交互匹配” 的策略就是 “Late Interaction”(延迟交互)的含义。

为什么比 Bi-Encoder 好

Bi-Encoder 把整个文档”压缩”成一个向量,丢失了大量信息:

  • “猫追老鼠” 和 “老鼠追猫” 可能被编码成相似的向量(词袋模型问题)
  • 长文档的信息被平均化,细节丢失

ColBERT 保留了每个 token 的表示,在匹配阶段能捕捉到细粒度的语义对应关系。

为什么比 Cross-Encoder 快

Cross-Encoder 需要将 query 和每个候选 doc 拼接后送入模型,无法预计算。如果有 100 万个文档,就需要进行 100 万次完整推理。

ColBERT 可以预计算并存储所有文档的 token 向量(离线完成),检索时只需要:

  1. 编码 query(一次推理,~10ms)
  2. 计算 Late Interaction(纯矩阵运算,GPU 加速,~1ms 每 1000 个文档)

ColBERT vs Bi-Encoder vs Cross-Encoder 对比

维度Bi-EncoderColBERTCross-Encoder
编码方式Query/Doc 各自压缩为单向量Query/Doc 各自保留所有 token 向量Query+Doc 拼接后共同编码
Doc 向量预计算可以可以(存储多向量)不可以
存储开销低(1 x d 维/文档)高(N x d 维/文档,~100x)无需存储
检索速度极快快极慢
检索精度较低高(接近 CE)最高
交互粒度文档级Token 级Token 级
适合阶段粗筛(召回)精筛(召回/重排序)精排(重排序)
典型模型BGE, E5, GTEColBERTv2, ColBERT-V3BGE-Reranker, Cohere Rerank
2026年趋势主流召回方案高精度召回优选方案主流重排序方案

ColBERTv2:2026 年的实用版本

ColBERTv2 是 ColBERT 的改进版本,主要优化:

  1. 去噪训练:使用更难的反例(hard negatives),提升区分能力
  2. 残差压缩:将 token 向量压缩到更小的存储空间
  3. 查询增强:训练时对 query 做数据增强,提升泛化

2026 年,ColBERTv2 已被广泛用于需要高精度检索的场景:

  • 学术文献检索
  • 法律文档检索
  • 多语言检索
  • 代码搜索

2026 年:高精度检索的优选方案

2026 年,ColBERT 在检索领域的定位是:

  1. 精度优先场景:当 Bi-Encoder 精度不够,但又不能承受 Cross-Encoder 的全量检索成本时,ColBERT 是最佳平衡点
  2. 多向量检索的标杆:ColBERT 是 Late Interaction 范式的代表,后续的 SPLADE、PLAID 等模型都受其影响
  3. RAG 检索增强:在需要高精度检索的 RAG 系统中,ColBERT 作为召回模型或一级重排序模型
  4. 存储成本下降:随着 SSD 成本下降,存储多向量不再是瓶颈

技术细节

编码过程

Query 编码:
  Input: "什么是深度学习?"
  → BERT 编码
  → 归一化每个 token 的输出向量
  → 输出: [q_1, q_2, ..., q_n] (每个 token 一个 d 维向量)
  → 用 [Q] 标记 token 的输出作为后续使用的标识

Document 编码:
  Input: "深度学习是机器学习的一个分支..."
  → BERT 编码
  → 归一化每个 token 的输出向量
  → 过滤标点符号的 token
  → 输出: [d_1, d_2, ..., d_m] (每个 token 一个 d 维向量)

检索流程

离线阶段(索引):
  1. 对所有文档进行 ColBERT 编码
  2. 存储每个文档的多向量表示
  3. 构建向量索引(通常用 PLAID 引擎加速)

在线阶段(检索):
  1. 对 query 进行 ColBERT 编码
  2. 粗筛:用 token 向量做近似最近邻,召回候选文档
  3. 精筛:对候选文档做完整的 Late Interaction 计算
  4. 排序返回 Top-K 结果

适用场景

最适合的场景

  1. 高精度语义检索:需要精确匹配语义,而非简单关键词匹配
  2. 长文档检索:文档较长,Bi-Encoder 的信息压缩损失大
  3. 多语言检索:token 级匹配能更好地处理跨语言对应
  4. 学术/法律检索:需要高精度,文档量可控
  5. RAG 精筛阶段:在粗筛后对候选文档做精细排序

不太适合的场景

  1. 超大规模索引(1B+ 文档):存储开销大,Bi-Encoder 更经济
  2. 实时性要求极高:Late Interaction 仍有计算开销
  3. 短文本匹配:文档很短时,Bi-Encoder 和 ColBERT 差距不大

相关笔记

来源

关联7

知识图谱

局部图谱 · 点节点跳转