重排(Reranking):交叉编码与两阶段检索

03-重排与上下文工程 核心 约 20 分钟 #重排#交叉编码#ColBERT#两阶段检索 更新 2026-10-02
当前状态:未学
本文基于模型知识整理(生成时未联网核对),关键结论建议对照经典文献复核。

一句话定义

重排用交叉编码器(查询与文档拼接后联合编码)对初检候选精细打分——因为两侧深度交互,判别力远强于双塔向量,但无法预计算,所以只能放在"粗召回 → 精排序"两阶段架构的第二级,用小候选集换取高精度。

为什么重要

向量检索是"用快换准"的妥协:top-50 里通常混着大量"向量相近但答案无关"的候选。重排把它们重新洗牌后,真正相关的才浮到前排——上下文(kp-014)只装得下 3–5 块,喂给 LLM 的是金子还是渣滓由重排决定。工业界共识:加重排是性价比最高的单点提升之一。

前置知识

kp-007(双塔为何快而糙)、kp-010(候选从哪来)。

核心概念

  • 双塔 vs 交叉编码:双塔各自编码、向量预计算,快但查询与文档无交互;交叉编码把 [CLS] 查询 + 文档拼接后过一遍完整 Transformer,注意力逐词交互,判别力强但每对都要一次前向——不可索引,只能在线对少量候选打分。
  • 两阶段架构:第一阶段粗召回(向量/BM25,取 top-50~200),第二阶段重排(交叉编码,选 top-3~10)。
  • ColBERT(late interaction):折中方案——文档的 token 级向量离线预计算,查询时做 token 级 MaxSim 匹配;保留部分交互精度,速度介于两者之间,可作第一级。
  • LLM 重排:用 LLM 对候选逐对判断(pointwise/listwise)打分;质量高但成本延迟大,多用于离线评测或对 top-10 内微调。
  • 商用重排 API:Cohere Rerank、各云厂商排序服务;开源常用 bge-reranker 系列交叉编码器。

原理与机制

为什么交叉编码更准:相关性判断本质是"查询的每个词与文档的哪些部分有关"——双塔把交互压缩进两个固定向量,信息瓶颈大;交叉编码让"视网膜脱落"直接关注到"治疗手段"段落,逐词对齐。评测上交叉编码的 NDCG@10 普遍显著高于同规模双塔,这正是"先双塔召回、后交叉精排"存在的理由。

候选窗口参数:重排候选数 n 与最终保留数 k 的选择是延迟预算问题。经验:n=50–100、k=3–8;n 增大边际收益快速衰减而线性增加延迟。评测时画 recall vs n 曲线找拐点。

级联的失败兜底:重排分数同时是"知识库里到底有没有答案"的信号——最高分仍很低(阈值判断)时可触发拒答(kp-015)或改写重试(kp-011),这是把检索失败显式化的关键机制。

图示

查询 ──► 第一级: 向量+BM25 粗召回 top-100   (毫秒级, 召回优先)
        ──► 第二级: 交叉编码重排 top-5        (十毫秒级/对, 精度优先)
        ──► 上下文组装(kp-014) → LLM
ColBERT: 文档 token 向量离线存 → 查询时 MaxSim → 精度/速度折中, 可当一级用

直观类比

招聘:双塔=HR 按关键词筛简历(快,容易漏看细节);交叉编码=技术面试官逐份精读候选(准,但一小时只能面几人)。所以流程是 HR 筛 100 份 → 面官精面 5 人——两阶段各司其职。

实例或案例

  • 生产 RAG 常见组合:bge/通用嵌入召回 100 → bge-reranker 或 Cohere Rerank 取 5 → LLM;A/B 显示端到端答案正确率提升常见于 10–30% 区间。
  • 低延迟场景(<1s 端到端):ColBERT 做一级 + 轻量交叉重排 top-20。
  • 拒答实践:重排最高分 < 阈值 → "知识库中未找到相关内容",而不是硬答。

常见误区

  • 误区一:"重排模型和嵌入模型同源更好"。不必;两者任务不同(召回 vs 精排),按各自评测挑最优,混搭是常态。
  • 误区二:"重排分数可以跨查询比较"。同一查询内排序有效,跨查询的绝对分数不可比(不同查询的分数分布不同);阈值判断要用校准集标定。
  • 误区三:"候选窗口越大越保险"。n 从 100 拉到 500 延迟翻倍而召回边际提升趋近于零;用评测曲线定 n,不凭感觉。

与其他知识点的关系

  • kp-007/010:第一级的构成。
  • kp-014:重排输出是上下文组装的输入。
  • kp-031:重排是延迟预算的主要消耗项,需缓存与裁剪。
  • kp-016:重排收益必须用检索指标(NDCG/MRR)量化验证。

自测题

  1. 交叉编码为什么不能做第一级检索?

答:查询与文档需拼接后联合前向,无法离线预计算与索引,亿级文档在线逐对打分延迟不可接受;只能在小候选集上用。

  1. 重排候选数 n 与保留数 k 怎么定?

答:用评测集画"召回/精度 vs n"曲线找拐点;经验 n=50–100、k=3–8,n 增大边际收益衰减而延迟线性增长。

  1. 重排分数还有什么用途?

答:作为"库中无答案"的信号触发拒答或改写重试;但阈值需按查询校准,不可跨查询硬编码。

延伸阅读

  • Khattab & Zaharia, "ColBERT: Efficient and Effective Passage Search"(SIGIR 2020)。
  • Nogueira & Cho, "Passage Re-ranking with BERT"(2019,交叉重排开山)。
  • Cohere Rerank / bge-reranker 模型卡。