人人都会AI编程

交叉编码器(Cross-Encoder)重排原理

更新时间:2026-07-12

在 RAG 系统的检索环节,初筛通常由嵌入模型(双编码器)完成。它把问题和文档片段分别编码为向量,再通过余弦相似度等快速计算相关性,能从海量候选中高效召回 top‑k(例如 50~100 个)。但这种“分别编码再比对”的方式有一个先天不足:问题和文档在编码时没有互相看到对方,无法捕捉词语间的精确匹配、语序关系和细微语义差异。因此,初筛结果的排序往往不够精细——真正最相关的片段未必排在最前面。

交叉编码器(Cross-Encoder)的作用,就是对这些候选片段进行重排序(Re‑ranking),让最相关的内容优先进入生成环节。

1. 什么是交叉编码器

交叉编码器是一种同时接收句子对(问题与文档片段) 的模型。它将两个句子拼接成一个整体输入序列,通过 Transformer 等结构进行深度交叉注意力计算,最终输出一个相关性分数(通常是 0 到 1 之间的标量)。常用的开源模型如 cross-encoder/ms-marco-MiniLM-L-6-v2

因为模型能够逐词、逐层地对比两个文本的所有交互关系,其相关性判断的精度远高于基于独立向量相似度的方式。

2. 与双编码器的核心区别

| 特性 | 双编码器(Bi-Encoder) | 交叉编码器(Cross-Encoder) |
|------|------------------------|------------------------------|
| 编码方式 | 问题和文档分别编码 | 问题+文档联合编码 |
| 交互方式 | 仅在最终点积或余弦时交互 | 全网络深层交叉注意力 |
| 精度 | 较高,但可能丢失细节匹配 | 极高,擅长捕捉精确语义和语序 |
| 速度 | 快,可预先索引文档向量 | 慢,每次计算都需重新推理 |
| 典型用途 | 初筛召回(大规模候选集) | 重排精筛(小规模候选集,如 top‑k) |

这就是为什么不能直接用交叉编码器对全量库做检索——速度完全跟不上。实际工程中几乎都是双编码器召回 + 交叉编码器重排的组合。

3. 重排的工作流程

  1. 初筛阶段:双编码器从向量库中召回 top‑N(例如 N=100)个最相似的文档片段。
  2. 重排阶段:交叉编码器依次处理每个候选片段与用户问题的配对,输出相关性分数。
  3. 排序截断:根据分数对 N 个候选重新排序,保留 top‑K(例如 K=5)个最相关的送给 LLM。

这个流程在增加极小延迟(通常几十到几百毫秒)的情况下,可以显著提升最终提供给模型的内容质量。

4. 输入与输出的实际形态

以常见的 Sentence Transformers 库为例,使用交叉编码器的代码逻辑非常直观:

from sentence_transformers import CrossEncoder

model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
# 输入为 (问题, 文档片段) 的列表
pairs = [
    ("如何修改登录密码", "修改密码需在设置页面点击安全中心..."),
    ("如何修改登录密码", "账户注册需要填写手机号码..."),
]
scores = model.predict(pairs)
# 输出:[0.92, 0.11]  表示第一个片段与问题高度相关,第二个几乎不相关

模型内部会将两个句子拼接成 [CLS] 问题 [SEP] 文档片段 [SEP] 的形式,经过全部 Transformer 层后,取 [CLS] 对应的输出接一个线性分类头,直接预测相关性分数。

5. 实际使用中的考量

  • 速度与精度平衡:N 的大小可以根据延迟预算调整。通常 50~200 个候选就能覆盖绝大多数相关片段,且重排耗时仍在可接受范围(100 个片段约 100~300ms,视模型大小和硬件而定)。
  • 模型选择:优先使用针对相关性任务微调过的轻量级交叉编码器(如 6 层 MiniLM),而不是通用大模型。这类模型专为段落排序优化,推理快,分数校准好。
  • 多语言场景:挑选支持目标语言的多语言交叉编码器,或使用单语微调模型。
  • 分数阈值:可以为相关度设定最低阈值,过滤掉交叉编码器评分仍然很低的片段,进一步确保生成质量。

6. 为什么这个环节至关重要

双编码器的召回虽然迅速,但可能把“看起来相似”的片段排在高位。例如用户问“退款的到账时间”,相关片段讲的是“退款申请流程”虽然得分高,但真正包含“到账时间”的细节可能因为用词差异被排在后面。交叉编码器能敏锐识别这种意图与细节的匹配,把真正回答问题的片段提到最前,从而使 LLM 基于更准确的材料生成答案,减少答非所问或信息遗漏的情况。

在许多 RAG 系统的日志分析中,加入交叉编码器重排后,答案的事实准确性和用户满意度都有明显提升,是性价比极高的增强手段。