Embedding与Rerank
Embedding与Rerank
这是长期困扰我的一个问题, 在一个典型的RAG系统中, 通常会有几个设置:
- embedding模型
- rerank模型
- TopK, TopN
embedding我还是比较好理解的, 将内容打成向量, 然后可以在查找时通过 夹角大小/余弦相似度找到最接近的向量, 换言之完成了相似度
的寻找.
今天和Gemini老师, 聊了聊觉得很有收获, 在这里记录下
embedding
Embedding 是RAG流程的第一步,属于 “召回(Retrieval)” 阶段。
-
核心定义: Embedding是一种将离散的文本信息(如单词、句子、文档)转换为稠密、连续的数字向量(Vector) 的技术。这个向量可以被认为是文本在多维空间中的一个“坐标”,它捕捉了文本的语义信息。
-
在RAG中的目标:实现高效的语义相似度搜索。计算机无法直接理解“苹果”和“iPhone”有关联,但通过Embedding模型,这两个词的向量在空间中的位置会非常接近。这使得我们可以通过计算向量间的距离(如余弦相似度)来判断文本间的相关性。
-
工作流程:
- 离线索引(Indexing) :在RAG系统搭建时,我们会预先将知识库中所有的文档块(Chunks)通过一个Embedding模型(如 OpenAI的
text-embedding-ada-002
或开源的BGE
系列模型)转换成向量,并存入专门的向量数据库(Vector Database) 中。 - 在线查询(Querying) :当用户提出问题时,系统使用同一个Embedding模型将用户的问题也转换成一个向量。
- 向量检索(Search) :系统在向量数据库中,搜索与用户问题向量最“接近”的文档向量,并返回Top-K个(比如K=20)最相似的文档块。
- 离线索引(Indexing) :在RAG系统搭建时,我们会预先将知识库中所有的文档块(Chunks)通过一个Embedding模型(如 OpenAI的
-
关键特点:
- 快:向量检索非常高效,可以在毫秒内从数十亿的向量中找到最近邻。
- 广(高召回率) :它的目标是“宁可错杀,不能放过”,确保所有可能相关的文档都被包含在初步结果中。
- 语义理解:它超越了传统的关键词匹配,能理解“如何修复我的电脑?”和“我的笔记本无法启动”是相似的问题。
rerank
Rerank 是RAG流程的可选但强烈推荐的第二步,属于 “精排(Ranking)” 阶段,发生在Embedding召回之后,LLM生成之前。
-
核心定义: Rerank是一种利用更复杂的模型,对Embedding初步检索出的文档列表进行重新排序,以提高最相关文档排在最前面的概率的技术。
-
为什么需要Rerank? Embedding的“快”和“广”是有代价的。它有时会召回一些仅是主题相关但并非答案所在的文档。例如,提问“RAG中的Rerank模型有哪些推荐?”,Embedding可能会召回所有介绍RAG、Embedding和Rerank的文章,但Rerank模型的目标是精准地将那篇专门对比和推荐Rerank模型的文章排到第一位。
-
工作流程:
- 输入:Rerank模型的输入是用户原始问题和Embedding召回的每一个文档块。它是一个 (query, document) 对。
- 计算相关性分数:Rerank模型(通常是交叉编码器/Cross-Encoder)会同时分析问题和文档,输出一个精确的相关性分数(e.g., a score from 0 to 1)。这个过程比Embedding的独立编码要慢得多,因为它需要对每个文档和查询的组合进行深度分析。
- 重新排序:根据得到的相关性分数,对初步召回的文档列表进行降序排列。
- 筛选:只保留重排后分数最高的Top-N个(比如N=5)文档,传递给最终的LLM。
-
关键特点:
- 准(高精确率) :因为它同时考虑了问题和文档的交互,所以对相关性的判断非常精准。
- 慢:计算成本远高于Embedding。因此,它只适用于处理一个已经经过初筛的小批量文档(比如20-50个),而不是整个知识库。
- 降噪:能有效过滤掉Embedding召回结果中的“噪音”文档,为LLM提供更高质量、更专注的上下文信息,从而提升最终答案的质量。
TopK/TopN
这两个是参数,而不是模型。它们是用来控制流程中“数量”的“阀门”。在RAG流程中,我们通常会区分使用它们。
-
TopK (用于召回阶段):
- 作用: 这是Embedding模型检索后,返回的候选文档数量。比如,你设置
K=50
,意味着Embedding模型会从整个知识库中,找出与查询最相似的 50 个文档。 - 目的:
K
值通常设置得比较大。这是为了保证高召回率,即确保真正的答案大概率包含在这K
个结果中,给后续的Rerank模型提供充足的、高质量的候选材料。
- 作用: 这是Embedding模型检索后,返回的候选文档数量。比如,你设置
-
TopN (用于最终选择):
- 作用: 这是Rerank模型排序后,最终选择送给LLM的文档数量。比如,你设置
N=3
,意味着系统会从Rerank排序后的结果中,挑选出最顶部的 3 个文档。 - 目的:
N
值通常设置得比较小。这是因为LLM的上下文窗口(Context Window)是有限的,不能无限输入信息。选择最相关、信息最浓缩的N
个文档,可以获得最佳的生成效果,同时避免无关信息干扰LLM的判断。
- 作用: 这是Rerank模型排序后,最终选择送给LLM的文档数量。比如,你设置
-
区别 (Difference):
- 应用阶段不同:
TopK
用于召回阶段的输出,是Rerank模型的输入。TopN
用于精排阶段的输出,是LLM的输入。 - 数量大小不同: 通常
K
远大于N
(例如: K=50, N=3)。 - 目标不同:
TopK
关注“别漏掉”,TopN
关注“只给最好的”。
- 应用阶段不同:
embedding模型的评价
我们该怎么判断一个embedding是好还是坏呢? 有什么典型的评判标准呢?
以Qwen3新发布的embedding模型博客作为起点, 让我们继续看看.
Embedding模型的Benchmark主要围绕一个核心问题:这个模型生成的向量,能不能在各种任务中准确地衡量出文本之间的语义关系?
为此,业界建立了一套标准化的评测集和评测方法,其中最著名和最权威的就是 MTEB (Massive Text Embedding Benchmark) 。你在Qwen的博客中看到的MTEB-R
, CMTEB-R
等,都是基于MTEB体系的。
1. 核心评测任务分类
Embedding模型的评测不是单一维度的,而是涵盖了多种任务,以全面考察其能力。MTEB将这些任务分成了几个大类:
-
检索 (Retrieval): 这是最核心、最常见的任务,特别是在RAG场景下。
-
重排 (Reranking): 这个任务专门用来评测Rerank模型,但其原理与Embedding模型评测相通。
- 做法: 给定一个查询和一小组候选文档(通常是检索阶段的TopK结果),模型需要对这些文档进行精准排序。
- 评测指标: 同样使用nDCG、MAP等指标,但衡量的是对一个小集合的排序能力。
- 例子: Qwen的文章中明确区分了
Embedding
模型和Reranker
模型,并分别给出了评测结果。
-
分类 (Classification):
- 做法: 将文本向量化后,训练一个简单的分类器(如逻辑回归),看这个向量能不能很好地支持对文本进行分类(如情感分析、主题分类)。
- 评测指标: 准确率 (Accuracy) 或 F1分数。
-
聚类 (Clustering):
- 做法: 将一组文本向量化后,进行聚类算法,看语义相近的文本是否能被分到同一个簇中。
- 评测指标: V-measure 等指标。
-
语义文本相似度 (Semantic Textual Similarity, STS):
- 做法: 给定两个句子,模型输出一个相似度分数(通常是计算两个句子向量的余弦相似度)。将这个分数与人类标注的“黄金标准”分数进行比较。
- 评测指标: 皮尔逊(Pearson)或斯皮尔曼(Spearman)相关系数,看机器打分和人类打分的相关性有多强。
2. 标准化的评测数据集
为了公平比较,Benchmark必须在公开、标准的数据集上进行。MTEB整合了来自不同任务和语言的大量数据集。
- 多语言能力: Qwen的评测中特别强调了
MMTEB-R
(多语言) 和CMTEB
(中文),这表明现代的Embedding模型非常看重跨语言和多语言能力。 - 领域适应性: 除了通用文本,还会评测在特定领域(如代码、金融、医疗)的表现,例如
MTEB-Code
就是针对代码检索的。