向量数据库基础

一、名词概念

1.实例(Instance)

实例是腾讯云中独立运行的数据库环境,是用户购买向量数据库服务的基本单位,以单独的进程存在。一个数据库实例可以包含多个由用户创建的数据库。

2.数据库(Database)

一个实例可以创建多个 Database。对应mysql的Database。

3.集合(Collection)

集合是指一组文档组,类似于mysql中的表,其中可包含多条文档数据。

4.文档(Document)

类似于mysql中的一行数据,每个 Document 代表一个完整的文档对象。

5.字段(Field)

每个 Field 是一个键值对(key:value),表示文档中的一个属性或者字段。每个 Field 都有自己的类型和取值范围,可以是字符串、数字等不同类型的数据。

数据类型说明
vector向量字段的数据类型,每个向量维度的数据结构为 float32。
string字符串,主键 ID 与标量字段支持的数据类型之一。
uint64整型数值,用于存储整数数值,包含正整数和零。
double双精度浮点型数值,用于存储浮点值。
array数组类型,用于存储一组相同类型的数据元素。当前,数组元素仅支持 string 类型。
json基于文本的格式,由键值对组成的数据对象。用花括号 {} 包裹,例如: “a”: {“b”: “test”, “c”: 12},a 中的字段 b 用 a.b 表示。

6.索引类型(Index)

索引是一种特殊的数据结构,用于快速查找和访问数据,存储在内存中。

(1)向量索引

  • FLAT
    搜索向量会遍历所有向量与目标向量进行比较。(对应暴力搜索)

  • HNSW
    通过构建一个分层的图结构来组织和索引向量数据。图结构从顶层到底层,每一层的节点和边逐层密集。每个节点代表一个向量,而边则表示向量之间的相似性或接近度。(对应HSNW算法)

  • IVF 系列

    • IVF_FLAT(基于k-means算法)
      基于倒排文件(inverted file)的索引结构,该索引在检索时,对每个聚类中的向量进行扁平扫描,计算它们与目标向量的距离,并选择最近的向量作为搜索结果。
    • IVF_PQ(基于PQ算法)
      基于乘积量化(Product Quantization)的向量索引算法,通过将高维向量分割成多个子向量,并对每个子向量进行聚类,生成码本,然后将原始向量映射为一组离散的码本索引。

(2)主键索引

向量数据库默认将 Document id 作为主键来构建主键索引,而 AI 类数据库对应将 DocumentSet ID 作为主键构建索引。

(3)Filter 索引

Filter 索引(Filter Index)是建立在标量字段的索引。
标量字段被建立 Filter 索引之后,向量检索时,将依据 Filter 指定的标量字段的条件表达式来过滤查询和范围查询来匹配相似向量。

7.特征与向量

向量:具有大小和方向的量。它可以形象化地表示为带箭头的线段。
特征:通过识别不同事物之间不同的特征来识别种类,例如分别不同种类的小狗,就可以通过体型大小、毛发长度、鼻子长短等特征来区分。每个特征可以得到向量的一个维度

8.聚类

按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。

二、相似性搜索

高效的搜索算法有很多,其主要思想是通过两种方式提高搜索效率:

  1. 减少向量大小——通过降维或减少表示向量值的长度。
  2. 缩小搜索范围——可以通过聚类或将向量组织成基于树形、图形结构来实现,并限制搜索范围仅在最接近的簇中进行,或者通过最相似的分支进行过滤。

1.暴力搜索(平坦搜索)

一个一个逐一去比较,向量相似度。

2.KNN算法(最近邻搜索)

一种基于暴力搜索的方法
对未知类别属性的数据集中的每个点依次执行以下操作:
(1) 计算已知类别数据集中的点与当前点之间的距离;
(2) 按照距离递增次序排序;
(3) 选取与当前点距离最小的k个点;
(4) 确定前k个点所在类别的出现频率;
(5) 返回前k个点出现频率最高的类别作为当前点的预测分类

3.聚类算法(K-Means)

将数据分成 k 个类别,其中 k 是预先指定的。以下是 k-means 算法的基本步骤:
(1) 随机选择 k 个初始聚类中心。
(2) 将每个数据点分配到最近的聚类中心。
(3) 计算每个聚类的新中心。
(4) 重复步骤 2 和 3,直到聚类中心收敛或达到最大迭代次数。

在这里插入图片描述

4.ANN算法(近似最近邻)

(1)LSH算法(位置敏感性哈希)

LSH 使用一组哈希函数将相似向量映射到“桶”中,从而使相似向量具有相同的哈希值。这样,就可以通过比较哈希值来判断向量之间的相似度。
通常,我们设计的哈希算法都是力求减少哈希碰撞的次数,但是这里反其道行之。
目的是为了找到相似的向量,所以可以专门设计一种哈希函数,使得哈希碰撞的概率尽可能高,并且位置越近或者越相似的向量越容易碰撞,这样相似的向量就会被映射到同一个桶中。

