想学 AI,先搞懂这件小事!( 五 )

向量检索有两个基本参数 , 一个是n , 意思是拿n条目标向量去数据库中做检索 。 另一个是k , 意思是查找离目标向量最近的前k个向量 , 我们一般称为top-k 。

向量检索有两类方法:存在最近邻检索(Nearest Neighbor Search , NN)和近似最近邻检索(Approximate Nearest Neighbor Search , ANN) 。 NN最初是用目标向量和数据库向量逐条计算距离 , 结果最为精确 , 后来又产生了相关算法(比如KD-tree) , 使得搜索效率大为提高 , 但在应对海量高维度数据时显得力不从心 。 ANN则是在可接受的精度条件下通过把向量分簇建立索引 , 大幅提高搜索效率 , 这也大规模向量检索场景下所使用的主要方法 。

怎么理解这里的分簇索引呢?打个比方 , 我们先给一个城市里所有的人按照职业做一个分类 , 比如工程师 , 律师 , 医生 , 等等 。 现在我要找一个人 , 他是Java程序员 , 那么我们掐指一算 , 只要在工程师队伍里找就十有八九能找到他 , 不需要再去其他队伍里找了 。

向量检索中典型的做法就是通过某种聚类算法把大批向量分成很多簇 , 每个簇含有成百上千条向量 , 每个簇都有一个中心向量 , 当用户输入目标向量搜索时 , 系统先把目标向量和每个簇的中心向量做距离计算 , 挑选出距离比较近的几个簇 , 然后再把目标向量和这几个簇里的每一条向量做距离运算 , 最后得出距离最近的k条结果向量 。

推荐阅读