Annoy 是 Spotify 开源的高维空间求近似最近邻的库,在 Spotify 使用它进行音乐推荐。最邻近搜索(Nearest Neighbor Search, NNS)又称为“最近点搜索”(Closest point search),是一个在尺度空间中寻找最近点的优化问题。
Annoy 能够使用静态文件作为索引,意味着可以跨进程共享索引。它还创建了大量的基于只读文件的数据结构,这些数据结构被嵌入内存中,以便许多进程可以共享相同的数据。Annoy 的另一个好处是它试图最小化内存占用,因此索引非常小。
特性:
- 欧几里德距离, 曼哈顿距离, 余弦距离, 汉明距离或 点(内)积距离
- 余弦距离等价于归一化向量的欧氏距离=sqrt(2-2*cos(u,v)
- 如果你的维度不多(比如<100),效果会更好,即使达到 1000 个维度,它也表现得非常出色
- 内存使用量小
- 允许你在多个进程之间共享内存
- 索引创建与查找是分开的(特别是在创建树后,就无法添加更多项目)
- 原生 Python 支持
- 在磁盘上生成索引,以便为不适合内存的大型数据集建立索引