Rerank是什么?为什么 RAG 一定需要 Rerank?

76 阅读4分钟

01 “RAG”的检索召回流程(快速回顾)

当你向 RAG 系统提出一个问题,系统会:

使用 Embedding 模型 将问题转换为向量。

在向量数据库中检索语义相近的文本片段(chunk),完成初步筛选。

然后使用 Reranking 模型 对这些候选 chunk 进行精排,挑选出相关性排名前几的 chunk,作为上下文和用户问题一起组成 prompt,供大模型生成答案。

图片

AI大模型全套学习资源【点击蓝字获取】

明明可以通过向量相似度筛选 chunk,为什么还要用Reranking 模型再“筛一轮”呢?继续往下看。

02 先熟悉一下两个模型的结构特点

Embedding 模型

模型结构: 常见为双塔结构(DualEncoder,也有单塔结构)

这种结构包含两个编码器,在训练时,分别将两段文本输入两个编码器,得到两个向量。再通过计算它们之间的相似度(如余弦相似度)判断这两个文本在语义上是否接近。

直观理解: 模型只关心每段文本分别“说了什么”然后判断它们“像不像”。

训练方法: 通常采用对比学习

训练数据由两类文本对组成

正样本对: 语义相近的文本对

负样本对: 语义无关的文本对

目标是让模型学会将正样本的向量距离“拉近”、负样本的向量距离“推远”,从而在向量空间中构建出具有语义分布的表示。

图片

使用方式

输入任意一段文本,模型输出其对应的语义向量。

要判断两段文本是否相关时,只需将它们通过模型分别编码成向量,计算相似度。相似度越高,语义则越接近。

Reranking 模型

模型结构: 常见为交叉编码器(Cross Encoder)

将两段文本拼接在一起作为一个整体输入模型。模型能同时“看到”两段文本中的每个 token,从而理解它们之间的关联和语义对应关系。

例如:

图片

直观理解: 模型不仅关心每段文本分别讲了什么,也关心它们之间的互动和语义对齐,例如是否在讨论同一主题或具有逻辑延续。

训练方法: 常见为回归打分任务

即为每个文本对预测一个相关性分数(一般在 0~1之间,例如 0.95 表示高度相关),目标是尽可能贴近真实得分。

使用方式:

将两段文本拼接后输入模型,输出它们的语义相关性分数。分数越高,代表语义匹配程度越强。

图片

03 “RAG”中为什么要两个模型配合?

到这一步,你可能已经猜到答案了

Embedding 模型: 适合做粗筛

它可以对海量文档的 chunk 提前离线编码,存入向量数据库。

用户问题(query)一来,只需对其编码一次,然后就能通过向量数据库快速计算相似度,从而检索并召回几十个候选 chunk。

效率极高,几十到几百毫秒即可完成,适合处理大规模数据。

Reranking 模型: 适合做精排

将用户问题和每一个候选 chunk 拼接后输入模型实时交叉编码,计算相关性得分。

由于 Reranking 模型的特点,能够更深入理解和捕捉文本的语义相关性。

图片

举个例子

“我爱吃蔬菜” vs “我以前爱吃蔬菜”

在 Embedding 模型看来可能相似度很高,但Reranking 模型则能更深入地比较其语义差异,看出“过去”与“现在”的差别。

在 RAG 中如果跳过粗筛直接使用 Reranking 模型,那意味着系统要对大量的文本实时进行交叉编码打分,这在实际应用中几乎不可能,计算量太大。

而如果跳过 Reranking 模型,则可能会出现一些“看起来相似但实际不相关”的 chunk 被错误地召回,不仅浪费了LLM 的 token,也影响回答的质量。

图片

04 认识几个常见的“Reranking”模型

BGE-Reranker: 由智源推出,支持多语言,开源,中文表现优异。

Cohere Rerank: 闭源,Cohere 提供商用 API,易于接入,适合企业部署。

monoT5:开源,基于 T5 架构的轻量级模型,英文表现强劲。