![f7c0d7dd434ac752a71bdac1cba7a831.png](https://i-blog.csdnimg.cn/blog_migrate/d104f82fa2ab63a0b98a0bc55b54fa04.png)
随着机器学习、深度神经网络的不断发展,数据的向量化无处不在。而针对海量向量数据的搜索,无论是工业界还是学术界都做了大量的研究。本文主要讲解两个基于近邻图的向量搜索算法,并比较其适用场景。
这里不得不先提一个学术上的对应名词 Approximate Nearest Neighbor Search (ANNS),近似的最近邻搜索。之所以近似是由于精确的近邻搜索太过困难,研究随之转向了在精确性和搜索时间做取舍。由于精确的向量搜索在海量数据的场景下搜索时间过长,所以目前的常见做法,是在向量上建立近似搜索索引。 这里先介绍一下现在常用的索引类型以及它们的局限性。首先是基于树的算法,这里举例较为经典的 KD-tree。这种索引类型在向量维度 稍大一些的情况下 (d>10),索引性能会急剧下降甚至不如暴力搜索。再说说基于 LSH (locality-sensitive hashing) 的索引,如果想要取得高召回率,LSH算法必须要建立大量的Hash表,这会使得索引大小膨胀数倍。不仅如此,树和LSH都属于空间切分类算法,此类算法有一个无法避免的缺陷,即为了提高搜索精度,只能增大搜索空间。图1-A描述了基于树的切分搜索,每个虚线分割出的区域是一个子树,如果搜索向量在子树的边缘时,算法需要搜索多个子树来获取结果。图1-B描述了基于 Hash 的切分搜索,虚线描述了每个独立的hash表,搜索面临的问题与基于树的搜索算法类似。所以空间切分类算法在最坏的情况下需要扫描几乎整个数据集,这在很多场景下显然是无法接受的。![2c046f0e3136d3dc59007ea993a7dfa9.png](https://i-blog.csdnimg.cn/blog_migrate/31e6a648503c47deebb5f9bd9a65107c.jpeg)
由于图数据结构有天生近邻关系的特性,在图上做最近邻搜索看来是一种不错的思路,所以近年来基于图的向量搜索算法也是一个研