暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

论文导读 | 向量数据库中的关键技术及代表性工作简介

图谱学苑 2025-04-14
199

一、向量数据库在大语言模型时代的机遇和挑战

大语言模型及多模态技术的突破,推动了对海量非结构化数据(如文本、图像、视频)的语义检索需求,这使得以向量数据库为代表的高效检索技术成为关键技术支撑。以近期热门的检索增强生成技术(RAG)为例,如下图所示,其核心流程可分为两阶段:

RAG流程图

检索阶段:将原始数据切分并编码为统一语义向量,构建索引后通过相似性匹配快速获取与用户查询相关的内容。在这一阶段,通常的做法便是利用向量数据库;

生成阶段:将检索结果与上下文结合生成增强型Prompt,辅助大模型实现三大目标——通过实时知识注入减少"幻觉"、在保障数据隐私的前提下接入私有信息、动态融合最新数据以提升回答的准确性与实用性。

作为大语言模型的核心基础设施之一,向量数据库在RAG系统中发挥着关键作用——凭借其高效处理高维向量和快速相似性匹配的能力,精准定位与用户查询语义最相关的信息。但随着应用深化,检索质量(尤其是召回精度)已成为制约生成结果准确性与相关性的核心因素,向量数据库需承担更高精度的检索责任。当前,向量检索引擎在质量优化层面仍面临多种挑战:(1)多模态语义对齐:系统需要支持不同模态数据的索引构建和嵌入查询并能根据不同模态数据的特性执行融合查询(2)对召回操作和更新操作的快速响应:为了改善用户体验,查询召回操作需要在毫秒级别完成,同时还需要能够灵活扩展,支持更多的数据和更复杂的查询,还要保证返回结果的稳定性和多样性;(3)长尾查询的泛化能力:对低频、罕见或未见过的查询请求仍能保持高准确性和稳定性;(4)可解释性:当召回操作效果不理想或失败时,需要为用户提供足够的帮助信息,协助用户对问题进行定位和诊断。

可见,在向量数据库领域仍有许多开放问题亟待研究人员解决。因此,本文将从基本概念出发,简要介绍向量数据库中的关键技术和代表性工作。

二、向量数据库相关概念概览

本小节将从查询处理和索引存储两个方面介绍向量数据库的设计和实现中涉及的基本需求和相关概念。

2.1 查询处理

2.1.1 相似性度量

在向量数据库的查询算法设计中,如何定义两个多维向量之间的相似程度是基础性的问题之一。两个向量之间的相似性又通常被称为向量间的距离。两两向量之间的相似性度量的定义是探讨了多年的学术问题,由此诞生了一系列经典的向量距离定义,包括:

汉明距离(Hamming):,其中为Kronecker delta函数。汉明距离的计算简单直观,适合处理离散型的数据。

内积(Inner Product): 是非常常见的相似性度量定义。当使用内积进行向量相似度度量时,计算复杂度相对较低,并且能够感知向量方向和模的差异。

余弦相似度(Cosine Similarity) 衡量两个向量a和b的夹角大小。当执行向量模的归一化时,余弦相似度与内积等价。

Minkowski距离:p阶Minkowski距离的定义为 。当p=2时,Minkowski距离即为欧几里得距离,欧氏距离是最为常见的向量距离度量之一,适用于连续型的数据;当p=1时,Minkowski距离等价于曼哈顿距离,强调局部差异,适合稀疏数据;当p趋向正无穷,Minkowski距离等价于切比雪夫距离,即取各维度绝对差的最大值,更加关注极端差异,适合异常检测等问题。

Mahalanobis距离:,其中M是一个半正定矩阵,通常为协方差矩阵的逆,其作用为消除变量之间的相关性干扰,在异常检测中比较有效,但也在高维数据下面临计算复杂度过高的问题。

不同距离度量方法在特定数据分布与应用场景中呈现显著性能差异,这推动了复合型距离计算框架的研究进展。当前主流技术路径分为两类。其一是多度量融合,通过线性加权或动态选择机制整合多种基础距离度量(如欧氏距离与余弦相似度);其二是机器学习增强,采用元学习优化参数组合,甚至构建端到端模型直接生成相似性分数(如基于神经网络的度量学习)。

