网易首页 > 网易号 > 正文 申请入驻

揭开RAG检索模型神秘面纱:谁是最佳选择?

0
分享至

构建RAG系统时,Bi-Encoder、Cross-Encoder、SPLADE、ColBERT这几个术语几乎都会在一起出现,表面上看它们都在做文本相似度计算但为什么需要这么多不同的模型?是一个不够用吗?

本文将拆解每种模型的工作机制、适用边界,以及如何在实际系统中组合使用。而核心问题是:高召回和高精准之间的平衡该怎么把握。



精准率与召回率

先厘清两个基础概念。



TP是真阳性,FP是假阳性,FN是假阴性。

高精准率意味着模型说"是"的时候基本不会错,假阳性极少但是是可能漏掉一些真正的正样本。这种策略偏保守,只有高置信度时才做出阳性判断。典型场景是垃圾邮件检测:被标记为垃圾邮件的必须真的是垃圾邮件。

高召回率则相反,目标是尽可能捕获所有正样本,假阴性降到最低但会混入不少假阳性。这个策略更激进一些,宁可误报也不漏报。

RAG检索实际上需要两者配合:第一阶段追求高召回,把可能相关的文档块尽量“捞”出来;第二阶段做语义重排序和过滤噪声来提升精准率。所以需要不同模型分工协作速度和准确度也是关键考量维度。

检索系统的核心矛盾在于规模和精度难以兼得:既要在百万级文档中快速搜索,又要准确判断哪些文档真正相关。单一模型无法同时优化这两个目标所以就出现了多阶段架构。

Bi-Encoder:大规模语义检索的基础

Bi-Encoder的思路很直接:用同一个编码器分别处理查询和文档,各自生成一个向量然后计算余弦相似度。

句子A → 编码器 → 向量A
句子B → 编码器 → 向量B
相似度(向量A, 向量B)

虽然叫"双编码器"实际上只有一个编码器,只是用共享权重分别编码两段文本。

Bi-Encoder的核心优势在于文档向量可以离线预计算。每个文档变成固定长度的向量后,存入FAISS、Milvus之类的向量数据库,查询时只需编码一次query然后做近似最近邻(ANN)搜索。

from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
model = SentenceTransformer("all-MiniLM-L6-v2")
doc_embeddings = model.encode(documents, normalize_embeddings=True)
index = faiss.IndexFlatIP(doc_embeddings.shape[1])
index.add(doc_embeddings)
query_vec = model.encode(["Only project owner can publish event"], normalize_embeddings=True)
scores, indices = index.search(query_vec, k=10)

所以它扩展性强、检索快、嵌入可复用。但缺点也很明显,查询和文档之间没有token级别的交互,相关性判断只能是近似的,遇到逻辑推理、否定表达、复杂约束时表现会打折扣。

Cross-Encoder:精度优先

检索器面对百万级文档需要的是速度,但快的代价往往是返回一些不太相关的结果。Cross-Encoder是用来解决这个问题的重排序器,把查询和候选文档拼接起来,一起送进Transformer,输出0到1之间的相关性分数。



Cross-Encoder不产生句子嵌入,也不能单独处理一段文本,所以它必须同时看到查询和文档才能工作:

[CLS] Query [SEP] Document [SEP] → Score

代码如下:

from sentence_transformers import CrossEncoder
model = CrossEncoder("cross-encoder/ms-marco-MiniLM-L-6-v2")
pairs = [(query, documents[i]) for i in candidate_indices]
scores = model.predict(pairs)

Cross-Encoder的准确度是最高的,能捕捉真正的语义相关性。问题在于它没法预计算,每次查询都要对所有候选做前向传递,计算成本高所以只适合处理小规模候选集。



Cross-Encoder适合处理预定义的句子对评分任务,比如手头有100对句子需要打分。而Bi-Encoder适合需要向量表示来做高效比较的场景。

比如说,用Cross-Encoder对10000个句子做聚类,需要计算约5000万对组合的相似度,耗时65小时左右。如果换成Bi-Encoder,先算嵌入只要5秒,然后就是聚类就是后续向量运算的事了。

