基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

Bi-Encoder 和 Cross-Encoder 的区别,以及它们在 RAG 中的应用

知识点图片

Bi-Encoder (双塔模型) 和 Cross-Encoder (交互模型) 是自然语言处理 (NLP) 中用于计算两个文本句子相似度或相关性的两种主要架构。

在 RAG (检索增强生成) 系统中,理解它们的区别对于构建既快又准的检索流水线至关重要。


一、 核心区别 (Core Differences)

1. Bi-Encoder (双塔编码器)

  • 架构:将两个输入(如 Query 和 Document)分别送入两个独立的 BERT 模型(通常共享权重)。这两个模型互不干扰,各自输出一个句向量(Embedding)。
  • 计算方式
    1. Vector_A = BERT(Sentence_A)
    2. Vector_B = BERT(Sentence_B)
    3. Score = Cosine_Similarity(Vector_A, Vector_B)
  • 特点
    • 独立性:文档的向量可以预先计算并存储在向量数据库中。
    • 交互时机:仅在最后一步计算余弦相似度时发生交互。
  • 优点检索速度极快。适合在大规模数据集中进行初步筛选(ANN 搜索)。
  • 缺点精度相对较低。因为将长文本压缩成一个固定长度的向量会丢失细节,且 Query 和 Document 在编码阶段没有信息交互。

2. Cross-Encoder (交叉编码器)

  • 架构:将两个输入拼接在一起,作为一个整体送入同一个 BERT 模型。
  • 计算方式
    1. Input = [CLS] Sentence_A [SEP] Sentence_B
    2. Score = BERT(Input) -> Classification Layer
  • 特点
    • 全交互:Query 和 Document 的每一个 Token 在模型的每一层都在通过 Self-Attention 机制进行交互。
    • 不可预计算:必须知道 Query 是什么,才能和 Document 一起输入模型,无法预先存成向量。
  • 优点精度极高。模型能够捕捉到 Query 和 Document 之间细微的语义关系和逻辑匹配。
  • 缺点计算速度慢。每来一个 Query,都要和所有候选文档进行一次完整的模型前向传播,计算量巨大。

二、 对比总结表

特性 Bi-Encoder Cross-Encoder
别名 双塔模型 (Siamese Network) 交互模型 / 重排序模型
输入处理 两个句子分别独立输入 两个句子拼接后一起输入
向量存储 可以 (存入向量数据库) 不可以 (实时计算)
计算复杂度 低 (预存后只需计算点积) 高 (每次都需要完整推理)
检索速度 极快 (毫秒级) (秒级,取决于候选数量)
准确度 较好 (捕捉整体语义) 最好 (捕捉细微语义交互)
主要用途 召回 (Retrieval) 重排序 (Re-ranking)

三、 在 RAG 中的应用 (Application in RAG)

在生产级的 RAG 系统中,通常采用 "两阶段检索" (Two-Stage Retrieval) 策略,结合两者的优点:

第一阶段:召回 (Retrieval) -> 使用 Bi-Encoder

目标:从海量知识库(如 100 万篇文档)中快速筛选出最相关的 Top-K 个候选(如 Top 100)。

  • 工作流
    1. 预先使用 Bi-Encoder 将所有文档转化为向量,存入向量数据库(如 Milvus, Pinecone, FAISS)。
    2. 用户提问时,将 Query 转化为向量。
    3. 在向量数据库中进行近似最近邻搜索 (ANN)。
  • 为什么用它:因为 Cross-Encoder 无法在几毫秒内处理 100 万次对比,只有 Bi-Encoder 配合向量索引能做到。

第二阶段:重排序 (Re-ranking) -> 使用 Cross-Encoder

目标:从第一阶段筛选出的 Top 100 个候选中,精准找出最匹配的 Top-N 个(如 Top 5),喂给 LLM。

  • 工作流
    1. 获取 Bi-Encoder 返回的 Top 100 文档。
    2. (Query, Doc_1), (Query, Doc_2) ... (Query, Doc_100) 组成 100 个对子。
    3. 送入 Cross-Encoder 模型进行打分。
    4. 根据分数从高到低排序,截取前 5 个。
  • 为什么用它:向量检索(Bi-Encoder)有时会因为语义模糊或关键词缺失导致召回不准(例如“苹果”是水果还是公司)。Cross-Encoder 通过深度注意力机制,能精准剔除不相关的文档,显著提升 RAG 最终生成的质量。

四、 形象的比喻

  • Bi-Encoder (相亲角的简历筛选)

    • 你(Query)把你的条件写在纸上,所有相亲对象(Documents)也把条件写在纸上。
    • 红娘(算法)只看纸面对比(身高、学历、收入),快速从 1000 个人里挑出 50 个大概匹配的。你们还没见面。
  • Cross-Encoder (面对面约会)

    • 你和这 50 个人逐一见面聊天(Full Attention)。
    • 通过深入交流,你发现其中 45 个虽然简历匹配但性格不合,只有 5 个是真正合适的。
    • 这个过程很花时间,所以你不可能和 1000 个人都见面,只能先通过简历筛选。

五、 总结建议

在构建 RAG 时:

  1. 如果你的知识库很小(< 1000 条),可以直接用 Cross-Encoder 暴力扫描,效果最好。
  2. 如果知识库很大,必须使用 Bi-Encoder + 向量数据库进行初筛
  3. 为了解决“检索到了但 LLM 回答不对”的问题,强烈建议加入 Cross-Encoder (Re-ranker) 模块。目前很多开源模型(如 BGE-Reranker, Cohere Rerank)效果都非常好,只需极小的延迟代价就能大幅提升准确率。
00:00
00:00