Cross-Encoder
3 秒看懂
Cross-Encoder 是一种将两段文本拼接后整体输入一个 Transformer 编码器、直接输出一个相关性分数的模型架构。它与 Bi-Encoder(双塔)的核心区别在于:Cross-Encoder 在 Transformer 内部的每一层自注意力(self-attention)中都能看到 query 和 document 的全部 token,从而实现深度交互。精度高,但推理时无法预计算文档表示,速度慢一个数量级以上——因此在工业界主要用于 reranking(重排序) 阶段,而非第一轮检索。
3 分钟产业解释
为什么需要 Cross-Encoder?
现代检索系统(搜索引擎、RAG 问答、推荐系统)普遍采用两阶段管线(two-stage pipeline):
- 第一阶段:召回(Retrieval)——从百万级候选池中快速筛选出数百条候选结果。速度优先,常用 BM25(关键词匹配)、Bi-Encoder(双塔向量检索)或混合方案。
- 第二阶段:重排序(Reranking)——对召回的数百条候选精打细算,给出精准排序。精度优先,这正是 Cross-Encoder 的主战场。
Cross-Encoder 的价值在于:它是精度-成本曲线的上界参考。在给定候选集规模(通常 50–1000 条)下,Cross-Encoder 的排序质量显著优于 Bi-Encoder,代价是推理延迟从微秒级提升到毫秒-十毫秒级。
产业位置
在 RAG(Retrieval-Augmented Generation)管线中,Cross-Encoder 承接”粗筛→精排→生成”的中间环节。当前主流做法:
用户 Query → BM25/Bi-Encoder 召回 Top-K → Cross-Encoder Rerank → Top-K' → LLM 生成
Cohere Rerank、Jina Reranker、Voyage AI 等 API 均提供 Cross-Encoder 级别的重排序服务,按查询次数计费。在企业级搜索/问答场景,这一环往往是准确率提升最大且成本可控的杠杆点。
15 分钟专家深入
架构本质
Cross-Encoder 本身并不是一种全新的网络结构,而是一种输入范式(input paradigm)。它通常复用 Encoder-only Transformer(如 BERT、RoBERTa、DeBERTa 等),将 query 和 document 拼接为单一输入序列:
[CLS] query tokens [SEP] document tokens [SEP]
模型最后一层的 [CLS] 隐状态通过一个线性层映射为标量相关性得分。
与 Bi-Encoder 的本质差异
| 维度 | Bi-Encoder(双塔) | Cross-Encoder |
|---|---|---|
| 输入方式 | query 和 doc 各自独立编码 | query 和 doc 拼接后联合编码 |
| 注意力范围 | 各自内部 self-attention | query-doc 之间全层交叉注意力 |
| 文档表示可否预计算 | ✅ 可离线计算并索引 | ❌ 必须在线逐对计算 |
| 检索复杂度 | O(N + M),可近似 O(1) ANN | O(N × M) |
| 典型应用场景 | 第一轮召回 | 第二轮重排序 |
| 精度(以 MRR@10 或 NDCG@10 衡量) | 较低 | 显著更高 |
| 单次推理延迟(GPU,base 模型,512 token) | ~1–5 ms | ~5–50 ms/对 |
关键洞察:Bi-Encoder 丢失了 token 级别的细粒度交互。一个 query token 无法在编码阶段”看到”任何 document token,反之亦然——只能通过最终向量的点积做全局压缩匹配。Cross-Encoder 没有这个瓶颈。
为什么精度高?
Transformer 自注意力在每一层计算:
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V
当 query 和 document 拼接输入时,$Q$、$K$ 矩阵横跨两个文本的所有 token。这意味着:
- 第 1 层开始,每个 query token 就能 attend 到每个 document token,反之亦然。
- 到第 $L$ 层,信息已经过 $L$ 轮交叉融合,模型可以捕捉复杂的匹配模式(如否定、因果、推理链)。
- Bi-Encoder 仅有 单次点积 作为信息瓶颈(information bottleneck),其表达能力远弱于此。
推理成本的量级差异
设候选文档池大小为 $M$,查询数为 $N$:
- Bi-Encoder:文档侧编码一次(离线),总计算 ≈
M \cdot C_{\text{doc}} + N \cdot C_{\text{query}},在线检索可用 FAISS/ScaNN 等 ANN 索引,O(\log M)或 $O(1)$ 量级。 - Cross-Encoder:每对 (query, document) 需要完整前向传播一次,在线总计算 ≈
N \times M \times C_{\text{pair}}。
因此 Cross-Encoder 只能用于小规模候选集的精排,不能用于百万级语料库的直接检索。
技术原理
模型架构(以 BERT-base 为例)
┌─────────────────────────────────────────────────────┐
│ Input: [CLS] q1 q2 ... qn [SEP] d1 d2 ... dm [SEP]│
│ ↓ Token Embedding + Segment Embedding │
│ ┌───────────────────────────────────────────┐ │
│ │ Transformer Encoder Layer × 12 (base) │ │
│ │ - Multi-Head Self-Attention (full span) │ │
│ │ - Feed-Forward Network │ │
│ │ - LayerNorm + Residual │ │
│ └───────────────────────────────────────────┘ │
│ ↓ │
│ [CLS] hidden state (768-d for base) │
│ ↓ │
│ Linear(768 → 1) → sigmoid → relevance score ∈ [0,1]│
└─────────────────────────────────────────────────────┘
输入表示:
- Token Embedding + Position Embedding + Segment Embedding(query 段标记为 0,document 段标记为 1,是 Cross-Encoder 区分两段文本的关键信号)
- 最大输入长度通常 256–512 token(受计算量制约)
输出头:
- Pointwise:单样本得分,用 sigmoid + BCELoss 训练
- Pairwise:用 Margin-based Loss(如 BCE on score difference 或 Triplet Loss),训练时输入 (query, positive, negative) 三元组
- Listwise:对同一 query 的多候选做 softmax + CrossEntropy(更贴近排序目标)
训练数据范式
典型的监督信号来源:
- 人工标注:TREC、MS MARCO 等数据集提供的 query-document 相关性标签
- 弱监督:BM25 或 Bi-Encoder 的 Top-K 结果作为正样本(伪标签)
- 知识蒸馏:用更大的 Cross-Encoder(或 LLM-based reranker)的输出分数作为 soft label,训练更小更快的 Cross-Encoder——这是当前工业界高频使用的策略
- 对比学习辅助:在 Cross-Encoder 训练中加入对比损失作为正则化
推理优化技术
由于 Cross-Encoder 无法预计算,推理优化极为关键:
| 技术 | 说明 |
|---|---|
| Dynamic Batching | 将同一 batch 内多个 (query, doc) pair 一起推理 |
| ONNX / TensorRT 量化 | INT8 量化可降低延迟 2-4×,精度损失通常可控 |
| Early Exit | 浅层即可判断”明显不相关”的 pair 提前退出,节省计算 |
| Truncation 策略 | 对 document 截断到前 128/256 token,降低序列长度(牺牲少量精度) |
| Flash Attention | 降低长序列的显存和计算开销 |
| Speculative Reranking | 先用轻量模型粗排,再用完整 Cross-Encoder 对 Top-K’ 精排 |
技术演进史
| 时间 | 里程碑 | 说明 |
|---|---|---|
| ~2000s | BM25 / TF-IDF | 纯词法匹配,无语义理解 |
| 2013–2015 | Word2Vec / GloVe | 早期语义匹配:平均词向量 + cosine,表达力有限 |
| 2015–2018 | CNN/LSTM-based Sentence Pair Models | ESIM、DecompAttention 等,NLI 任务推动 pair modeling |
| 2018.10 | BERT 发布 | Encoder-only 架构 + NSP 预训练天然适配句对任务 |
| 2019 | Sentence-BERT (Reimers & Gurevych) | 明确对比 Bi-Encoder vs Cross-Encoder 范式;在 STS/MNLI 等任务建立基准 |
| 2019 | MS MARCO Leaderboard 催化 | 大规模检索基准推动 BERT Cross-Encoder 在 reranking 上成为 SOTA |
| 2020 | DeBERTa / ELECTRA | 更强的预训练目标带来 Cross-Encoder 精度进一步提升 |
| 2020–2021 | 蒸馏潮 | MiniLM、TinyBERT 等将 Cross-Encoder 蒸馏为更小模型 |
| 2022 | ColBERT v2 / Late Interaction | 介于 Bi-Encoder 和 Cross-Encoder 之间的折中方案出现 |
| 2023–2024 | LLM-as-Reranker | 用 GPT-4、Cohere Command 等 LLM 做 listwise reranking,精度高但成本高 |
| 2024–2025 | 开源 Cross-Encoder 蒸馏自 LLM | 如 RankGPT 思路→开源蒸馏模型,平衡精度与成本 |
产业趋势:Cross-Encoder 作为 reranker 的核心范式地位未被撼动,但 LLM-based reranker 在特定场景开始替代传统 Cross-Encoder,催生”LLM 教师 → Cross-Encoder 学生”的蒸馏范式。
技术路线对比
| 维度 | BM25 | Bi-Encoder | Cross-Encoder | Late Interaction (如 ColBERT) | LLM-based Reranker |
|---|---|---|---|---|---|
| 语义能力 | 无(词法) | 中等 | 强 | 中强 | 最强 |
| 交互粒度 | 词匹配 | 向量点积(全局) | token-to-token(全层) | token-to-token(仅最后一层) | 生成式推理 |
| 可预计算 | ✅ 倒排索引 | ✅ 向量索引 | ❌ | ✅(token-level 向量索引) | ❌ |
| 在线延迟(Top-100 rerank, GPU) | <1 ms | <5 ms | 5–50 ms | 10–30 ms | 100–2000+ ms |
| 典型 NDCG@10(MS MARCO Passage, 大致量级) | ~0.23 [估算] | ~0.34 [估算] | ~0.39–0.41 [估算] | ~0.37 [估算] | ~0.42+ [估算] |
| 部署成本 | 极低 | 低(GPU 推理 + ANN 索引) | 中(GPU 密集推理) | 中高(大索引 + 推理) | 高(LLM 推理) |
| 适用规模 | 百万–十亿级 | 百万–十亿级 | 百–千级候选 | 百万级(折中) | 十–百级候选 |
注:NDCG@10 数字为不同论文/公开排行榜中大致量级的估算,不同数据集、模型大小差异显著,此处仅用于定性对比。
上下游
上游:依赖什么?
- 预训练 Encoder 模型:BERT、RoBERTa、DeBERTa、ELECTRA、ModernBERT 等。预训练质量直接决定 Cross-Encoder 上限。
- 训练数据:标注好的 query-document 相关性对。MS MARCO(约 50 万 query,约 880 万 passage)、TREC DL 是标准基准。
- 第一阶段检索器:Cross-Encoder 自身无法检索,必须依赖 BM25 / Bi-Encoder / 混合方案先召回候选。
- 推理硬件:GPU(NVIDIA A100/H100 等)对高吞吐 reranking 至关重要;边缘/端侧可用量化后的小模型。
下游:被什么使用?
- RAG 管线:ChatGPT with retrieval、企业搜索、知识库问答的 reranking 环节
- 搜索引擎:Google/Bing 的 Learning-to-Rank 模块中,Cross-Encoder 类模型是候选排序器之一
- 推荐系统:多模态或文本侧的精排模型借鉴 Cross-Encoder 思路
- 对话系统:候选回复选择 / 对话检索
- 代码搜索:CodeBERT-based Cross-Encoder 用于 query-to-code reranking
关键指标
| 指标 | 含义 | 典型范围 |
|---|---|---|
| MRR@10 | 前 10 结果中首个正确结果的倒数排名均值 | MS MARCO 上 0.35–0.41 [估算,模型相关] |
| NDCG@10 | 前 10 结果的归一化折扣累计增益 | TREC DL 上 0.65–0.75 [估算] |
| Latency (p50/p99) | 单次 rerank 的中位数/尾部延迟 | GPU 上 5–50 ms/pair(base 模型) |
| Throughput | 每秒可 rerank 的 pair 数 | 取决于 batch size、模型大小、序列长度、硬件 |
| Model Size | 参数量 | 22M (MiniLM-L6) → 340M (DeBERTa-large) |
| Max Input Length | 支持的最大拼接序列长度 | 通常 256–512 token |
| Rerank Depth (K) | 从召回阶段接收的候选数 | 典型 50–1000 |
供需与市场数据
⚠️ 以下为定性分析和公开可得信息的汇总,非精确市场数据。
需求侧
- RAG 市场爆发:几乎所有企业级 AI 应用都包含检索增强环节,Cross-Encoder reranking 是精度提升的标准配置。
- 搜索/广告:Google、Bing、百度等搜索引擎的排序模块中大量使用 Cross-Encoder 或其变体。
- API 调用量:Cohere Rerank、Jina Reranker 等 SaaS 产品以 API 计费,反映下游需求旺盛。
供给侧
- 开源模型:
sentence-transformers库提供丰富的预训练 Cross-Encoder 模型(如cross-encoder/ms-marco-MiniLM-L-6-v2等),大幅降低使用门槛。 - 商业 API:Cohere Rerank、Voyage AI、Jina AI 等提供托管服务。
- 推理成本:一个 base 模型在 A100 上 rerank 100 条候选的延迟约 10–30 ms(估算),成本约 $0.001–0.01/query 级别(自部署,不含硬件折旧)。
竞争格局
Cross-Encoder 面临来自两个方向的竞争:
- LLM-based Reranker:GPT-4o / Command R+ 直接做 listwise reranking,精度可能更高但成本高 10–100×。
- Late Interaction 模型(如 ColBERT):在保持一定精度的同时支持预计算,延迟接近 Bi-Encoder。
代表公司与资本映射
| 公司/组织 | 产品/贡献 | 说明 |
|---|---|---|
| Cohere | Rerank API | 商业化 Cross-Encoder reranking 的代表,B 轮融资估值超 $50B [公开报道] |
| Jina AI | Jina Reranker / jina-reranker-v2 | 开源 + 商业 API 双模式 |
| Voyage AI | Reranker API | 获得融资,专注嵌入与重排序 |
| Hugging Face | sentence-transformers 库 | 开源 Cross-Encoder 训练/推理框架的事实标准 |
| Microsoft | MiniLM、DeBERTa | 提供高效 Cross-Encoder 的基础模型 |
| BERT → 私有排序模型 | 搜索排序中的 Cross-Encoder 思路 | |
| Meta | ColBERT 相关研究 | Late Interaction 路线的推动者 |
投资逻辑
看好因素
- RAG 管线中的刚需环节:只要 LLM 依赖检索增强,Cross-Encoder(或其衍生)reranking 就是不可或缺的精度层。
- 性价比优势明显:相比 LLM-based reranker,Cross-Encoder 的推理成本低 1–2 个数量级,适合高 QPS 场景。
- 蒸馏范式打通”大模型 → 小模型”的产业路径:用 LLM 的排序知识蒸馏到轻量 Cross-Encoder,兼顾精度和成本。
- API 化趋势:Reranking-as-a-Service 模式正在形成,如 Cohere Rerank。
风险因素
- 被 LLM 端到端替代:如果未来 LLM 推理成本大幅下降(如 100×),直接用 LLM 做 reranking 可能使独立 Cross-Encoder 层变得多余。
- 被 Late Interaction 替代:ColBERT 等方案在精度和延迟之间有更好的 trade-off,可能蚕食 Cross-Encoder 的份额。
- 头部效应:开源模型(sentence-transformers 生态)高度可用,商业化壁垒有限。
常见误读纠偏
误读 1:「Cross-Encoder 是一种独立的网络架构」
纠偏:Cross-Encoder 不是一种新架构,而是一种输入范式。它复用标准的 Encoder-only Transformer(BERT、RoBERTa 等),关键区别在于将两段文本拼接输入以实现交叉注意力,而非改变网络结构本身。真正改变架构的创新(如 ColBERT 的 token-level late interaction)才是新架构。
误读 2:「Cross-Encoder 可以替代 Bi-Encoder 做大规模检索」
纠偏:不行。Cross-Encoder 的推理复杂度是 O(N \times M)($N$ 查询 × $M$ 文档),无法预计算文档表示。对于百万级语料库,即使用最激进的量化和硬件优化,在线逐对计算也不现实。Cross-Encoder 只适合对 Bi-Encoder/BM25 已召回的少量候选(通常 50–1000)做精排。它与 Bi-Encoder 是互补关系,不是替代关系。
误读 3:「Segment Embedding 不重要,去掉也行」
纠偏:在 Cross-Encoder 中,Segment Embedding(token type embedding)是告诉模型哪些 token 属于 query、哪些属于 document 的唯一结构化信号。虽然位置编码在理论上也能部分区分,但实验表明去掉 Segment Embedding 通常会带来可测量的精度下降,尤其在短 query + 长 document 的典型场景下。
误读 4:「Cross-Encoder 只能做二分类(相关/不相关)」
纠偏:输出头的设计灵活。可以是二分类(sigmoid),也可以是回归(连续相关性分数),还可以用 listwise softmax 对多个候选同时打分并归一化。训练方式也多样化:pointwise、pairwise、listwise loss 各有适用场景,listwise 在排序目标上通常更优。
学习路径
入门(1–2 天)
- 阅读 Sentence-BERT 论文(Reimers & Gurevych, 2019)——建立 Bi-Encoder vs Cross-Encoder 的基本概念
- 使用
sentence-transformers库的 Cross-Encoder 示例跑通推理和评估 - 在 MS MARCO 数据集上评估一个预训练 Cross-Encoder 的 MRR@10
进阶(1–2 周)
- 阅读 ColBERT 论文(Khattab & Zaharia, 2020)——理解 Late Interaction 作为折中方案
- 阅读 RankGPT / LLM-based Reranking 相关工作——理解 LLM 教师蒸馏到 Cross-Encoder 的范式
- 自己实现 Cross-Encoder 的 pairwise/listwise 训练循环
- 尝试 ONNX 量化和 TensorRT 部署,测量 latency 吞吐
专家(持续跟踪)
- 跟踪 MTEB Reranking 排行榜上的最新模型
- 研究 multi-vector / late interaction 方案(ColBERTv2、PLAID 等)对 Cross-Encoder 的替代潜力
- 关注 LLM 推理成本曲线——这是决定 Cross-Encoder 长期竞争力的关键变量
一句话总结
Cross-Encoder 以 token 级全层交叉注意力 换取排序精度的上界,以无法预计算的 $O(NM)$ 代价限定在 reranking 环节——它是 RAG 管线中精度-成本 trade-off 最优的重排序方案,但其长期地位取决于 LLM 推理成本下降和 Late Interaction 技术的演进。
延伸阅读与来源
- Reimers & Gurevych (2019): Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks — 奠定 Bi-Encoder vs Cross-Encoder 对比框架
- Nogueira & Cho (2019): Passage Re-ranking with BERT — BERT Cross-Encoder 在 passage reranking 上的早期应用
- Khattab & Zaharia (2020): ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT — Late Interaction 折中方案
- Sun et al. (2023): Is ChatGPT Good at Search? Investigating Large Language Models as Re-Ranking Agent (RankGPT) — LLM-based reranking
- sentence-transformers 文档(https://www.sbert.net/cross_encoder.html)— 实践入口
- MTEB Leaderboard(https://huggingface.co/spaces/mteb/leaderboard)— 模型评测排行
- MS MARCO Leaderboard(https://microsoft.github.io/msmarco/)— 检索/reranking 基准
- ⚠️ 本页中的 benchmark 数字和市场数据为基于公开信息的估算,非精确定量数据,具体数值因模型版本、数据集版本、评测设置而异。