尽管已有诸多探索,如何自动选择最优相似性度量仍是核心挑战。当前行业实践(如Milvus、Pinecone等向量数据库)多采用折中的方案。即系统内置L2、Inner Product等常用度量计算函数,允许用户根据数据分布特征、业务需求与计算成本进行手动配置。而基于统计分析和数据驱动的自动推荐功能仍处于实验阶段。

2.1.2 查询类型

与传统数据库类似,向量数据库需要为用户提供修改数据和查询数据的操作接口,但其具体行为与传统数据库中的处理逻辑存在差异。

对修改操作而言,传统数据库通常直接对其中的数据进行修改。而在向量数据库中,一个向量本质上是对某个现实世界中实体的映射,用户可以直接修改向量数据的值,也可以通过选择不同的执行向量映射的模型和修改实体本身来间接地影响向量数据。

对查询操作而言,向量数据库中存在对多种不同的查询的支持需求。其中,最基础的查询需求是对给定的一个查询向量,返回在向量数据库中与其相似性最高(或距离最短)的向量集合。返回结果可以是精确的或近似的,并且通常允许用户对返回结果数量设置上限,即只返回前个相似性最高的结果。

随着实际应用的发展,基于相似性检索的向量数据库面临更多扩展查询需求。典型查询扩展包括:

  1. 属性过滤查询:部分应用场景中,每个向量关联一组用户定义的属性。查询时不仅需要定位向量空间中的相似集合,还需根据用户定义约束对结果属性进行过滤;

  2. 批量查询处理:为充分利用计算硬件的并发能力,需支持批量查询功能,允许同时处理多个查询请求,并基于特定规则返回结果(响应顺序可与请求顺序不一致);

  3. 多向量聚合查询:当查询对象扩展为一组向量时,系统需对多个向量执行相似性度量的聚合运算(如均值计算或加权融合),并返回综合相似度最高的结果。

2.2 向量索引的设计与存储

从一组向量中寻找与查询向量最相似的个向量的暴力方法是直接依次计算查询向量与中每个向量的相似性并记录相似度量前大的结果。当变大时,这种方法的计算代价将变得不可接受。常见的优化方式是使用中的向量构建索引,使得每次查找时只需要对的一个小子集进行相似度计算和比较。构建索引的过程可能存在对向量的映射和压缩,因此其输出结果不一定是精确的。如何构建、存储和查询向量索引,同样是向量数据库中的基本问题。从索引的数据结构形态上区分,常见的向量索引可以分为表格状(Table-like)、树状(Tree-like)以及图状(Graph-like)三种。

2.2.1 表格状索引

大部分表格状索引的核心思想是将一组向量中相互较为相似的一个子集利用特定函数(例如哈希函数、kmeans)映射到一个桶中。由于每个桶中的向量具有相似性,在查询时首先找到与查询向量近似的桶,以快速过滤与查询向量距离较远的结果。根据使用的分桶映射方法不同,又可以大致分为两类:

一类是基于哈希的索引,其中局部敏感哈希(Locality Sensitive Hashing)是现有系统中最为常见的解决方案。顾名思义,通过特殊设计的哈希函数,LSH将高维空间中相似的数据点以较高概率映射到相同的哈希桶(Bucket)中,而不相似的点则被分散到不同桶。LSH中的哈希函数的特别之处主要体现在其目标不是传统的追求数据映射后的均匀分布,而是希望映射后的哈希值满足若两个向量的距离越小,其哈希值冲突的概率越高。LSH的优势在于,通过调节LSH中的参数,用户可以在召回率和计算代价之间进行取舍;同时这种方法具有稳定的错误界限,可以通过维护多个不同的哈希函数和哈希表来提升查询的精度。LSH的主要限制在于其引入了大量的存储开销来维护多个哈希表,同时对不同分布的数据需要定制哈希函数,耗费较多工作成本。为此,后续的工作也尝试使用机器学习模型来代替人工定义和调参的哈希函数的办法,由于训练成本较高,这类方法并未得到现有系统的广泛支持。

另一类是基于量化(Quantization)的索引,其相较于LSH的显著改进在于量化技术能够大大减少存储开销。这类索引中得到最广泛应用的是IVFADC(Inverted File with Asymmetric Distance Computation)。它是向量检索中结合 倒排索引(Inverted File, IVF) 与 乘积量化(Product Quantization, PQ) 的高效近似最近邻(ANN)搜索方法。其核心目标是通过非对称距离计算和两级索引结构,在保证精度的前提下大幅降低计算与存储开销。

