先给结论
在架构设计中,双塔模型与交叉编码器不是替代关系,而是各司其职的配合组合。面对海量文档的建库与初筛,必须选择双塔模型。它的文档向量可离线预计算并建立索引,能支持亿级数据的快速检索。当需要对初筛出的少量候选文档进行精准排序时,则选择交叉编码器,依靠词元级交互判定相关性。
工程标准链路是让双塔模型负责找得到,从全量库中粗筛出几百到几千篇候选文档;由交叉编码器负责排得对,对头部的几十篇文档重排,最后取前几名进入上下文。两者结合在吞吐与精度间取得平衡。
逐项对比
| 对比维度 | Bi-Encoder | Cross-Encoder |
|---|---|---|
| 定位 | 粗召回阶段 | 重排阶段 |
| 强项 | 检索快,支持离线预计算建索引,可扩展至亿级 | 词元级交互充分,相关性判定精度高 |
| 弱项 | 交互浅,无交叉注意力,精度有上限 | 无法预计算建库,吞吐低三个数量级 |
| 典型场景 | 从全量知识库中召回百千级候选 | 对初步召回的几十篇候选进行重排 |
| 成本 | 离线计算集中,在线检索计算量低 | 在线阶段每对文档需实时联合编码,计算量大 |
双塔模型与交叉编码器的核心差异在于查询与文档的交互时机。双塔模型让查询与文档分别独立编码成向量,通过计算向量距离得出相似度。这种架构允许文档向量离线完成计算并存入数据库,在线检索只需计算查询向量,速度快。但两者在编码阶段无词元级交叉注意力,交互浅,精度有上限。
交叉编码器将查询与文档拼接后联合输入模型,单次编码直接输出相关性分数。这种方式实现了充分的特征交互,精度高。代价是每对查询和文档都需要实时计算,无法提前建库,吞吐量比双塔模型低三个数量级。这就像看简历初筛与单面考核的区别,前者快但看表面,后者深但耗时。
在训练方式上,双塔模型常采用对比学习,依赖批次内的负例拉开向量距离。交叉编码器则依赖人工标注的相关性分数进行监督训练。实际应用中,两者经常使用同一个基础模型底座,只是顶部接入不同预测头适应不同任务。
面试怎么答
遇到此类选择题,建议先界定业务所处的检索阶段,再给出组合使用的标准方案。先说明由于计算复杂度差异,两者在架构中承担不同职责。接着阐述双塔模型用于粗召回,解决亿级数据下找得到的问题;交叉编码器用于精排,解决少量候选排得对的问题。
面试时的典型踩坑点是回答交叉编码器可以替代检索。必须明确指出交叉编码器算不起全量库数据,它只能用于精排少量候选。若强行用其进行全库比对,系统会因吞吐量过低而无法响应。