海量数据相似查找系列2 -- Annoy算法

Annoy算法详解:海量数据相似查找
本文介绍了Annoy算法,用于稠密向量的快速相似查找。Annoy通过建立二叉树实现近似最近邻搜索,算法包括建立索引、查询过程和返回近邻节点。文章还讨论了处理查询结果不足Top N和相近数据节点被分割的问题,以及Annoy的实际效果和源码摘要。
范涛
发表于2017-04-19

上面一章说了下高维稀疏数据如何通过learning to hash的方法来进行相似查找,这种主要想说下另外一种情况,稠密向量如何进行快速相似查找呢?还是以文本为例吧。之前提到过文本的paragraph2vector的向量表示,以及词word2vector向量表示形式。一旦文档变成这种稠密向量形式,那如何从海量文本中快速查找出相似的Top N 文本呢?
所以这里重点想说下Annoy( Approximate Nearest Neighbors  Oh Yeah )这个快速算法,这个在实际应用中发现无论计算速度和准确性都非常不错。


一 算法原理

以2D数据为例来介绍Annoy算法,下面一个2D数据分布图:



1  建立索引过程

Annoy的目标是建立一个数据结构,使得查询一个点的最近邻点的时间复杂度是次线性。Annoy 通过建立一个二叉树来使得每个点查找时间复杂度是O(log n)。 看下面这个图, 随机选择两个点,以这两个节点为初始中心节点,执行聚类数为2的kmeans过程,最终产生收敛后两个聚类中心点。这两个聚类中心点之间连一条线段(灰色短线),建立一条垂直于这条灰线,并且通过灰线中心点的线(黑色粗线)。这条黑色粗线把数据空间分成两部分。在多维空间的话,这条黑色粗线可以看成等距垂直超平面。






在划分的子空间内进行不停的递归迭代继续划分,知道每个子空间最多只剩下K个数据节点。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值