Ch13 RAG修订于 二〇二六年七月六日

Bi-Encoder (双塔模型/双编码器)

概述

Bi-Encoder (双编码器) 是一种双塔架构的神经网络模型,核心思想是将两个输入 (如 Query 和 Document、User 和 Item) 分别通过独立的编码器编码为向量表示,然后通过向量相似度计算来判断两者的匹配程度。

Bi-Encoder is the de facto standard architecture for retrieval-augmented generation (RAG) systems, recommendation systems, and any application requiring efficient large-scale similarity search.

架构原理

双塔结构

Query: "什么是Transformer"  →  [Query Encoder]  →  q_vec (768维)
Document: "Transformer是..."  →  [Doc Encoder]  →  d_vec (768维)

Score = cosine_similarity(q_vec, d_vec) = q_vec · d_vec / (|q_vec| * |d_vec|)

两个编码器共享或不共享权重,取决于具体任务。在检索场景中,通常使用相同的预训练模型分别编码 Query 和 Document。

训练目标

通常使用对比学习 (Contrastive Learning) 目标:

  • 正例: 相关的 Query-Document 对 — 拉近其向量距离
  • 负例: 不相关的 Query-Document 对 — 推远其向量距离
  • 损失函数: InfoNCE Loss / Triplet Loss / Multiple Negatives Ranking Loss
L = -log[ exp(sim(q, d+)/τ) / Σ exp(sim(q, di)/τ) ]

Bi-Encoder vs Cross-Encoder 对比

维度Bi-EncoderCross-Encoder
编码方式Query 和 Doc 分别编码Query 和 Doc 拼接后一起编码
计算方式向量点积/余弦相似度完整前向传播
交互方式浅层交互 (仅向量内积)深层交互 (Transformer 层间交互)
检索速度极快 (可预先计算文档向量)慢 (每对都要重新计算)
精度较低 (交互不充分)较高 (充分交互)
索引能力支持向量索引 (FAISS/Milvus)不支持预索引
典型场景RAG 第一阶段检索RAG 重排序 (Reranker)
代表模型Sentence-BERT, DPR, BGEmonoBERT, cross-encoder/ms-marco

典型应用场景

1. RAG 检索阶段

在 RAG (Retrieval-Augmented Generation) 系统中,Bi-Encoder 用于第一阶段的大规模召回:

用户问题 → Query Encoder → 查询向量 → FAISS 向量检索 → Top-K 文档 → Reranker → LLM 生成

企业知识库搜索、电商商品搜索等场景,Bi-Encoder 可以预先将百万级文档编码为向量并建立索引。

3. 推荐系统 (Recommendation)

双塔模型 (User Tower + Item Tower) 在推荐系统中广泛应用,如 YouTube DNN 召回模型。

4. 文本去重与聚类

编码后的向量可用于计算文本间相似度,完成去重、聚类、话题发现等任务。

训练策略

负样本构造

Bi-Encoder 的效果很大程度上取决于负样本质量:

  • In-Batch Negatives: 同一批次内其他样本作为负例 (高效但可能漏掉困难负例)
  • Hard Negatives: 使用 BM25 或上一轮模型挖掘出的困难负例
  • Cross-Batch Negatives: 跨批次共享负例 (GradCache 技术)

常用模型

  • Sentence-BERT (SBERT): 基于 BERT 的 Siamese 双塔结构
  • DPR (Dense Passage Retrieval): Facebook 的开放域问答检索模型
  • BGE (BAAI General Embedding): 智源研究院的通用 Embedding 模型
  • E5 / GTE: 微软和阿里巴巴的 Embedding 模型系列
  • Cohere Embed / OpenAI Embeddings: 商业 Embedding API

优缺点

优点

  • 检索速度极快,支持百万至十亿级向量检索
  • 文档向量可预先计算和索引,支持实时更新
  • 架构简单,易于部署和扩展
  • 与向量数据库 (FAISS, Milvus, Qdrant) 天然兼容

缺点

  • 精度不如 Cross-Encoder (缺少深层交互)
  • 对 Embedding 模型质量要求高
  • 领域适应需要额外微调
  • 不擅长处理需要精确匹配或复杂逻辑的查询

相关笔记

来源

关联13

知识图谱

局部图谱 · 点节点跳转