双塔和交叉编码器的区别?为什么不直接用 cross-encoder 检索全库?
谁在问:有算法背景的面试官;是 Rerank 话题的深挖终点
口语化问法
- bi-encoder 和 cross-encoder 有什么区别?
- 既然 cross-encoder 更准,为什么检索阶段不用它?
- 有没有介于两者之间的方案?
考察意图
这题是 RAG 检索部分最能筛掉背题选手的一问。 很多人能背出「双塔快、交叉准」,但答不出「为什么快、为什么慢」。完整回答需要三层递进:机制差异 → 工程后果 → 架构结论。能走到第三层——说清「两阶段架构是成本约束下的必然」——的候选人是少数。
参考答案
60 分答案(及格线)
双塔(bi-encoder):query 和 document 各自独立过编码器,各得一个向量,再算余弦相似度。交叉编码器(cross-encoder):把 query 和 document 拼接后一起送进模型,让注意力在两者之间充分交互,直接输出一个相关性分数。
双塔快但精度有限,交叉编码器精度高但慢。所以工程上用双塔做第一阶段召回,用交叉编码器做第二阶段精排。
90 分答案(有生产经验的回答)
必须把「为什么」讲透,分三层:
第一层·机制差异:
双塔: query → [编码器] → 向量A ┐
├→ 余弦相似度
doc → [编码器] → 向量B ┘ (两者从未见过对方)
交叉: [query + doc] → [编码器 + 全交叉注意力] → 相关性分数
(逐 token 交互,无压缩无近似)第二层·工程后果(关键):双塔的 doc 向量可以离线预先算好存起来,查询时只需编码 query 一次,剩下的是纯向量检索,所以能在百万级语料上做到毫秒级。交叉编码器没法预计算——分数依赖 query-doc 这一「对」,query 来了才能算。要给 100 万文档打分,就得跑 100 万次模型推理。
第三层·架构结论:所以「为什么不全库用 cross-encoder」的答案不是「它慢」,而是它的计算量正比于候选数量且无法离线摊销。这决定了两阶段架构是成本约束下的必然选择:用便宜的双塔把范围从百万缩到一百,再用昂贵的交叉编码器在这一百里精挑。
精度差异的根因:双塔把每篇文档压缩成一个固定向量,压缩时丢掉的信息再也找不回来,它只能判断「这两段话大体像不像」;交叉编码器没有这个压缩瓶颈,能捕捉「问题里的『垫付』和文档里的『先行支付』是一回事」这类细粒度对应。
第三条路(加分):ColBERT 式后期交互——文档预先编码成一组 token 级向量(不压成单个向量),查询时做细粒度的 token 匹配。精度接近 cross-encoder,又保留了部分预计算能力;代价是存储开销大得多(每篇文档存一组向量而非一个)。它在大候选集场景下比纯 cross-encoder 更扛延迟。
追问链
双塔精度差的根本原因是什么?
期望信息瓶颈 —— 变长文本压成定长向量必然有损,且压缩时不知道未来会被什么 query 查,只能保留「通用语义」;交叉编码器是在已知 query 的前提下评估文档,信息利用率完全不同信号说到「压缩时不知道未来的 query」这层 → 理解很深cross-encoder 能不能预计算?提前算好所有 query-doc 对?
期望理论上可以,但 query 空间是开放的(用户能问任何话)→ 组合爆炸,不可行;只有 query 集合封闭且很小时才有意义,比如固定 FAQ 匹配信号立刻指出「query 空间开放」→ 逻辑清晰;答「可以先算好」→ 没想清楚ColBERT 的存储开销大概是什么量级?值得吗?
期望每篇文档存一组 token 级向量,存储可能是单向量方案的数十倍(取决于文档长度和是否降维/量化)。值不值看两条:候选集是否大到 cross-encoder 扛不住、存储成本能否接受 —— 多数中小规模场景直接两阶段更简单信号能说出「多数场景不值得」、把边界落在候选集规模上 → 有工程节制cross-encoder 变得非常快(小模型 + 硬件加速),架构会变吗?
期望变的是分界点而不是分层本身 —— 第一阶段候选数可以放大(100→1000),但只要计算量正比于候选数、无法离线摊销,全库精排在百万级以上仍不可行;分层检索是数据规模的必然,不是算力的临时妥协信号答「那就不用双塔了」→ 没抓住本质;能分开「分界点变」与「分层不变」→ 第一性思考直接用大模型给文档打分排序,不是比 cross-encoder 更准吗?
期望不是「更准就用」,而是按代价排序:LLM 做 rerank 确实可行、精度可能更高(语义理解与推理更强)→ 但速度和成本明显劣于专用重排模型 → 所以只给质量优先、量不大的场景,如离线报告生成、高价值查询;在线对话场景通常不划算信号一口咬定「LLM 一定更好」或「LLM 完全不能用」→ 都是绝对化;能给出边界 → 才算答对
评分要点
- 说清两者的编码方式差异(独立编码 vs 联合编码)
- 落点在「能不能离线预计算」这个工程后果
- 能解释双塔精度差的根因(定长向量的信息瓶颈)
- 能推出「两阶段是成本约束下的必然」这个架构结论
- 加分:知道 ColBERT 式后期交互及其存储代价
- 加分:能讨论 LLM-as-reranker 的适用边界
- 加分:理解分层检索是规模的必然而非算力妥协