在这里插入图片描述

当搜索一个向量时,将这个向量再次进行哈希函数计算,得到相同桶中的向量,然后再通过暴力搜索的方式,找到最接近的向量。如下图如果再搜索一个向量经过了哈希函数,得到了 10 的值,就会直接找到和它同一个桶中相似的向量 D。从而大大减少了搜索的时间。

在这里插入图片描述

5.PQ算法(乘积量化)

什么叫向量量化?
其实就是找附近既定的点,来当作一个区间的代表,从而简化资料量
比如一个聚类里的所有向量,统一用质心来作为代表。

本质就是为做压缩,降低存储空间使用率。
在大规模数据集中,聚类算法最大的问题在于内存占用太大。这主要体现在两个方面,首先因为需要保存每个向量的坐标,而每个坐标都是一个浮点数,占用的内存就已经非常大了。除此之外,还需要维护聚类中心和每个向量的聚类中心索引,这也会占用大量的内存。

对于第一个问题,可以通过量化 (Quantization) 的方式解决,也就是常见的有损压缩。例如在内存中可以将聚类中心里面每一个向量都用聚类中心的向量来表示,并维护一个所有向量到聚类中心的码本,这样就能大大减少内存的占用。

在这里插入图片描述

但是在高维坐标系中,还会遇到维度灾难问题,具体来说,随着维度的增加,数据点之间的距离会呈指数级增长,这也就意味着,在高维坐标系中,需要更多的聚类中心点将数据点分成更小的簇,才能提高分类的质量。否者,向量和自己的聚类中心距离很远,会极大的降低搜索的速度和质量。

例如一个 128 维的向量,需要维护 2^64 个聚类中心,才能维持不错的量化结果,但这样的码本存储大小已经超过维护原始向量的内存大小了。

解决这个问题的方法是将向量分解为多个子向量,然后对每个子向量独立进行量化,比如将 128 维的向量分为 8 个 16 维的向量,然后在 8 个 16 维的子向量上分别进行聚类,因为 16 维的子向量大概只需要 256 个聚类中心就能得到还不错的量化结果,所以就可以将码本的大小从 2^64 降低到 8 * 256 = 2048 个聚类中心,从而降低内存开销。
而将向量进行编码后,也将得到 8 个编码值,将它们拼起来就是该向量的最终编码值。等到使用的时候,只需要将这 8 个编码值,然后分别在 8 个子码本中搜索出对应的 16 维的向量,就能将它们使用笛卡尔积的方式组合成一个 128 维的向量,从而得到最终的搜索结果。这也就是乘积量化(Product Quantization)的原理。

6.HSNW算法

除了聚类以外,也可以通过构建树或者构建图的方式来实现近似最近邻搜索。这种方法的基本思想是每次将向量加到数据库中的时候,就先找到与它最相邻的向量,然后将它们连接起来,这样就构成了一个图。
类似于跳表概念,建立多层次的跳表索引
在这里插入图片描述

三、相似性计算方法

1.内积(点积)(IP)

它计算两个向量之间的点积(内积),所得值越大越与搜索值相似。(比较受到长度的影响,方向不太考虑)
例子:
计算一组科学研究论文的相似度
高被引次数(较长的向量)的论文与其他高被引论文的点积相似度得分更高,因为它们的量级对结果的贡献更大。低被引次数(较短的向量)的论文与高被引次数的论文的点积相似度得分较低,因为它们的量级较小。
在这里插入图片描述

2.余弦相似度(COSINE)

余弦相似度对向量的长度不敏感,只关注向量的方向,所得值越大越与搜索值相似。
余弦相似度(cos (θ))值范围从-1(不相似)到+1(非常相似)
在这里插入图片描述

3.欧几里得距离(L2)

在多维空间中,欧氏距离就是两点之间的实际距离。所得的值越小,越与搜索值相似。
优点是可以反映向量的绝对距离,适用于需要考虑向量长度的相似性计算。
缺点是只考虑了向量的长度,而没有考虑向量的方向。

在这里插入图片描述

4.汉明距离(Hamming Distance)

通过计算两个字符串对应位置上不同字符的数量来定义,如果字符不同,那么它们之间的汉明距离就会加一。具体来说,对于长度为 n 的二进制向量,如果两个向量的对应位有 d 个不同,则它们的汉明距离为 d。
适用于处理等长的二进制数据。

  • 汉明距离越小,表示两个字符串之间的相似度越高。
  • 它是一种对称度量,即字符串 A 与字符串 B 的汉明距离与字符串 B 与字符串 A 的汉明距离相同。
  • 例如,两个十进制数 a=93和 b=73,如果将这两个数用二进制表示的话,即 a=1011101和 b=1001001,这两者的汉明距离为2,因为它们中有两个字符不一致,即在第三和第五个位置上的字符不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值