RAG检索模型选型:Bi-Encoder、Cross-Encoder、SPLADE与ColBERT的技术对比
构建RAG系统时,Bi-Encoder、Cross-Encoder、SPLADE、ColBERT通常会同时出现。它们都用于计算文本相关性,但优化目标不同:有的追求规模与速度,有的追求精度,有的强调词项匹配,有的在交互粒度上折中。
核心问题只有一个:如何在高召回与高精准之间取得平衡。
一、精准率与召回率
在检索系统中:
- TP(True Positive):真阳性
- FP(False Positive):假阳性
- FN(False Negative):假阴性
高精准率(Precision)
- FP少
- 结果可靠
- 但可能漏掉部分相关内容
高召回率(Recall)
- FN少
- 尽量不漏信息
- 但可能混入噪声
RAG系统通常采用两阶段甚至多阶段架构:
- 第一阶段:高召回(尽量“捞”全)
- 第二阶段:高精准(排序过滤)
单一模型难以同时在“规模、速度、精度”三方面都达到最优,因此产生了分层架构。
二、Bi-Encoder:大规模语义召回基础
工作机制
Query和Document分别编码:
句子A → Encoder → 向量A
句子B → Encoder → 向量B
相似度(向量A, 向量B)
虽然称为“双编码器”,实际通常共享同一个Transformer编码器。
代表模型包括:
- Sentence-BERT
- BGE
技术优势
- 文档向量可离线预计算
- 支持ANN近似最近邻搜索
- 易于水平扩展
常见向量索引系统:
- FAISS
- Milvus
局限
- Query与Document无token级交互
- 对否定、逻辑约束、复杂语义表现有限
- 相似度是“整体近似”
适用场景
- 百万级以上语料检索
- 向量聚类
- 相似内容查找
- 第一阶段召回
三、Cross-Encoder:精度优先的重排序器
工作机制
Query与Document拼接后共同输入模型:
[CLS] Query [SEP] Document [SEP] → Score
典型实现基于:
- BERT
技术特点
- 全token交互
- 输出直接相关性分数
- 不生成可复用向量
- 无法预计算
性能对比示例
若对10000个句子做两两评分:
- Cross-Encoder:需要计算约5000万次前向
- Bi-Encoder:一次编码 + 向量计算
复杂度差异本质是:
- Cross-Encoder:O(N²)对比
- Bi-Encoder:O(N)编码 + 向量运算
适用场景
- Top-K精排
- 句对评分任务
- 小规模候选重排序
在RAG中常见模式:
Bi-Encoder召回Top-100
Cross-Encoder重排Top-20
四、SPLADE:学习型稀疏检索
SPLADE属于“神经稀疏检索”。
不同于稠密向量,SPLADE输出的是词表维度的稀疏权重。
可以理解为“可学习版BM25”。
对比传统方法:
- BM25
优势
- 保留词项精确匹配能力
- 对ID、错误码、专有术语效果好
- 权重可解释
局限
- 索引体积较大
- 纯语义泛化能力弱于稠密模型
适用场景
- 企业知识库
- 法规/合规文本
- 技术文档检索
五、ColBERT:延迟交互机制
ColBERT位于Bi-Encoder与Cross-Encoder之间。
工作机制
每个token生成向量:
score(query, doc) = Σ max cosine(q_token, d_token)
即“Late Interaction”。
代表模型:
- ColBERT
优势
- 保留token级匹配
- 精度高于Bi-Encoder
- 扩展性优于Cross-Encoder
- 长文档效果好
局限
- 索引体积膨胀
- 内存消耗高
- 延迟上升
六、多阶段混合架构(推荐方案)
实际工业级RAG系统通常采用混合架构:
flowchart TD
A[Query]
B1[稀疏检索
BM25 / SPLADE]
B2[稠密检索
Bi-Encoder]
C[候选集合合并]
D[Cross-Encoder重排序]
E[Top-K文档块]
F[LLM生成回答]
A --> B1
A --> B2
B1 --> C
B2 --> C
C --> D
D --> E
E --> F七、完整RAG流程示意
flowchart TD
A[Query]
B[编码Query
1次Transformer前向]
C[ANN向量检索
Top-10000]
D[筛选Top-20]
E[Cross-Encoder重排
20次前向]
F[返回Top-3~5文档块]
A --> B
B --> C
C --> D
D --> E
E --> F八、模型选择建议
| 场景 | 推荐模型 |
|---|---|
| 百万级语料快速召回 | Bi-Encoder |
| 精排优化 | Cross-Encoder |
| 强关键词场景 | SPLADE |
| 长文档高精匹配 | ColBERT |
| 工业级RAG | 稀疏 + 稠密 + 精排 |
九、结论
- Bi-Encoder解决规模问题
- Cross-Encoder解决精度问题
- SPLADE解决关键词问题
- ColBERT解决交互粒度问题
RAG检索架构的本质不是“选一个最强模型”,而是通过分层设计在不同阶段优化不同目标函数。
在工程实践中:
高召回负责“不漏”
高精准负责“排好”
多阶段架构负责“可扩展”
真正成熟的系统,通常不是单模型系统,而是协同系统。