向量数据库学习笔记

今天学习了向量数据库 (guangzhengli.com),学习笔记总结如下:

向量数据库相似性搜索主要思想是通过两种方式提高搜索效率:

1. 减少向量大小——通过降维或减少表示向量值的长度。

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

向量数据库主要会用到的一些搜索算法(搜索算法都是在速度和质量还有内存上做一个权衡,这些算法也被称为近似最相邻Approximate Nearest Neighbor,即ANN算法):

1. 聚类算法k-means,将向量拆分到K个聚类中心,通过先识别聚类中心来减小搜索范围。

2. 为了避免聚类边界处的最相似向量漏掉(搜索条件与搜索结果落入2个相邻的聚类中),引入的Faiss算法,在K-means基础上设置nprobe,即搜索最相近的n个聚类

3. 为了减少聚类算法所需维护的内存(聚类和向量、向量中心索引),引入了乘机量化算法(Product Quantization,即PQ):

  1) 量化就是常见的有损压缩。通过码表维护向量到聚类中心的转换。

  2)  针对高维向量的维度灾难,将高维向量拆分为多个低维子向量,每个子向量做聚类和码表,每个子向量分别搜索,最后将结果通过笛卡尔积组合还原回原始向量。

4. Hierarchical Navigable Small Worlds (HNSW)算法,用构建树或图的方式实现ANN。

  1) 在向量入库的时候先找到它最相临的向量,将他们连接起来,构成图

  2) 采用类似跳表的思想,将向量的连接图分层,约上层的节点越少,最底层包含所有节点

  3) 通过上层图的搜索和逐层向下搜索来缩小搜索范围,用空间换时间。

5. 局部敏感哈希LSH(Locality Sensitive Hashing),使用hash桶来判断相似性

  1) 使用hash函数将相似向量映射到同一个桶中,通过比较hash值来判断向量的相似性。

  2) 向量搜索的hash函数要做到越相似越容易出现hash碰撞。

  3) 通过hash函数定位到相似向量的hash桶,然后在桶内做暴力搜索。

6. Random Projection for LSH 随机投影

  1) 高维向量场景hash桶会非常多,碰撞效果会大幅降低,影响搜索质量与速度

  2) 通过随机投影,将高维空间向低维空间投影实现降维,降低LSH算法的计算时间,提高查询质量。通常会有多个随机投影。

  3) 随机的部分是一个随机数的矩阵,输入向量与矩阵做点积得到投影矩阵

除了搜索算法,还需要做相似性测量,用于计算向量间的距离。

1. 欧几里得距离(Euclidean Distance)

   1) 是可以反映向量的绝对距离,适用于需要考虑向量长度的相似性计算。

   2) 例如推荐系统中,需要根据用户的历史行为来推荐相似的商品

2. 余弦相似度

   1) 余弦相似度是指两个向量之间的夹角余弦值,对向量的长度不敏感,只关注向量的方向,因此适用于高维向量的相似性计算。

   2) 例如语义搜索和文档分类

3. 点积相似度

   1) 向量的点积相似度是指两个向量之间的点积值,简单易懂,计算速度快,并且兼顾了向量的长度和方向

   2) 例如图像识别、语义搜索和文档分类等。

   

元数据过滤,向量搜索的结果需要考虑业务元数据层面的筛选需求。

1. 向量数据库通常维护两个索引:一个是向量索引,另一个是元数据索引。

2. 在进行相似性搜索本身之前或之后执行元数据过滤

向量数据库的分布式

1. 数据分片需要基于向量的相似性进行分片

2. 数据一致性与安全性与普通分布式数据库同

转载请注明转自高孝鑫的博客!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值