08RAG细节补充

alex
1
2026-03-16

一、稀疏向量

1. 核心定义

稀疏向量是一种在进行向量化(即将文本转换为数字)后,绝大多数维度上的数值都为 0,只有少数维度为非零值的向量。其稀疏向量检索指的就是向量化的关键字检索

2. 代表算法

  • 维度 = 词典:向量的每一个位置,代表词汇表中的一个词。

  • 数值 = 权重:非零位置上的数值,代表该词在文档中的重要性。最常见的权重计算方法是 BM25TF-IDF

    • TF-IDF:词频(Term Frequency)乘以逆文档频率(Inverse Document Frequency)。如果一个词在某篇文章中经常出现,但在整个语料库中很少出现,它的 IDF 就高,最终得分就高。

    • BM25:可以看作是 TF-IDF 的进阶版,加入了文档长度归一化等因子,是当前最常用的词袋检索算法。

3. 举例

假设词汇表为:[“苹果”, “香蕉”, “手机”, “电脑”, “好吃”, “价格”, “跑”, “跳”] (8个词)。

  • 文档1:“苹果好吃,香蕉也好吃。”

    • 向量化后(假设只是简单计数):[1, 1, 0, 0, 2, 0, 0, 0]。这是一个稀疏向量,大部分维度是0。

  • 文档2:“手机电脑价格。”

    • 向量化后:[0, 0, 1, 1, 0, 1, 0, 0]。这也是一个稀疏向量。

4. 优点与缺点

  • 优点

    • 可解释性强:能清楚地知道文档匹配了哪些具体的词。

    • 精确匹配:非常适合查询包含特定专有名词、ID、型号的场景(如“iPhone 15 Pro Max”)。

    • 无需训练:基于统计,开箱即用。

  • 缺点

    • 词汇鸿沟:如果查询词是“计算机”,而文档里写的是“电脑”,由于词汇不同,匹配度为0,尽管它们语义相近。

    • 高维但稀疏:存储和计算虽然可以利用稀疏性优化,但维度本身很高。

二、稠密向量

1. 核心定义

稠密向量是几乎所有维度上都有非零值的向量。它通过深度学习模型(如BERT、Sentence-BERT)将文本编码到一个低维度的、连续的语义空间中。常见维度为 128、384、768 或 1024。一般与模型的支持的维度是对应的。其稠密向量检索指的就是向量化的语义检索

2. 技术本质与实现

  • 本质:将文本的语义压缩成一个固定长度的向量。

  • 实现:使用预训练的语言模型。

    • 输入:一段文本。

    • 输出:一个浮点数数组(稠密向量)。

    • 目标:让语义相近的句子,在向量空间中的距离也相近(如余弦相似度高)。

3. 举例

  • 查询:“用于办公的便携式计算机”

  • 文档:“这台笔记本电脑非常适合商务人士出差使用。”

在稀疏向量中,“计算机”和“电脑”可能匹配不上,“办公”和“商务”也可能匹配不上。但在稠密向量中,模型理解了“便携式计算机”和“笔记本电脑”是近义词,“办公”和“商务”是相关概念,因此这两个句子的稠密向量在高维空间中是彼此靠近的。

4. 优点与缺点

  • 优点

    • 语义理解强:能够处理同义词、近义词、语义关联,解决词汇鸿沟问题。

    • 低维:相比稀疏向量的几十万维,几百维的稠密向量计算速度更快(在 ANN 索引中)。

  • 缺点

    • 可解释性差:不知道向量里每个数字代表什么。

    • 数据偏差:依赖训练数据,对罕见的专有名词、ID或冷门术语可能效果不好。

    • 需要微调:通用模型在特定领域(如医疗、法律)通常效果不佳,需要收集数据进行微调。

    • 空间占用较大

三、混合检索

1. 核心定义

混合检索是指同时使用稀疏检索算法(如 BM25)和稠密检索算法(向量相似度)来召回候选文档,然后将两者的结果合并。

2. 为什么要混合?

因为稀疏检索和稠密检索的优缺点恰好互补:

  • 稀疏检索:擅长关键词匹配(高精度),不擅长语义泛化(低召回)。

  • 稠密检索:擅长语义泛化(高召回),对生僻关键词可能匹配不准(低精度)。

混合检索的目的是取长补短,既保证能精准找到包含特定关键词的结果,也能召回那些语义相关但用词不同的结果。

四、多向量检索

1. 核心定义

与“单向量”(将一段文本编码为一个向量)不同,多向量检索是指将一篇文档(或一个查询)编码为多个向量。

