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

用简图来表示 , 假设我们有二维平面上若干个向量(点):

通过聚类算法把它们分成若干个簇 , 簇的数量是可以指定的 , 这里分成4簇 , 黑圈的表示簇的中心向量:

加入要检索的目标向量 , 根据对比计算 , 我们发现它离黄色簇的中心最近 , 那么只需要将目标向量和黄色簇里每一个向量计算距离 , 就可以得到离目标向量最近的那个向量:

当然 , 具体到实现环节会有很多种不同做法 , 有基于矢量量化的 , 基于图的 , 以及基于树的各种算法 , 有兴趣的可以去搜索ANN相关论文 。

大规模向量检索面临的问题

大规模向量检索的系统作为一个向量数据库 , 不但要能够支持海量数据的持久化 , 还要能快速地检索出用户需要的信息 。 生产环境中的向量维度一般起步就是128维 , 高一些的可达512维 。 我们可以算一下 , 对于512维度的向量 , 每条向量有512个数值 , 通常在计算机里这些数值是以float类型表示 , 这意味着每条向量将会占用2048字节 , 那么一亿条这样的向量就会用掉200GB 。 而生产环境中的向量数量有可能达到十亿甚至百亿的规模 。

推荐阅读