其中,乘积量化是指将高维向量(如128维)切分为m个子向量(如4个子块,每块32维)。然后对每个子空间独立聚类,生成k个码字(如k=256),构成子码本。最后用子码本索引(码字的ID组合)表示原始向量,若原来每维是32位浮点数,码字ID位8位整型,则压缩比可达1:32。

IVFADC示例

IVFADC索引的构建和基本结构如上图所示。它分为三步,即聚类分桶,对余量的乘积量化以及构建倒排档。

在聚类分桶时,算法使用一个粗粒度的量化器(通常是kmeans)对全量向量聚类,生成若干个粗粒度聚类中心。每个向量被分配到最近的聚类中心,形成倒排档索引。

在乘积量化时,首先计算每个向量减去其所属的粗粒度聚类中心的余量,对属于同一个粗粒度聚类中心的余量进行乘积量化,并保存到一个表格中。

在构建倒排档时,对属于同一个粗粒度聚类中心的经过乘积量化后的向量构建倒排档索引。

构建了上述索引后,其查询操作的执行首先要对查询向量进行粗粒度聚类,找到最接近的某个聚类中心或某几个聚类中心。对每个聚类中心,分别计算查询向量的余量,并根据乘积量化中的子向量划分方法计算查询向量的余量到各个向量的距离。这里不需要将查询向量进行映射,因此属于非对称距离计算。在计算过程中,通过维护最大堆便能够在遍历一趟之后得到结果。

2.2.2 树状索引

树状索引的核心思想是通过基于规则或数据驱动的方式,确定一种空间的划分方式,并且递归地进行空间划分直到满足某种终止条件,构成叶子节点代表的空间。例如经典的KD树方法是选择数据方差最大的维度,并取中位数或均值作为划分点,并递归地将左右子空间重复前述过程,直到子空间足够小(比如仅含有1个数据点)。

许多现有系统还支持另一种基于随机映射的树索引,ANNOY树。它的做法是在递归分割数据空间时,随机选择两个点A和B,计算两点中点C及其垂直平分超平面,最后将数据点按与超平面的相对位置划分到左/右子树。为了减少单棵树的偏差,通常需要构建多棵树以实现互补。

树状索引在向量维度较低时(对KD树通常小于等于8,对ANNOY树通常小于等于1000)具有查询速度快,内存开销低,查询结果精确度高的优点,但在处理高维向量时往往被基于图或量化的方法击败。

2.2.3 图状索引

图状索引将一个向量视为图中的一个顶点,通过一定的规则在顶点之间连边,使得对一个查询向量,从图中的一个或多个顶点出发,能够沿着图中的边不断逼近与查询向量相似的向量对应的顶点。例如在早年提出的k近邻图(k nearest neighbor graph)中,每个顶点与其距离最短的k个顶点相连。

由此可见,构造图状索引的关键在于如何确定两个顶点之间是否连边。在众多图状索引的方法中,HNSW(Hierarchical Navigable Small World)是当前性能最优的近似最近邻搜索算法之一,它是可导航小世界图NSW(Navigable Small World)的改进版本。其核心思想是构建多层分层图结构,通过高层图的“高速公路”快速定位目标区域,再逐层细化搜索,实现高维向量的高效检索。

NSW算法按顺序将集合中的向量代表的顶点随机插入图中,每次插入顶点时,将图中和被插入顶点最近的M个顶点连边。这种做法能够保证NSW图的联通性,同时通过引入随即顺序从一定程度上拟合图网络中的小世界属性,即图中的平均路径长度接近同等规模的随机网络,而聚类系数远高于随机网络的特点(NSW只是近似,并非保证满足条件)。

HNSW在NSW的基础上引入了跳表(Skip List)的思想加速了NSW图的搜索过程。对每个数据点随机分配一个层级,其中满足,其中为层级衰减系数,最低层包含全部的数据点。如此构造的HNSW图如下图所示,其中,每一层是一个NSW图,层越高,图越稀疏,顶点之间为长距离链接,用于快速导航;层越低,图越稠密,保留了顶点间的细粒度链接,用于精确搜索。