2. 技术本质(以 ColBERT 模型为例)

最著名的多向量模型是 ColBERT(Contextualized Late Interaction over BERT)。

  • 文档处理:将文档中的每个词(或Token)都通过 BERT 编码成一个向量。因此,一个长文档会变成一组向量(一个向量包)。

  • 查询处理:同样,将查询中的每个词也编码成一个向量。

  • 评分:计算查询的每个向量与文档的所有向量的最大相似度,然后求和。这被称为“后期交互”。

3. 为什么需要多向量?

传统的单向量(Sentence-BERT)是将整个句子压缩成一个点,这个过程会丢失细节(比如到底是哪个词产生了匹配)。多向量保留了每个词的向量:

  • 高细粒度:可以精确捕捉查询中的“词”与文档中的“词”是如何匹配的。

  • 缓解信息丢失:比如查询“苹果手机”,如果文档是“苹果很好吃”和“手机很好用”,单向量可能都会匹配,但多向量能更精准地定位到同时包含两者或强相关的段落。

  • 效果更好:在多向量模型中,即使查询是“信息技术”,文档是“计算机科学”,两者没有共同词,但模型依然可以通过各自的上下文向量计算出它们高度相关。

五、RRF(倒排融合)本质与作用

1、本质:

RRF的本质其实就是一个公式,主要作用就是将来自你不同检索方式的得到结果排名以一个统一的量纲标准进行衡量和排序。

2. 数学原理

给定多个不同检索方法(如 BM25 和 向量检索)返回的候选文档列表,对于每个文档 dd,计算一个组合得分:

RRFscore(d)=∑ 1/k+rand(k)

  • R:所有参与融合的检索方法的集合。

  • rank(d):文档 dd 在某种检索方法返回列表中的排名位置(从1开始)。

  • k:一个平滑常数(通常设为 60)。

3. 作用与优势

  • 作用:将多个不同来源的检索结果合并成一个新的、更准确的排序列表。

  • 优势

    • 对分数不敏感:BM25 的分数和向量余弦相似度的分数不是一个量级,无法直接相加。RRF 只看排名,不看原始分数,完美解决了“苹果和橘子如何相加”的问题。

    • 稳定性高:只要一个文档在某个检索方式中排名很高,它在 RRF 中的得分就会很高。

    • 提升整体效果:如果一个文档在 BM25 中排第5,在向量检索中排第10,它在 RRF 中可能会超过那些只在单一方式中排第1但在另一种方式中没召回的文档。

六、稀疏向量检索、稠密向量检索、混合检索、RRF、reranker模型的关系和实际前后顺序

典型的检索和精排过程

用户查询

[ 检索阶段 (Recall) ] ---------------------> 目标:从海量数据中快速找到几千个候选

├── 1. 稀疏向量检索 (BM25) --> 结果集A

│ (擅长精确匹配)

├── 2. 稠密向量检索 (ANN) --> 结果集B

│ (擅长语义匹配)

└── 3. 多向量检索 (ColBERT) --> 结果集C (可选,通常作为第二阶段重排)

(擅长细节匹配,但速度较慢,有时直接用作重排)

[ 融合阶段 (Fusion) ] ---------------------> 目标:将多个结果集合并去重

└── 4. 混合检索结果的合并

└── 使用 RRF (倒排融合) 算法

└── 输入:结果集A、B (以及可能的C)

└── 输出:一个统一的、长度为几千的候选列表 Top-N

[ 精排阶段 (Re-ranking) ] -----------------> 目标:对少量候选进行精细化排序

└── 5. 输入:RRF 融合后的 Top-K (例如前200个)

└── 使用 Cross-Encoder (Reranker) 模型

└── 将查询和每个文档一起输入模型,计算一个精确的相关性分数 (0~1)

└── 输出:最终的、高度精准的 Top-10/20 结果

[ 最终结果 ]

问题

1、为何要使用RRF

答:为了将来自不同检索方式的结果统一在一个标准量纲下

2、reranker模型计算分数的原理

答:reranker本质就是一个cross_encoder(交叉编码)模型,会讲各个问题和答案依次凭借输入到全连接层后得到一个分数。然后将得到的所有分数按照高低排序取前K个

3、为何有了RRF的结果还需要使用reranker做精排呢?

答:原因在于RRF只是将结果统一在一个标准下/量纲中。是基于原来各个检索方式中文档的排名来实现的。并没有关注到语义本身的排序和问题间的关联是否与实际排名相符,所以还需要基于语义的筛选即需要reranker的精排过程

动物装饰