所以Cross-Encoder精度更高而Bi-Encoder扩展性更好。实际系统中两者组合使用效果最佳:先用Bi-Encoder快速召回top-100,再用Cross-Encoder对这100个结果精排。

SPLADE:学习型稀疏检索

SPLADE是基于Transformer的稀疏检索模型,输出不是稠密向量,而是词汇表上的稀疏权重分布。可以理解成一个学出来的BM25。

稠密模型在处理ID、错误码、领域专有术语、合规性表述时往往效果不好。SPLADE的优势正是词汇层面的精确匹配能力,同时保留一定的语义理解。

它能学习词项的重要性权重,可解释性比稠密模型好。但是代价是索引体积比传统BM25大,语义表达能力不如纯稠密模型。适用于需要兼顾关键词匹配和语义召回的场景。

ColBERT:延迟交互机制

ColBERT在Bi-Encoder和Cross-Encoder之间找到了一个平衡点。它不是给整个文档生成单一向量而是为每个token生成一个向量查询时用延迟交互计算相似度:

score(query, doc) = Σ max cosine(query_token, doc_token)

这种设计保留了token级别的语义信息,精度比Bi-Encoder高不少,又比Cross-Encoder更容易扩展。细粒度匹配对长文档效果尤其好。

不过token级向量意味着索引体积膨胀,内存占用和延迟都会上升。适合基础设施条件允许、对精度要求高的场景。

多阶段混合架构

实际效果最好的RAG系统通常采用多阶段设计:

Query
├─ 稀疏检索(BM25/SPLADE) → 词汇召回
├─ 稠密检索(Bi-Encoder) → 语义召回
├─ Cross-Encoder重排序 → 精准率
└─ LLM生成

这套架构同时兼顾召回率(不漏相关文档)、精准率(相关文档排前面)和可扩展性。

不同场景的模型选择:



各模型的性能特征对比:



典型的流水线组合是稀疏检索(BM25或SPLADE)加稠密检索(Bi-Encoder)合并候选后用Cross-Encoder精排。

完整流程示意:

Query

├─ 编码查询(1次Transformer前向)

├─ 向量检索10000个嵌入(快速向量运算)

├─ 保留Top-20候选

├─ Cross-Encoder重排Top-20(20次Transformer前向)

└─ 返回3-5个最佳文档块



附:BM25与SPLADE对比



作者:

https://avoid.overfit.cn/post/bb49efa85b9141e1a9ab0e1d57855dc6

Sachchida Nand Singh

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
小史密斯回应“我们是更好球队”言论:这是你应该拥有的一种心态

小史密斯回应“我们是更好球队”言论:这是你应该拥有的一种心态

北青网-北京青年报
2026-04-30 20:53:21
24岁港姐亚军宣布港大硕士毕业,孝顺女回广州为妈妈庆生

24岁港姐亚军宣布港大硕士毕业,孝顺女回广州为妈妈庆生

TVB剧评社
2026-04-30 11:52:55
汉宣帝刘病已将西汉推向巅峰,功绩超过汉武帝,为何知名度却不高

汉宣帝刘病已将西汉推向巅峰,功绩超过汉武帝,为何知名度却不高

老范谈史
2026-04-30 09:34:57
外交部:中方在巴拿马有关港口问题上的立场是明确的

外交部:中方在巴拿马有关港口问题上的立场是明确的

新京报
2026-04-29 15:35:14
“王的微笑”:当特朗普与斯塔默矛盾公开化,查尔斯笑着把场子找了回来,然后呢?

“王的微笑”:当特朗普与斯塔默矛盾公开化,查尔斯笑着把场子找了回来,然后呢?

国是直通车
2026-04-29 12:26:14
赛季结束后,辽宁男篮10球员合同到期,谁会留下?谁会离开?

赛季结束后,辽宁男篮10球员合同到期,谁会留下?谁会离开?

男足的小球童
2026-04-30 19:07:05
60岁以后,存款到这个数,你其实已经算“低调有钱人”了

