交叉编码器
交叉编码器(cross-encoder)是一类把两段文本拼接成单个序列、一并送入同一个 Transformer 网络并输出相关性或相似度分值的神经模型,常用于判断查询与文档、问题与答案、句子与句子之间的关系。它与分别独立编码两段文本的双编码器相对:由于两段文本在编码过程中通过自注意力互相“看到”,细粒度语义建模更充分,准确率通常更高,因而多用于检索结果的精排阶段;但每个文本对都要单独前向计算,无法预先建立可索引的向量,在候选规模很大时计算开销显著。
定义
交叉编码器是一种处理成对输入的神经网络模型,它把两段文本同时送入同一套编码参数,直接输出二者关系或相关程度的分值,而不是为每段文本单独生成向量[1]。它与双编码器(bi-encoder)构成对照:后者为给定句子分别生成句向量,再用余弦相似度之类的度量比较两个向量,交叉编码器则同时接收两个句子并给出一个介于 0 与 1 之间的输出值,用以表示该句对的相似程度[2]。
在句子转换器(Sentence Transformers)等工具库的语境下,交叉编码器被专门用于句子对评分和句子对分类任务,即以成对文本为最小输入单位[2]。由于它不产生可以离线索引的句子表示,单个句子无法直接输入交叉编码器[2]。
原理
交叉编码器的处理流程大致分为三步。第一步把两个待比较的文本按特殊标记拼接为单一序列,常见格式为 [CLS] 句子 A [SEP] 句子 B [SEP];第二步将该序列输入 Transformer 模型(如 BERT 或 RoBERTa),使自注意力机制在每一层同时建模两个文本之间的交叉作用;第三步取 [CLS] 位置的输出向量或池化后的联合表示,经全连接层得到评分。
用公式表示,设输入文本对为 A 与 B,拼接操作为 $C = \text{concat}(A, B)$,编码与打分可写成 $H = T(C)$,$s = \sigma(W H_{[CLS]} + b)$,其中 $T$ 为 Transformer 编码器,$\sigma$ 为激活函数,$s$ 为最终相似度或相关性得分。
关键差异在于交互发生的时点。双编码器的交互发生在编码之后,仅靠相似度度量比较两个向量;交叉编码器的交互发生在编码过程之中,依赖注意力机制逐 token 地关联两段文本。这种设计使模型能够捕捉句法、否定、数字等细粒度差别,因此在需要精确判断相关性的任务上表现更好。
训练上,交叉编码器以句子对及标注其语义相似程度的目标值为监督信号,目标可以是离散的类别标签,也可以是连续的相似度数值,模型顶部的分类头据此学习打分[3]。
发展历程
交叉编码器这一用法与预训练语言模型的重排序研究密切相关。2019 年 1 月,Rodrigo Nogueira 与 Kyunghyun Cho 提出把 BERT 改造成以查询为句子 A、段落为句子 B 的成对二分类模型,用 [CLS] 向量接单层网络估计段落相关概率,在 MS MARCO 段落检索任务上以 MRR@10 相对提升 27% 的成绩登顶当时的榜单[4]。该工作把查询截断至 64 个 token,并令查询、段落与分隔符合计不超过 512 个 token[4]。
同年,Nils Reimers 与 Iryna Gurevych 提出 Sentence-BERT,用孪生 BERT 网络生成可比较的句向量,并系统比较了交叉编码与双编码两类做法,指出交叉编码器精度更高但难以扩展到大规模比较[5]。此后,交叉编码器在检索流程中逐渐被定位为召回之后的精排组件:先由双编码器或 BM25 获取候选,再用交叉编码器对少量候选重排。
围绕其计算成本,后续研究提出浅层交叉编码器等做法,以便更高效地完成重排;也有工作尝试把交叉编码器的知识蒸馏到双编码器中,从而在保留较高精度的同时获得可索引的向量表示。
应用
最典型的应用是信息检索中的重排序。检索系统先用双编码器或 BM25 高效率地召回一批候选,再让交叉编码器对每个“查询—候选”组合打分并重新排序;SAP 的数据库产品中即以交叉编码器承担此类重排任务[1]。
在语义相似度与文本匹配任务中,交叉编码器用于判断两个句子是否语义相近,例如医疗、法律等对细微措辞差异较敏感的领域,一点改动就可能改变整句含义,因此更依赖精确的成对判断。问答与段落相关性判别也是其常见用途,即给定问题与段落,判断后者是否与前者相关。
在训练环节,交叉编码器还可充当数据标注与降噪工具:先用它对挖掘出的段落打分,仅保留得分低于阈值的样本作为双编码器的困难负例,从而提升负例质量[3]。此外,利用交叉编码器较早层隐藏状态所含的检索信号,可以构建层数更少、推理更快的双编码器。
局限
交叉编码器最突出的限制是不能生成可索引的句向量。它只处理输入对,无法为单个文档单独输出嵌入,因此在检索场景下既不能预先计算文档表示,也不能建立向量索引以支持高效搜索[1]。
由此带来的是计算成本随候选数量线性增长。每个文本对都要独立完成一次前向传播,处理大规模候选时开销迅速上升,难以满足实时检索的性能要求。以聚类为例,对 1 万个句子两两比较需要计算约 5000 万对相似度,在 BERT 架构下约需 65 小时,而用双编码器只需先算出每个句子的向量,数秒即可完成[2]。
输入长度也构成约束。多数模型的最大长度为 512 个 token,查询与文档拼接后超出部分会被截断,长文档需要先截断或改用支持长文本的模型[6]。此外,交叉编码器输出的分值是排序依据而并非概率,不同查询之间的分数不具可比性,通常只宜用于相对排序而非固定阈值过滤[6]。
结构性权衡还体现在精度与效率的对立上。交叉编码器在细粒度理解上准确率更高,但效率与可扩展性评分较低;双编码器精度稍逊,却可以预先计算嵌入,适合大规模检索。
参见
-
双编码器 —— 与交叉编码器相对的独立编码架构,可预计算句向量并支持大规模检索。
-
Transformer —— 交叉编码器通常采用的编码骨干网络。
-
BERT —— 常被改造为交叉编码器用于段落重排序的预训练语言模型。
-
信息检索 —— 交叉编码器主要作为其中的重排序组件使用。
-
Sentence-BERT —— 系统比较交叉编码与双编码两类句表示方法的代表性工作。
参考资料
- cross-encoder [引用日期2026-10-29]
- 交叉编码器 [引用日期2026-10-29]
- 技术干货:如何训练高性能语义表示模型——交叉编码器VS双编码器 [引用日期2026-10-29]
- Passage Re-ranking with BERT [引用日期2026-10-29]
- * Reimers & Gurevych (2019) Nils Reimers and Iryna Gurevych [引用日期2026-10-29]
- reranking [引用日期2026-10-29]