RAG学习总结2--向量数据库

📅 2026/7/8 4:33:07 👁️ 阅读次数 📝 编程学习
RAG学习总结2--向量数据库

一、向量数据库基础

向量表示:将自然语言、图像等非结构化数据通过嵌入模型转化为高维向量。向量的距离和方向能体现语义上的相似性。

向量数据库:专门存储高维向量及其元数据的数据库。核心能力是高效执行近似最近邻搜索,实现语义检索。

与传统数据库的区别:传统数据库依赖精确匹配或关键词索引,难以捕捉语义;向量数据库通过向量相似度实现“语义=向量距离近”的检索。

混合检索:实际项目中常将向量语义检索与标量过滤、全文检索等结合,先通过元数据过滤候选集,再进行向量相似度排序,或融合多种得分做最终排序。这样既能做语义理解,又能保证精确条件的匹配。


二、向量的核心概念

概念说明
向量维度向量的特征数量,如 384、768、1024。维度越高,表达能力越强,但计算与存储开销也越大。
向量长度(模)向量到原点的欧氏距离。如向量(3,4)的长度为 √(3²+4²)=5。长度有时蕴含文本长度、词频等信息。
向量方向向量的指向,是判断语义相似度的主要依据。常用度量有余弦相似度、内积、欧氏距离。

三、相似度度量与对比

余弦相似度

关心什么:只关心两个向量之间的夹角,完全忽略长度。

公式:cos(θ) = (A·B) / (||A|| ||B||),值域 [-1, 1]。

直观理解:两束从原点发出的射线,夹角越小越相似。哪怕一束长一束短,只要指向一致就是 1。

示例:A = [1,0], B = [2,0] 方向完全相同,余弦相似度为 1;A = [1,0], B = [0,1] 垂直,为 0。

内积

关心什么:方向 + 长度。公式为A·B = ||A|| ||B|| cos(θ)

直观理解:若两个向量同向且都很长,内积会非常大;若方向相似但都很短,内积较小。所以它偏爱“方向一致且信息强度高”的项。

适用场景:推荐系统中,热门物品的向量可能模长较大,内积会自然给它们更高打分,可以作为一种“热度加权”。

欧氏距离

关心什么:向量在空间中端点之间的直线距离,公式为√(Σ(Ai - Bi)²)

直观理解:两点越靠近越相似。它同时受方向和长度的影响,而且对绝对位置的差异敏感。

度量方式关心内容数值含义归一化后的等价形式适用场景
余弦相似度只关心方向,忽略长度越接近 1 越相似,取值 [-1,1]等于内积文本语义相似,长度差异无意义时
内积方向+长度数值越大越相似,无上界等于余弦相似度需同时考虑方向和强度时(如推荐系统中的打分)
欧氏距离方向+长度(绝对位置)数值越小越相似,≥0单调相关于余弦相似度(距离=2-2cosθ)向量空间绝对位置敏感的场景

归一化影响:将向量长度映射为 1,消除长度差异。此时欧氏距离、余弦相似度、内积可互相推导,选择哪个度量本质上等价。务必在存储和检索时使用相同的归一化方式。


四、近似最近邻搜索

4.1 为什么需要 ANN

在全量向量上逐个计算相似度的暴力检索(FLAT)虽然精确,但延迟高、资源消耗大。ANN 利用索引结构先快速缩小候选范围,再在小范围内精细比较,在可控质量损失下大幅提升速度。

4.2 常见 ANN 算法对比表

FLAT:即无索引,直接扫描。它提供 100% 精确的结果,是衡量其他 ANN 算法召回率的黄金标准,但只适用于万级以下的小数据量。

IVF(倒排文件)

如何工作:使用 K-Means 将全体向量聚成nlist个簇(桶),每个簇有一个中心点。查询向量到达时,先计算它与哪个桶中心最近,只去最近的nprobe个桶里暴力搜索。

参数含义:增大nlist,桶更细碎,检索时需探测更多桶才能维持召回率;增大nprobe,探测桶数增多,召回率上升但延迟也增加。它是最基础且广泛使用的加速结构。

HNSW(分层可导航小世界图)

如何工作:类似“高速公路+普通公路”的导航。构建多层图,最上层只有少数节点,边很长,供快速跳转;最下层包含所有节点,边稠密,负责精细定位。搜索时从上层随机点出发,贪婪地向最近邻居移动,逐层下钻,直到最底层。

