向量数据库初探:为什么AI需要它?
在我们深入探讨向量数据库之前,有必要先理解传统关系型数据库的局限性。
关系型数据库(如MySQL、Oracle、PostgreSQL)使用表格结构存储数据,查询时依赖WHERE关键字进行精准匹配。这种方式的短板在于:它无法理解数据的语义。例如,搜索“苹果”,它只能匹配到包含“苹果”二字的字段,而无法区分你指的是水果还是手机公司。
向量数据库的出现,正是为了解决这一问题。它不再使用传统的表结构,而是存储两种核心数据:
- 向量数据:将文本、图片、音频等通过Embedding模型转化为数学向量,用于语义对比。
- 元数据:用于存储业务的附加信息,如日期、类别等。
索引:数据库的“目录”
这里我们引入了“索引”的概念。无论是关系型数据库还是向量数据库,索引都扮演着目录的角色。就像我们查书时,会先看目录找到对应页码,而不是通读全书。索引能大幅提升数据检索的效率。
向量检索算法:从精确到高效
向量数据库的核心在于检索算法,主要分为两类:
-
KNN(K-最近邻):这是一种暴力匹配方法,它会将查询向量与库中所有向量逐一比对,找出最相似的K个。优点是100%精确,缺点是当数据量巨大时,速度极慢,不适合实时响应。
-
ANN(近似最近邻):这是目前向量数据库的主流方法。它牺牲一点点精度,换取极高的检索速度,通过巧妙的索引结构,无需遍历所有数据就能找到近似的最近邻。目前最主流的ANN算法有两个:
- FAISS (Facebook AI Similarity Search):由Facebook开源。其核心思想可以理解为分类。类似逛超市,你需要一件商品(如“脉动”),会先去“饮料区”,再在该区的货架上寻找。FAISS先将海量数据分到不同类别(分区),查询时先确定类别,再在类别内部精细比对。
- HNSW (Hierarchical Navigable Small World):其核心思想是分层导航。类似于从外地去西安某小区,策略是“先大范围,再小范围”。先通过飞机快速抵达西安市(高层网络),然后打车精确到具体小区(低层网络)。HNSW构建了一个多层网络图,查询时从上至下逐层深入,先快速缩小范围,再进行精确匹配。
向量数据库的核心功能
无论什么数据库,核心功能都是增、删、改、查:
- 插入:将数据(文本、图片等)及其对应的向量插入数据库,系统会自动构建索引。
- 删除:移除不需要的数据及其向量。
- 更新:修改已有的数据记录。
- 查询:这是向量数据库的灵魂,分为两种模式:
- 相似性检索:基于语义相似度。输入一个查询,数据库会找出语义上最相似的向量。
- 过滤检索(混合检索):在相似性检索的基础上,叠加传统数据库的条件过滤。例如查询“近一年发布的,与‘人工智能’语义相关的文章”。这里的“近一年”是硬性条件,而“语义相关”则是软性的相似度判断。
思考题
-
问题:当数据量很小时(例如几百条记录),我们应该使用KNN还是ANN算法?为什么?
答案:建议使用KNN。因为数据量小,KNN暴力比对的速度完全可接受,且能保证100%的精确度。ANN的索引构建和搜索会有额外开销,在大数据量下才体现出性能优势。 -
问题:如果要搜索“近一个月发布的、关于‘新能源汽车销量’的公众号文章”,应该使用哪种检索方式?
答案:应使用混合检索(过滤检索)。其中“关于‘新能源汽车销量’”部分使用相似性检索,而“近一个月发布”部分使用条件过滤。