什么是 双编码器(Bi-Encoder)?
双编码器(Bi-Encoder)是一种分别把两个输入编码为可复用向量,再通过声明的相似度函数比较这些向量的模型架构。
工作原理
架构与相似度契约
查询塔和文档塔需要输出兼容空间,但不必是同一个模型。非对称检索可以为短问题与长文档采用不同 Prompt、最大长度、Pooling 规则或权重。服务契约应记录两侧模型 Revision、Tokenizer、前缀、截断、Pooling、维度、归一化和 Metric。只有完整契约保持兼容,文档向量才可以继续复用。
对比学习与负样本
训练通常使用 Softmax 或 Margin Objective,提高标注 Query-Positive Pair 相对于 In-batch、挖掘或人工构造负样本的分数。Temperature 会改变分布尺度和集中程度,不只是服务阈值。
Easy Negative 可能提供的信息很少,False Negative 则会惩罚真实相关文档。因此 Hard-negative Mining 必须记录来源、去重、保留 Graded Label,并覆盖近重复、多语言与领域切片。原始 [DPR](https://aclanthology.org/2020.emnlp-main.550/)工作展示了开放域问答中的双编码器检索,但论文收益只属于其数据集与训练协议。
服务、迁移与评测
每个文档向量都应携带模型和预处理身份,并拒绝混用 Revision。迁移时通过 Dual-write 或重建 Shadow Index,对比候选重合度和标注 Recall@K,再验证 ANN Recall、延迟与下游证据后切流。必须在 Rerank 前评测 Candidate Recall,否则 Cross-Encoder 后的排序指标可能掩盖第一阶段漏召回。[Sentence-BERT](https://aclanthology.org/D19-1410/)建立了高效独立句向量路线,但当前生产质量仍取决于任务匹配训练、Chunk、语言和索引行为。
主要特点
- 在执行相似度比较前独立编码两个输入
- 允许文档表示预计算、写入索引并跨查询复用
- 可以使用共享、部分共享或非对称查询与文档塔
- 通常通过对比目标和经过审查的负样本训练
- 用较少 Pair-level Interaction 换取可扩展的第一阶段候选生成
- 要求查询塔、文档塔与预处理身份均和索引兼容
常见用途
- 从大规模文档或商品集合中召回候选
- 为向量索引生成可复用的文档 Embedding
- 在高成本 Reranker 前提供低延迟语义搜索
- 训练非对称问题到段落或文本到代码检索
- 把成对排序行为蒸馏到成本更低的第一阶段模型
示例
Loading code...常见问题
Bi-Encoder、Dual Encoder 与 Siamese Encoder 是同义词吗?
实践中经常混用,但强调点不同。Bi-Encoder 或 Dual Encoder 表示两个输入独立编码;Siamese 通常暗示权重共享,而 Two-tower 检索系统可以使用非对称或只部分共享的塔。
查询塔和文档塔必须共享权重吗?
不必。当两类输入分布相似时,共享权重比较自然;非对称任务可以采用不同 Prompt、Pooling、长度或参数,但训练必须让两侧输出落在兼容的评分空间。
为什么双编码器训练需要 Hard Negative?
随机负样本可能与查询毫不相关,几乎不提供排序信息;Hard Negative 暴露当前模型混淆的细微差异。但错误标注的 False Negative 会破坏训练,因此必须记录来源并做人工或规则质检。
双编码器相似度可以直接当概率阈值吗?
未经校准不可以。Dot Product 与 Cosine 会随模型、归一化、任务和候选分布变化。应只在声明的契约中排序,并使用留出工作负载数据校准任何阈值。
什么时候应在双编码器后增加 Cross-Encoder?
当第一阶段 Recall@K 足够但最终排序仍弱,并且延迟预算允许成对打分时,可以加入 Reranker。候选深度必须与质量和 p95 成本一起调优,不能照搬教程中的固定 Top-K。