关键参数:M(每个节点最大连接数)影响图密度和内存;efConstruction控制构建时搜索宽度,越大图质量越好;efSearch控制查询时搜索宽度,越大召回率越高。它无需训练,支持实时插入,但内存占用较高。

PQ(乘积量化)

如何压缩:将高维向量切成m段短向量,每段用独立的聚类算法生成k个代表向量(码本)。存储时,用每段最近的码本编号(整数)代替原始浮点数。例如,768 维切 96 段,每段用 256 个中心量化,存储从 768×32bit 变为 96×8bit,压缩 32 倍。

近似距离计算:查询时,预计算查询向量每段与对应码本所有中心点的距离,查表组合近似得出全向量的距离,速度快且无需解压。精度损失源于量化误差,可通过增加段数或码本大小缓解。

SQ(标量量化)

如何压缩:独立将每个维度的浮点值均匀映射到低位整数,例如 float32 转换为 int8,直接用数值范围缩放。

优点:简单,计算仍为整数运算,精度损失温和均匀。常作为快速降低内存的基础手段,或与 IVF/HNSW 结合。

算法原理精确度速度内存占用关键参数备注
FLAT暴力计算所有向量100% 精确低(仅存原始向量)基线算法,小数据或要求绝对精确时用
IVF聚类分桶,查询时只搜索最近的 nprobe 个桶近似(可调)中–快中(需存储聚类中心)nlist(桶数),nprobe(探测桶数)需训练,适合中等规模,常与其他技术组合
HNSW多层图结构,上层稀疏快速跳转,下层稠密精细搜索高(近似)极快较高(图连接开销)M(每层连接数),efConstruction(构建搜索宽度),efSearch(查询搜索宽度)无需训练,增量插入友好,内存占用较大
PQ (乘积量化)将向量分段,每段独立聚类量化,用短编码表示有损压缩,精度可调快(查表算距离)极低(压缩比高)子空间数m,每段码本大小k常与 IVF 结合为 IVF_PQ,大幅减少内存
SQ (标量量化)将每个浮点维度转换为低位整数轻微精度损失快(整数计算)低(如 float32→int8)量化位数简单有效,常作快速压缩手段

补充说明

IVF需要预先训练,生成桶中心;检索时增大nprobe可提高召回率,但增加延迟。

HNSW构建时efConstruction越大图质量越高但慢,查询时efSearch越大召回率越高。

PQ/SQ属于向量压缩技术,往往与 IVF 或 HNSW 结合使用,减少存储空间并加速距离估计。

PQ 与 SQ 对比

量化方式压缩原理压缩率距离计算精度影响典型应用
PQ分子空间聚类编码极高(可几十倍)预计算距离表查表有结构性误差大规模向量库,内存受限
SQ逐维度标量量化中等(2-4倍)直接整数运算均匀轻微降低需要保留较高精度的压缩场景

五、混合检索的实际形态

常见混合检索模式:

过滤+向量搜索:先根据标签、时间等标量条件过滤候选,再在过滤集合上执行 ANN,保证结果满足硬性约束。

多路召回+融合排序:同时进行向量语义召回和全文检索召回,将两路结果通过融合公式(如加权求和、互惠排名融合 RRF)合并排序。

向量与稀疏向量组合:使用稠密向量做语义,稀疏向量做关键词匹配,结合 BM25 等分数,实现语义和字面兼顾的检索。

这解决了纯语义检索可能遗漏精确词汇匹配的缺陷,是生产环境的标配。


六、检测指标速览

指标含义关注点
召回率 (Recall@k)前 k 个结果中相关项占所有相关项的比例是否找得全
准确率 (Precision@k)前 k 个结果中相关项的比例找得是否准
延迟 (Latency)查询响应时间(平均/分位数)用户体验与吞吐
成本 (Cost)内存/磁盘占用、计算资源消耗系统可扩展性
MRR (平均倒数排名)第一个相关结果排名的倒数,对所有查询取平均关注首个正确答案的位置
nDCG (归一化折损累计增益)考虑排序位置和相关度等级,对排序质量评价多级相关性下的排序质量

在实际项目中,常常需要根据业务需求在召回率与延迟、成本间取得平衡(例如调整nprobeefSearch等参数)。