60岁以后,存款到这个数,你其实已经算“低调有钱人”了

心理观察局
2026-04-30 16:55:12
太扎心!72岁王健林被逼到崩溃,6000亿负债,连利息都快付不起了

太扎心!72岁王健林被逼到崩溃,6000亿负债,连利息都快付不起了

蜉蝣说
2026-04-30 11:59:18
新北市长选举,两组民调均显示李四川与黄国昌的蓝白合碾压苏巧慧

新北市长选举,两组民调均显示李四川与黄国昌的蓝白合碾压苏巧慧

阿天爱旅行
2026-04-30 20:22:42
涨薪后家暴妻子后续:抢走两个儿子,丈母娘下跪求放过,警方介入

涨薪后家暴妻子后续:抢走两个儿子,丈母娘下跪求放过,警方介入

奇思妙想草叶君
2026-04-29 21:59:52
巨亏87.48亿,闻泰或退市

巨亏87.48亿,闻泰或退市

芯火相承
2026-04-30 20:33:33
中超第9轮!执法北京国安的裁判又成为大家焦点

中超第9轮!执法北京国安的裁判又成为大家焦点

80后体育大蜀黍
2026-04-30 16:12:45
想不通!一个全明星,连续五年场均得分20+,为啥摆上货架没人要

想不通!一个全明星,连续五年场均得分20+,为啥摆上货架没人要

球毛鬼胎
2026-04-30 13:39:21
俄罗斯人大量涌入中国,却发现中俄差距越来越大

俄罗斯人大量涌入中国,却发现中俄差距越来越大

杰丝聊古今
2026-04-28 03:43:50
你最接近生理极限的一次经历是什么?网友分享让人目瞪口呆!

你最接近生理极限的一次经历是什么?网友分享让人目瞪口呆!

夜深爱杂谈
2026-04-09 19:39:13
中超无罚分积分榜:蓉城22分,申花20分,铜梁龙18分

中超无罚分积分榜:蓉城22分,申花20分,铜梁龙18分

懂球帝
2026-04-26 23:55:16
小因扎吉:如果国米赢欧冠我肯定不会走;我来沙特不是为了钱

小因扎吉:如果国米赢欧冠我肯定不会走;我来沙特不是为了钱

懂球帝
2026-04-30 14:35:12
美伊还没打完,第二个伊朗出现!对华使出卸磨杀驴,反向收割中企

美伊还没打完,第二个伊朗出现!对华使出卸磨杀驴,反向收割中企

浮光惊掠影
2026-04-30 01:59:28
有了特朗普这句话,中俄在中东可以大胆办事了!中国的阳谋太绝了

有了特朗普这句话,中俄在中东可以大胆办事了!中国的阳谋太绝了

爱吃醋的猫咪
2026-04-29 21:18:45
断档第一!《寒战1994》首日票房预测6000万,华语电影的大招来了

断档第一!《寒战1994》首日票房预测6000万,华语电影的大招来了

得得电影
2026-04-30 18:01:11
2026-04-30 21:44:49
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
1985文章数 1461关注度
往期回顾 全部

科技要闻

9000亿美元估值,Anthropic即将反超OpenAI

头条要闻

广州一段路泊位最高收132元/天 市民收万元罚单也不停

头条要闻

广州一段路泊位最高收132元/天 市民收万元罚单也不停

体育要闻

季后赛场均5.4分,他凭啥在骑士打首发?

娱乐要闻

孙杨博士学历有问题?官方含糊其辞

财经要闻

易会满被“双开”!

汽车要闻

专访捷途汪如生:捷途双线作战 全球化全面落地

态度原创

教育
时尚
本地
艺术
游戏

教育要闻

报考强基计划到底好不好?

缎面裙,时髦又高级!

本地新闻

用青花瓷的方式,打开西溪湿地

艺术要闻

安东·爱德华·基尔德鲁普:19世纪丹麦风景画家

以小野猪“宝瑞”的视角踏上温馨的大冒险《可爱冒险记》现已在PC及各大主机平台发售

无障碍浏览 进入关怀版