HNSW示例

在插入过程中,只需要为待插入顶点随机生成层级,然后在小于等于这个层级的层中按照NSW图的生成逻辑执行插入即可。在查询过程中,从最高层的入口顶点开始,在当前层沿边移动到距离目标更近的顶点,直到无法更优;从当前所在顶点为入口,进入下一层,重复搜索过程,直到最底层。在底层使用类似Beam Search的广度优先搜索返回Top k结果。

HNSW几乎被所有的向量数据库支持,它具有超高的检索效率和增量更新效率。而它构建时间较长和内存消耗较高的缺点在目前的AI应用中可以被容忍。

三、主流开源向量数据库简介

目前,向量数据库市场正处于百家争鸣的发展阶段,各类从支持泛用场景和海量数据到针对特定领域应用优化的向量数据库产品层出不穷,而现存的传统关系型数据库和NoSQL数据库也摩拳擦掌,纷纷下场,推出了对向量检索的支持。因此,本章节将简要介绍目前常见的向量数据库解决方案。

FAISS

FAISS(Facebook AI Similarity Search)是Meta(原Facebook)的AI研究团队开发的高效相似性搜索库,专门用于处理大规模高维向量的快速检索与聚类。它是向量检索领域最早得到广泛认可和部署的开源解决方案之一。FAISS的主要特点是提供了FLAT, IVF, PQ, HNSW等丰富的向量相似性索引供用户自由组合。同时,它支持利用GPU实行查询的并行计算,也支持多线程和批处理。在许多早期工作和轻量化的深度学习框架中对FAISS进行了集成。需要注意的是,FAISS本质上是一个向量搜索库(Library)而非严格意义上的数据库(Database),这意味着它缺少持久化、备份、一致性等功能,同时在分布式的支持上也只能提供有限的扩展性。

Milvus

Milvus是由国内团队主导的开源云原生向量数据库。它同样支持多种高效的向量索引和距离度量,同时提供了多种编程语言的SDK,方便用户与现有系统进行集成。除此之外,它的主要亮点是在可扩展性上较为优秀,支持水平扩展,采用分布式架构,因此可以应对大规模数据集的需求。它支持动态的数据增删改查,同时还提供多种企业级功能,包括持久化、容灾和故障恢复等等。因此,Milvus更适合在生产级的大规模应用下部署。也正是因为如此,Milvus的资源消耗和学习门槛都比较高。

Chroma

Chroma号称是专为AI原生应用设计的轻量级开源数据库,强调快速集成与简化开发流程。它主要服务的是需要结合大语言模型(LLM)的知识库增强(RAG)等场景。Chroma的优点是设计简洁,适合快速上手,方便用户快速的构造方案原型和小规模开发。作为代价,其在数据量大时性能有所下降,并且在功能层面缺少复杂的索引机制和客制化的索引构建选项,也缺乏内置的分布式能力。

Qdrant

Qdrant是近年来声名鹊起的高性能开源向量数据库。它的主要目标是平衡性能、灵活性和易用性,针对需要结合向量相似度检索和结构化数据过滤的场景。它提供了分布式部署、持久化和实时更新的能力。虽然在企业级功能层面不及Milvus等产品成熟,但它更适合中等数据规模下的敏捷开发。

著名数据库的向量查询扩展

除了独立的向量数据库以外,工业界的另一大风向是旧的传统数据库正逐渐向用户开放并优化其向量检索功能。例如,PGVector作为PostgreSQL的扩展插件,它适合需要在事务性数据管理和复杂查询中嵌入向量检索的场景(如结合用户画像与商品推荐)。它能够利用PostgreSQL这一底座为用户提供完整ACID的事务支持、分库分表方案和利用扩展的SQL语言进行查询等功能。除此之外,Redis、ClickHouse、MongoDB和Neo4j等都推出了向量查询的扩展模块。


欢迎关注北京大学王选计算机研究所数据管理实验室微信公众号“图谱学苑“
实验室官网:https://mod.wict.pku.edu.cn/
微信社区群:请回复“社区”获取


实验室开源产品图数据库gStore:
gStore官网:https://www.gstore.cn/
GitHub:https://github.com/pkumod/gStore
Gitee:https://gitee.com/PKUMOD/gStore

文章转载自图谱学苑,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论