最近两年,AI数据库(也叫向量数据库)越来越火。
随着大模型和AI应用的普及,向量数据库成了技术圈的热门话题。不管是做RAG(检索增强生成)、推荐系统、图像搜索,还是语义搜索,都需要用到向量数据库。
但很多人对向量数据库的理解,还停留在"就是存向量的数据库"这个层面。对于它的底层原理、核心机制、适用场景,了解得并不深入。
这篇文章,我想深入剖析一下AI数据库的原理。从向量表示、相似度计算、索引结构,到查询优化、数据更新、分布式架构,尽量讲清楚它的底层机制,帮助大家真正理解AI数据库是怎么工作的。
什么是AI数据库
在深入原理之前,先搞清楚什么是AI数据库。
传统的关系型数据库,存储的是结构化的数据,比如表格、行、列。查询的时候,用SQL语句,根据精确匹配或者范围查找来检索数据。
而AI数据库,存储的是向量。向量是什么?向量就是一串数字,比如[0.1, 0.5, -0.3, ...],它是对数据(文本、图像、音频等)的数学表示。
比如,一段文本,可以通过大模型的Embedding模型,转换成一个1024维的向量。这个向量包含了这段文本的语义信息。语义相近的文本,它们的向量在空间中的距离也相近。
所以,AI数据库的核心能力,不是精确匹配,而是相似度检索。给一个查询向量,它能快速找出数据库中和这个向量最相似的若干个向量。
举个例子,你有一个知识库,里面有很多文档。你把每个文档都转换成向量,存在向量数据库里。当用户问一个问题的时候,你把问题也转换成向量,然后在向量数据库里找出和问题向量最相似的几个文档,把这些文档作为上下文,一起发给大模型,让大模型基于这些文档来回答问题。这就是RAG的基本原理。
所以,AI数据库本质上是一个专门用于向量相似度检索的数据库。它和传统数据库的核心区别,就是存储的数据类型和查询方式不同。
向量表示:AI数据库的基础
AI数据库的基础是向量表示。要理解AI数据库,首先要理解向量是怎么来的。
向量是通过Embedding模型生成的。Embedding模型可以把各种类型的数据(文本、图像、音频等)转换成固定维度的向量。
比如,文本Embedding模型,输入一段文本,输出一个向量。这个向量的维度,可能是256维、768维、1024维,甚至更高。维度越高,能表示的信息越丰富,但计算和存储的成本也越高。
Embedding模型的核心目标,是让语义相近的数据,在向量空间中的距离也相近。比如,"我喜欢猫"和"我爱猫咪",这两句话语义相近,它们的向量距离就应该很近。而"我喜欢猫"和"今天天气很好",语义不相关,它们的向量距离就应该很远。
好的Embedding模型,能很好地捕捉数据的语义信息,让相似度检索的结果更准确。现在常用的文本Embedding模型,有OpenAI的text-embedding系列、开源的BGE系列、M3E系列等。图像的话,有CLIP等模型。
需要注意的是,不同的Embedding模型生成的向量,是不能混用的。因为不同的模型,向量空间是不一样的。你用A模型生成的向量,存在数据库里,然后用B模型生成查询向量去检索,结果会不准确。所以,一个向量数据库里的向量,最好是用同一个Embedding模型生成的。
向量的维度也是一个重要的参数。维度太低,信息损失大,检索不准确;维度太高,计算和存储成本高,检索速度慢。一般来说,768维或1024维是比较常用的选择,在准确性和性能之间有一个比较好的平衡。
相似度计算:核心操作
有了向量之后,下一个问题就是,怎么计算两个向量之间的相似度?
AI数据库最核心的操作,就是计算查询向量和数据库中每个向量的相似度,然后找出最相似的那些。
常用的相似度计算方法有以下几种。
第一种是欧氏距离(L2距离)。欧氏距离就是两个向量在空间中的直线距离。距离越小,说明两个向量越相似。欧氏距离的计算很简单,就是每个维度的差的平方和,再开平方。
第二种是余弦相似度。余弦相似度计算的是两个向量之间夹角的余弦值。余弦值越接近1,说明两个向量方向越一致,越相似。余弦相似度不关心向量的长度,只关心方向。这在文本检索中很常用,因为文本的语义和向量长度关系不大,主要看方向。
第三种是点积(内积)。点积就是两个向量对应维度相乘再相加。点积越大,说明两个向量越相似。点积和余弦相似度的区别是,点积会考虑向量的长度。如果向量都做了归一化(长度为1),那么点积和余弦相似度是等价的。
第四种是汉明距离。汉明距离主要用于二值向量(每个维度只有0或1),计算的是两个向量中不同维度的数量。不同的维度越少,说明越相似。汉明距离计算非常快,适合一些特定的场景。
不同的相似度计算方法,适用于不同的场景。文本检索一般用余弦相似度或者点积,图像检索可能用欧氏距离,二值向量用汉明距离。选择合适的相似度计算方法,对检索结果的准确性很重要。
暴力检索的问题
有了向量和相似度计算方法,最直接的检索方式就是暴力检索:把查询向量和数据库中的每一个向量都计算一遍相似度,然后取最相似的前K个。
这种方法的优点是准确,不会漏掉任何结果。但缺点也很明显:慢。
如果数据库里有100万个向量,每个向量是1024维,那么一次查询就要计算100万次相似度,每次相似度计算要做1024次乘法和加法。这就是10亿次运算,虽然现代CPU能处理,但如果并发查询多,或者数据量更大,就会很慢。
而且,随着数据量的增长,暴力检索的时间是线性增长的。100万条要10毫秒,1000万条就要100毫秒,1亿条就要1秒。对于在线应用来说,1秒的查询延迟是不可接受的。
所以,暴力检索只适合数据量小的场景。数据量大了之后,就需要用索引来加速检索。
索引结构:AI数据库的核心技术
索引是AI数据库最核心的技术,也是各个向量数据库之间最大的区别。索引的目标,是在牺牲一点点准确性的前提下,大大加快检索速度。
常用的向量索引结构有以下几种。
第一种是FLAT(暴力索引)。FLAT就是暴力检索,不建立索引,查询的时候逐个计算。它的优点是100%准确,缺点是慢。适合数据量小、要求高准确的场景。
第二种是IVF(倒排文件)。IVF的思路是,先把向量空间分成很多个簇(cluster),每个簇有一个中心向量。查询的时候,先找到和查询向量最接近的几个簇,然后只在这几个簇里面做暴力检索。这样就不用搜索全部数据了,只需要搜索一部分,速度就快了很多。
比如,把100万个向量分成1000个簇,每个簇1000个向量。查询的时候,只搜索最接近的10个簇,也就是1万个向量,比搜索100万个快了100倍。当然,这样可能会漏掉一些结果,因为最相似的向量可能不在你选的那几个簇里。但通过调整搜索的簇的数量,可以在准确性和速度之间做权衡。
第三种是HNSW(层次化可导航小世界图)。HNSW是目前最流行的向量索引之一。它的思路是构建一个多层的图结构。最上层是稀疏的图,只有少数节点,用来快速定位;最下层是稠密的图,包含所有节点,用来精确搜索。
查询的时候,从最上层开始,找到最接近查询向量的节点,然后进入下一层,在这个节点附近继续搜索,逐层往下,直到最下层。这种方式类似于跳表,能快速缩小搜索范围,效率很高。
HNSW的优点是查询速度快,召回率高,支持动态增删。缺点是内存占用比较大,因为要存储图的连接关系。现在很多主流的向量数据库,比如Milvus、Weaviate、Qdrant,都支持HNSW索引。
第四种是PQ(乘积量化)。PQ是一种向量压缩技术。它的思路是,把一个高维向量分成很多段,每一段单独做聚类,用聚类中心的ID来代替原始向量。这样,一个高维向量就被压缩成了一串ID,大大减少了存储空间。
比如,一个1024维的float向量,原来需要4KB存储空间。用PQ压缩之后,可能只需要几十字节。这样,同样的内存就能存更多的向量,甚至可以把索引全部放在内存里,大大加快查询速度。
PQ的缺点是有精度损失,因为压缩过程中会丢失一些信息。但一般来说,只要参数选得合适,精度损失是可以接受的。PQ经常和IVF结合使用,叫IVFPQ,既能加速又能省内存。
第五种是LSH(局部敏感哈希)。LSH的思路是,用一组哈希函数,把相似的向量哈希到同一个桶里,不相似的向量哈希到不同的桶里。查询的时候,只需要搜索和查询向量在同一个桶里的向量,不用搜索全部。
LSH的优点是理论上有保证,缺点是实际效果不如HNSW,而且调参比较麻烦。现在用得相对少一些。
这些索引结构,各有优缺点,适用于不同的场景。选择合适的索引,是用好向量数据库的关键。
查询优化
除了索引,AI数据库还有很多查询优化的技术。
第一个是召回率和延迟的权衡。向量检索是近似最近邻搜索(ANN),也就是说,它找的不一定是真正最相似的K个,而是近似最相似的K个。召回率就是指,找到的K个结果中,有多少是真正的前K个。
召回率越高,查询就越慢;召回率越低,查询就越快。你可以根据业务需求,在召回率和延迟之间做权衡。比如,搜索场景可以接受稍微低一点的召回率,换取更快的速度;而一些对准确性要求高的场景,就需要高召回率,接受慢一点。
第二个是过滤检索。很多时候,我们不只是要做向量相似度检索,还要结合一些条件过滤。比如,在检索文档的时候,只检索某个分类下的文档,或者某个时间范围内的文档。
这就需要向量数据库支持标量过滤。好的向量数据库,可以在向量检索的同时,高效地进行标量过滤,而不是先检索完再过滤(那样会影响召回率)。这需要数据库在索引层面就支持标量和向量的联合查询。
第三个是批量查询。很多应用场景,需要一次查询多个向量。比如,推荐系统可能需要同时对多个用户做推荐。好的向量数据库支持批量查询,能充分利用硬件的并行计算能力,比一个个查询快很多。
第四个是缓存。对于热点查询,可以缓存查询结果,下次同样的查询直接返回缓存,不用重新计算。这能大大降低延迟,减轻数据库的压力。
数据更新和持久化
除了查询,数据的更新和持久化也是AI数据库的重要方面。
很多人以为向量数据库是只读的,其实不是。大部分向量数据库都支持数据的增删改。比如,你的知识库新增了文档,就要把新文档的向量插入数据库;删除了文档,就要把对应的向量删掉。
但向量索引的更新,比传统数据库复杂。因为插入或删除一个向量,可能会影响索引的结构。比如HNSW索引,插入一个节点,要建立它和其他节点的连接,这需要一定的计算。删除一个节点,也要处理它的连接关系。
好的向量数据库,能高效地支持动态增删,同时保持查询性能。这需要在索引设计上做很多优化。
持久化方面,向量数据库需要把数据持久化到磁盘,防止重启后数据丢失。同时,为了查询速度,索引一般要放在内存里。所以,向量数据库需要处理好内存和磁盘的平衡。
有些向量数据库是纯内存的,速度快但容量有限,而且需要持久化机制。有些是磁盘为主的,容量大但速度慢一些。还有一些是混合的,热数据在内存,冷数据在磁盘。选择的时候,要根据数据量和性能需求来决定。
分布式架构
当数据量特别大的时候,单台机器的内存和计算能力就不够了,这时候就需要分布式架构。
分布式向量数据库,一般是把数据分片(shard),每个分片存在不同的节点上。查询的时候,查询会被发送到所有分片,每个分片在本地检索,然后把结果汇总,返回最相似的K个。
这种方式叫scatter-gather。它的好处是能水平扩展,数据量越大,加更多的节点就行。但缺点是,查询延迟取决于最慢的那个分片,而且网络传输也会增加延迟。
除了分片,还有副本(replica)。每个分片可以有多个副本,分布在不同的节点上。这样,一方面可以提高可用性,一个节点挂了还有其他副本;另一方面可以提高查询性能,查询可以在副本之间负载均衡。
分布式向量数据库,还要处理数据一致性、故障转移、扩容缩容等问题。这些都是分布式系统的经典问题,向量数据库在这方面做了很多工作。
现在比较成熟的分布式向量数据库,比如Milvus,就是采用分布式架构的,能支持十亿甚至百亿级别的向量检索。
AI数据库和传统数据库的融合
现在有一个趋势,就是AI数据库和传统数据库的融合。
以前,向量检索需要用专门的向量数据库,而业务数据存在关系型数据库里。应用需要同时维护两个数据库,还要处理数据同步的问题,很麻烦。
现在,很多传统数据库开始支持向量检索。比如PostgreSQL有pgvector插件,MySQL、MongoDB、Redis也都开始支持向量类型和向量检索。这样,你就可以在一个数据库里同时存业务数据和向量,不用维护两套系统了。
同时,向量数据库也开始支持更多的传统数据库功能,比如事务、复杂查询、标量索引等。两者的边界越来越模糊。
未来,可能不会有专门的"AI数据库",而是所有数据库都会支持向量检索,就像现在所有数据库都支持全文检索一样。向量检索会成为数据库的一个标配功能。
但在那之前,专门的向量数据库在性能、功能、规模上还是有优势的。特别是对于大规模、高性能的向量检索场景,专门的向量数据库还是更好的选择。
怎么选择AI数据库
最后,聊聊怎么选择AI数据库。
选择的时候,要考虑以下几个因素。
第一,数据规模。如果你的数据量不大(几十万到几百万),用轻量级的向量数据库,比如FAISS、Chroma,甚至用PostgreSQL的pgvector就够了。如果数据量很大(千万以上),就需要考虑分布式的向量数据库,比如Milvus、Weaviate。
第二,性能需求。如果你的应用对延迟要求很高,需要毫秒级响应,就要选择性能好的向量数据库,而且要做好索引和参数调优。如果对延迟要求不高,就可以选择简单易用的。
第三,功能需求。你需不需要标量过滤?需不需要实时增删?需不需要分布式?需不需要多租户?这些功能需求,会影响你的选择。
第四,部署和运维。你是想自己部署运维,还是想用托管服务?自己部署的话,要考虑数据库的复杂度和运维成本。托管服务更省心,但成本可能更高,而且有厂商锁定的问题。
第五,生态和社区。一个活跃的社区和丰富的生态,意味着你遇到问题能找到答案,有更多的工具和集成可以用。选择社区活跃的数据库,后续会省心很多。
没有最好的AI数据库,只有最适合你的。根据自己的需求和场景,选择合适的就好。
写在最后
AI数据库是AI时代的重要基础设施。
随着大模型和AI应用的普及,向量检索会变得越来越重要。理解AI数据库的底层原理,能帮助我们更好地使用它,做出更好的AI应用。
这篇文章从向量表示、相似度计算、索引结构、查询优化、数据更新、分布式架构等方面,剖析了AI数据库的底层机制。希望能帮助大家对AI数据库有一个更深入的理解。
当然,AI数据库技术还在快速发展,新的索引、新的架构、新的优化不断出现。保持学习,关注最新的进展,才能跟上技术的步伐。
最后用一句话来结束这篇文章:"技术的本质是为了解决问题。理解了原理,才能用好工具,解决好问题。"
愿每一个开发者,都能在AI时代,用好AI数据库,构建出更好的AI应用。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录