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

AI大模型系列一:向量数据库的原理和选型

IT那活儿 2024-05-08
2739

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!  


  

随着人工智能技术的飞速发展,大规模模型训练成为可能,这些模型在处理文本、图像、语音等数据时,可以生成高维向量表示。

向量数据库应运而生,它能够存储和管理这些高维向量,为信息检索、知识发现等领域提供强大的支持,向量数据库以其独特的优势,正成为大模型时代的重要基础设施, 正如在大数据时代下的elasticsearch/kafka/clickhouse等基础组件, 大模型时代最热门的基础组件则是向量数据库,因此熟悉向量数据库的技术原理和选型必不可少



什么是向量数据库

向量数据库是一种专门用于存储和查询向量数据的数据库系统,与传统数据库相比,向量数据库使用向量化计算,能够高速地处理大规模的复杂数据;并可以处理高维数据,例如图像、音频和视频等,解决传统关系型数据库中的痛点;同时,向量数据库支持复杂的查询操作,也可以轻松地扩展到多个节点,以处理更大规模的数据。

向量数据库的优势在于,它能够直接对高维向量进行索引和查询,避免了传统数据库中繁琐的文本匹配过程。这使得在大模型时代,信息检索和知识发现变得更加高效和智能。

相比传统数据库,向量数据库主要特点体现在以下几个方面

  • 数据表示

    传统数据库通常以表格形式存储数据,而行和列的组合用于表达事物的不同属性。相比之下,向量数据库直接使用高维向量来表示数据,这使得它们能够更自然地捕捉和表示数据的复杂特征,特别是对于非结构化数据如文本、图像和声音。

  • 查询效率

    在传统数据库中,查询通常需要进行逐行、逐列的匹配,这在处理复杂查询时效率低下。向量数据库通过向量索引技术,能够快速进行相似度查询,大大提高了查询效率。

  • 相似度搜索

    向量数据库擅长处理相似度搜索问题。在信息检索、推荐系统、内容审核等领域,需要找到与给定向量相似的数据项,向量数据库能够有效地支持这类任务。

  • 多模态数据处理

    向量数据库能够处理多种类型的数据,如文本、图像、声音等,并且能够将这些不同模态的数据统一在向量空间中进行处理,这对于多模态信息检索和知识发现尤为重要。

向量数据库原理

2.1 什么是向量(vector)

向量是具有有大小和方向的数学结构,简单来说一个同时具有大小和方向的几何对象都可以称为向量[MISSING IMAGE: ,  ]

2.2 高维向量(high-dimensional vector)

我们通常讨论的是二维向量,它由两个分量组成,例如在直角坐标系中的x和y坐标。

当我们谈论高维向量时,我们指的是那些有超过两个分量的向量,例如,在三维空间中,一个高维向量可能包含x、y和z三个分量。

在数据科学和机器学习中,高维向量可以表示为特征向量,其中每个分量代表数据点的不同特征。

在这种情况下,维度的数量通常非常大,可能涉及成百上千个甚至更多的特征。

三维空间中的三维向量,再高维度就画不出了,只能投影在三维或二维空间显示

2.3 数据向量化(embedding)

计算机只能计算,本身无法识别文字/图片/音频的含义,因此需要将文字/图片/音频转化为计算机可以识别的数字才能进行计算,将高维度的数据(例如文字、图片、音频)转化为向量的过程称为embedding。

上图是单词向量化,设置单词的N个特征, 将单词与N个特征的相关性进行计算得到N个相关性值, 单词转为N维向量,这个N维向量也就带上了单词的相关信息。

理论上,只要特征足够多,维度够多,我们就能够将所有的事物区分开来,世间万物都可以用一个多维坐标系来表示,它们都在一个高维的特征空间中对应着一个坐标点。

2.4 相似性搜索 (Similarity Search)

上述embeding过程将单词转为N维特征向量,按常理来说如果两个单词的每个特征的值都很接近,则认为这两个单词很相似,越接近越相似,两个向量每个特征的值很接近表示两个向量本身很接近,因此可以通过计算向量之间的距离来判断它们的相似度,这就是相似性搜索。

2.5 相似性测量 (Similarity Measurement)

在相似性搜索中,需要计算两个向量之间的距离,然后根据距离来判断它们的相似度。

如何计算向量在高维空间的距离呢?

有三种常见的向量相似度算法:欧几里德距离、余弦相似度和点积相似度。每一种相似性测量 (Similarity Measurement) 算法都有其优点和缺点,需要根据自己的数据特征和业务场景来选择。

9种距离度量方法

2.6 相似性搜索算法 (Similarity Search Algorithm)

