Late-interaction 重排序(ColBERT 及更多)
并非每个检索栈都需要 cross-encoder reranker。Late-interaction 模型(如 ColBERT)在保持嵌入可缓存的同时做 token 级交互打分 —— 往往比 bi-encoder 更合适,大规模下也比完整 cross-encoder 更省。
Late-interaction 是什么
bi-encoder 独立嵌入查询与文档 —— 快,但没有 token 级匹配。cross-encoder 将 query + 文档送入同一 transformer,输出单一相关性分数 —— 准,但每对都要完整推理。
Late-interaction 介于二者之间:离线预计算文档 token 嵌入,查询时用廉价交互(通常是 MaxSim —— 每个 query token 取最大余弦)在 query 与文档 token 间打分。比单向量点积更细,又不必对每对跑完整 cross-encoder。
Cross-encoder vs late-interaction vs bi-encoder
| 架构 | 预计算文档? | 查询时成本 | 典型用途 |
|---|---|---|---|
| Bi-encoder | 是(每 doc 1 向量) | 极低 | 百万级第一阶段召回 |
| Late-interaction(ColBERT) | 是(每 doc 多 token 向量) | 低–中 | 第一或 1.5 阶段;偏词面精度 |
| Cross-encoder reranker | 否 | 每对成本高 | 50–100 候选上的第二阶段 |
许多 2026 栈会串联:bi-encoder 或混合召回 → 可选对数百条做 ColBERT 重打分 → 对数十条 cross-encoder rerank。合并步骤见 混合检索 + 重排序。
何时跳过 cross-encoder rerank
短名单小(≤100)且排序质量影响下游 LLM prompt 时,cross-encoder rerank 很值得。以下情况可考虑不加:
- Late-interaction 已修好顺序。评测集上 ColBERTv2 或 SPLADE++ 已胜过纯检索 NDCG@10 —— cross-encoder 的边际收益可能很小。
- 延迟预算低于 50 ms。检索后无法再承受一次 transformer —— 改投更好嵌入或 late-interaction。
- 每查询候选极多。用 cross-encoder 重排 500+ 段很慢;先用 late-interaction 剪到 50。
- 指令型查询。新 API(如 Contextual AI 指令 rerank)把任务上下文融入分数 —— 通用 cross-encoder 无 prompt 工程可能更差。
- 多语言 + 强 bi-encoder。Qwen3-Embedding + 调优 reranker 可能够用;务必 用标注数据度量。
经验法则:Recall@50 低则先修检索 —— 没有 rerank 架构能变出缺失的 chunk。
ColBERTv2 实战
# Conceptual flow with pyserini / ragatouille-style tooling
# 1. Index token embeddings offline
# 2. At query time: MaxSim between query tokens and doc token vectors
# 3. Take top 50 for optional cross-encoder rerank
from ragatouille import RAGPretrainedModel
colbert = RAGPretrainedModel.from_pretrained("colbert-ir/colbertv2.0")
results = colbert.search(query="reset API key", k=50)
# Pass `results` to bge-reranker or Cohere for final ordering
ColBERT 在关键词密集语料(客服 KB、法律条款、SKU)上表现好,bi-encoder 易模糊精确 token。它不会在我们的浏览器 Demo 里跑 —— 推理路径不同 —— 但应列入你的 架构对比 清单。
如何选择架构
Millions of docs, tight latency?
→ bi-encoder (+ BM25 hybrid if lexical matters)
Recall OK but order noisy, 100–1000 candidates?
→ late-interaction (ColBERT) OR widen cross-encoder input
Top 50–100 need LLM-grade precision?
→ cross-encoder rerank (bge, Cohere, Jina, mxbai…)
Task-specific instructions in the query?
→ instruction-following hosted rerank (Contextual AI, etc.)
Unsure?
→ 30 labelled queries + NDCG@5 before/after each stage
新兴开源 cross-encoder 如 Qwen3-Reranker 在多语言栈上与 bge 竞争;需要规模与精度兼得时可与 late-interaction 组合。
在浏览器里看 cross-encoder rerank
Demo 展示第二阶段 cross-encoder 打分 —— 与 bi-encoder 代理列对比,看 late-interaction 或混合检索需补什么。
打开 Demo →