Late-interaction 重排序(ColBERT 及更多)

架构 · 约 9 分钟阅读 ·

并非每个检索栈都需要 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 很值得。以下情况可考虑不加

经验法则: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 →

继续阅读