在实际的场景中,如果想要在一个海量的数据中找到和某个向量最相似的向量,我们需要对数据库中的每个向量进行一次比较计算,但这样的计算量是非常巨大的,所以需要高效的算法来解决这个问题。算法有很多,其主要思想是通过以下方式提高搜索效率:

  • 1)降维

    在高维坐标系中,随着维度的增加,计算量会呈指数级增长,因此降低维度可以大幅减少计算时长,提高搜索效率,但是降低维度会减少数据承载的信息量,降低搜索质量。

  • 2)量化 (Quantization)

    量化是一种降低数值数据精度以便减少存储空间和提高处理速度的技术。比如向量值由32位浮点数(FP32)转为8位整数(INT8),则所需的内存可以减少75%,量化会导致质量略有下降,特别是当量化级别较低时。因此,量化过程需要在质量和资源消耗之间找到一个平衡点,相比直接降维,量化没有减少维度信息,因此比降维用的多

  • 3)缩小搜索范围

    通过聚类或将向量组织成基于树形、图形结构来实现,并限制搜索范围仅在最接近的簇中进行,或者通过最相似的分支进行过滤。

向量数据库的索引结构

相似性搜索算法对应索引结构,在传统关系型数据库中,最常见的索引类型是B-tree。B-tree索引通过维护数据的排序顺序,使得范围查询和排序操作变得高效。向量索引的数据结构有以下四种:

3.1 哈希索引(Hash-based index)

哈希索引是一种基于哈希函数的索引方法,例如局部敏感哈希(Locally Sensitive Hashing,LSH),Random Projection for LSH 随机投影。

哈希索引将高维数据转换为低维哈希码,旨在尽可能保持原始数据的相似性。在建立索引时,数据集会被多次哈希,以确保相似的数据点更有可能发生碰撞(这与传统的哈希技术相反,传统哈希技术的目标是尽量减少碰撞)。

在查询时,查询点也会使用与建立索引时相同的哈希函数进行哈希,由于相似的数据点被分配到同一个哈希桶中,所以检索非常快速。

哈希索引的主要优点是在处理大量数据时非常快速,但缺点是准确性较低

3.2 基于树的索引(Tree-based index)

基于树的索引结构通过二叉搜索树实现在高维空间中的快速搜索。树的构建方式使得相似的数据点更有可能位于同一子树中,从而更快地发现近似最近邻。

Annoy(Approximate Nearest Neighbors Oh Yeah)是一种使用二叉搜索树森林的方法。

基于树的索引的缺点是,它们只对低维数据表现较好,在高维数据中准确性较低,因为它们无法充分捕捉数据的复杂性

3.3 基于图的索引(Graph-based index)

基于图的索引是基于数据点在向量空间中形成图的思想构建的索引。图中节点表示数据值,连接节点的边表示数据点之间的相似性。图的构建方式使得相似的数据点更有可能通过边连接在一起,而近似最近邻(ANN)搜索算法被设计为以高效的方式遍历图。

图的索引主要优势在于能够在高维数据中找到近似最近邻,并且具有较高的内存效率,提高性能。

常用的图索引结构是Hierarchical Navigable Small World(HNSW), HNSW 是一种为高维空间设计的高效索引结构,特别适用于近似最近邻搜索(Approximate Nearest Neighbor Search,ANN)

3.4 倒排文件索引(Inverted file index,IVF)

倒排文件索引将向量空间划分为多个细分的单元,称为Voronoi图,这些图减少了搜索空间,类似于聚类的效果。

为了找到最近邻,ANN算法只需定位最近Voronoi图单元的质心,然后仅在该单元内进行搜索。

IVF的好处在于它有助于设计快速缩小相似性感兴趣区域的ANN算法,但其原始形式的缺点是在细分向量空间的量化步骤可能对于非常大量的数据而言速度较慢

因此,IVF通常与量化方法结合使用以提高性能。

向量数据库的选型

在实际使用中,通常不会自己去实现向量数据库,只需要在熟悉向量数据库的技术原理后,根据实际的业务场景中选择向量数据库,一般根据以下几点进行选择即可:

  • 1)支持的索引结构;

  • 2)是否开源;

  • 3)水平扩展;

  • 4)安全性。

各个向量数据库支持的索引结构

每种向量数据库有不同的特点,以笔者目前用过的Chroma/Milvus的为例,Chroma属于轻量级向量数据库,易于部署,对配置要求也不是很高,容易上手,小项目适合使用。

Milvus支持多种搜索算法,支持分布式架构,可以轻松扩展以处理更多数据和更高的查询负载,同时有web界面方便查看,功能齐全,要求高的环境中建议采用Milvus。

参考:

https://github.com/chroma-core/chroma
https://github.com/milvus-io/milvus
https://guangzhengli.com/blog/zh/vector-database/
https://zhuanlan.zhihu.com/p/652730120
https://hub.baai.ac.cn/view/29516
https://zhuanlan.zhihu.com/p/374627115


END


本文作者:长研架构小组(上海新炬中北团队)

本文来源:“IT那活儿”公众号

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

评论