【机器学习深度学习】向量模型与重排序模型:RAG 的双引擎解析
目录
前言
一、什么是向量模型
向量模型(Vector Model)
二、什么是重排序模型
重排序模型(Rerank Model)
三、向量模型与重排序模型对比表
四、向量模型与重排序模型在RAG中的应用流程
4.1 简化流程
4.2 RAG总体运行流程
五、应用场景
5.1 法律问答系统
5.2 医疗知识检索
5.3 金融知识库
六、RAG检索阶段核心平衡点
6.1 性能
6.2 精度
6.3 平衡点
七、RAG 中的重排序模型推荐
7.1 中文 & 英文场景模型推荐
7.2 LlamaIndex 中的重排序组件
7.3 小结
总结
前言
在检索增强生成(RAG, Retrieval-Augmented Generation)系统中,信息检索的质量直接决定了最终答案的准确性与可靠性。其中,向量模型与重排序模型扮演着两类互补的角色:一个负责“广撒网”,另一个负责“精挑细选”。本文将深入解析它们的区别、联系,以及在 RAG 流程中的协同工作方式。
一、什么是向量模型
向量模型(Vector Model)
-
核心作用:用来把文本(问题、文档)转换成向量,用于计算相似度。
-
代表方法:BERT embedding、Sentence-BERT、m3e、text-embedding-ada 等。
-
典型流程:
-
用户 query → 向量化。
-
文档库里的文档 → 向量化。
-
用相似度(余弦相似度、内积)计算 query 与文档的相关性。
-
取出 Top-k(比如 20 条)候选文档。
-
-
特点:
-
高效(向量检索能快速在大规模语料中找到候选)。
-
召回率高,但不一定精准。
-
更多是 粗排(初筛)。
-
👉 举例:
输入 query = “加班工资怎么算”,向量模型可能返回:
文档 A(加班工资法律条款)
文档 B(最低工资规定)
文档 C(带薪年假制度)
其中 B、C 可能相关性弱,但因为是高维语义空间的“近邻”,还是被召回了。
二、什么是重排序模型
重排序模型(Rerank Model)
-
核心作用:对候选文档进行 更精细的相关性判断与排序。
-
代表方法:BERT cross-encoder、monoT5、ColBERT(交互式)、各种 reranker。
-
典型流程:
-
向量模型取出 top-20 候选。
-
重排序模型逐个输入 (query, 文档) 对。
-
模型输出一个相关性分数。
-
按分数高低重新排序,取前 N 条(比如 top-5)。
-
-
特点:
-
计算量大(因为需要逐对计算)。
-
精准度高(能更好判断“语义相关” vs “语义相似但无关”)。
-
属于 精排(精筛)。
-
👉 举例:
上面 query = “加班工资怎么算” 的候选文档,重排序模型会排出:
文档 A(加班工资法律条款) ✅
文档 B(最低工资规定)
文档 C(带薪年假制度)
这样就保证用户看到的前几条是最相关的。
三、向量模型与重排序模型对比表
方面 | 向量模型(Vector Model) | 重排序模型(Rerank Model) |
---|---|---|
主要作用 | 初筛、召回候选文档 | 精排、精确排序 |
输入 | 文本 → 向量 | (query, 文档) 成对输入 |
计算方式 | 相似度(余弦、点积) | 模型预测相关性分数 |
效率 | 高,能处理海量数据 | 低,通常只在候选集上用 |
精准度 | 中等,可能召回噪声 | 高,能剔除伪相关 |
应用位置 | 检索第一步 | 检索后处理 |
一句话总结:
向量模型 是“广撒网”,帮你找潜在相关文档。
重排序模型 是“精挑细选”,帮你从候选里挑出最相关的。
向量模型:保证“不漏”。
重排序模型:保证“准确”。
四、向量模型与重排序模型在RAG中的应用流程
4.1 简化流程
用户Query│▼Query向量化 │▼向量检索(粗排,Top-K)│▼(可选)重排序(精排,Top-N)│▼相关文档拼接成上下文│▼LLM生成最终回答
4.2 RAG总体运行流程
1. 数据准备阶段(离线)
文档预处理:对原始资料进行清洗、切分(chunking)。
向量化存储:用 向量模型(embedding model) 将每个文档块转成向量,并存入向量数据库(如 Faiss、Milvus、Chroma)。
2. 在线问答流程
当用户提出一个问题(Query)时,RAG大致有以下步骤:
(1)Query 向量化
输入:用户问题(自然语言)。
处理:用同一个向量模型(embedding)将 query 转换成向量。
(2)向量检索(粗排)
在向量数据库里计算 query 向量与文档向量的相似度。
取出 top-K(比如 20 条)候选文档。
特点:快速,确保不漏掉相关内容,但可能有噪声。
(3)重排序(精排,可选)
使用 重排序模型(reranker,如 cross-encoder BERT/T5),逐个对 (query, 文档) 进行相关性打分。
重新排序候选文档,通常只保留 top-N(比如 3~5 条)。
特点:更精准,减少噪声。
(4)上下文拼接
把最终选出的文档内容拼接成一个“上下文窗口”。
形成提示词(Prompt):
用户问题:xxx 检索到的相关文档:doc1, doc2, doc3 ... 请基于以上文档回答。
(5)生成回答
把 Prompt 输入到大语言模型(LLM)。
LLM 利用检索到的知识生成答案。
五、应用场景
向量模型与重排序模型的组合已经在多个行业场景中落地:
5.1 法律问答系统
向量模型快速召回相关法规条款;
重排序模型确保最终结果严格对齐用户问题,避免出现相似但不适用的条款。
在法律问答中,用户可能会提出模糊问题,例如:“辞退员工需要补偿吗?”。
-
向量模型 会召回多类候选:劳动合同法、劳动仲裁案例、劳动补偿条款等。
-
重排序模型 则会精准识别出与“辞退补偿”直接相关的法律条款(如《劳动合同法》第四十七条),过滤掉不直接相关的内容。
-
结果:用户得到基于真实法规的回答,而不是模糊的解释。
5.2 医疗知识检索
向量检索能快速找到病症相关文档;
重排序模型帮助精准匹配症状与治疗方法,减少误导性信息。
患者提问:“糖尿病人可以吃什么水果?”。
-
向量模型 可能返回:糖尿病饮食指南、膳食均衡建议、不同水果的营养成分等。
-
重排序模型 会优先保留与“糖尿病 + 水果摄入”最直接相关的医学文献,而不是泛泛的营养知识。
-
结果:系统给出的答案更贴合患者需求,并避免产生误导。
5.3 金融知识库
向量模型召回各类政策、财务报告;
重排序模型确保匹配到的是用户关心的具体细节,而不是模糊的相似文本。
分析师提问:“最新的存款准备金率是多少?”。
-
向量模型 会检索到央行公告、历史政策解读、经济研究报告。
-
重排序模型 则会将“最新公告中的存款准备金率数值”排在最前,而不是泛化的背景信息。
-
结果:用户快速获取到最关键的数值型信息。
这些场景的共性是:既需要 覆盖广度(不漏掉关键信息),也需要 保证深度(答案足够精准),这正是向量模型与重排序模型协同的优势所在。
六、RAG检索阶段核心平衡点
在 RAG 的检索阶段,Embedding + 重排序模型的选择和组合,核心平衡点确实就是 性能(速度、算力消耗) 和 精度(检索结果的相关性、排序质量)。
具体来说:
6.1 性能
-
Embedding 模型:一般计算量相对小,可以快速批量生成向量,适合大规模检索。
-
Reranker 模型:需要对候选 (Query, 文档) 两两计算,成本远高于 embedding。
-
如果追求高性能,就要减少候选数量,或选用轻量级的 reranker。
6.2 精度
-
Embedding 粗排 → 能找到大体相关的候选,但结果里可能夹杂噪声。
-
Reranker 精排 → 让真正相关的内容排在前面,提高最终回答质量。
-
模型越大、训练越充分,精度通常越高。
6.3 平衡点
-
大模型 Reranker:精度好 → 适合离线处理、结果要求极高的场景。
-
小模型 Reranker:速度快 → 适合在线问答、用户实时交互的场景。
-
常见做法:Embedding(快速粗排) + 中等规模 Reranker(兼顾性能与精度)。
七、RAG 中的重排序模型推荐
7.1 中文 & 英文场景模型推荐
在中英文双语场景下,北京智源(BAAI) 出品的重排序模型表现很突出:
-
bge-reranker 系列(比如
BAAI/bge-reranker-large
,BAAI/bge-reranker-base
):-
针对中文和英文都有很好的适配能力;
-
在开放域问答、法律、医疗、金融等检索任务上效果稳定;
-
提供了不同规模的模型,方便按需权衡 精度 vs 性能。
-
👉 一般推荐:
在线问答:
bge-reranker-base
(更快,适合低延迟场景)离线知识库构建 / 高精度任务:
bge-reranker-large
(精度更高,适合对结果质量要求严格的应用)
7.2 LlamaIndex 中的重排序组件
在 LlamaIndex 里,可以通过不同的 Reranker 类来加载和使用这些模型:
🔹 SentenceTransformerRerank
依赖
sentence-transformers
库;可加载很多
transformers
/sentence-transformers
格式的模型;常用来快速接入 BAAI/bge-reranker-base 或 BAAI/bge-reranker-large。
使用示例:
from llama_index.postprocessor import SentenceTransformerRerankreranker = SentenceTransformerRerank(model="BAAI/bge-reranker-base", top_n=5
)
🔹 FlagEmbeddingReranker
-
针对 HuggingFace 上的 FlagEmbedding / BGE 模型优化;
-
对中文和英文的效果都很好;
-
是推荐的加载 BAAI/bge-reranker 系列的组件。
使用示例:
from llama_index.postprocessor import FlagEmbeddingRerankerreranker = FlagEmbeddingReranker(model="BAAI/bge-reranker-large", top_n=5
)
7.3 小结
-
推荐模型:中文 & 英文 →
BAAI/bge-reranker-base/large
-
推荐组件(LlamaIndex):
-
快速接入 →
SentenceTransformerRerank
-
专门优化 →
FlagEmbeddingReranker
-
-
选择逻辑:
-
在线、速度优先 →
bge-reranker-base
-
离线、高精度 →
bge-reranker-large
-
总结
在RAG中:
向量模型负责 召回候选文档(快速、覆盖广)。
重排序模型负责 精确筛选文档(精确、噪声少)。
LLM结合用户问题 + 文档上下文,生成最终答案。
RAG 的优势在于:
避免 LLM 直接“幻觉”,提升回答可信度;
支持动态知识更新,只需更新数据库而无需重新训练模型;
能在效率与准确性之间灵活取舍。
可以说,RAG 已经成为企业级大模型应用落地的首选方案之一。