NearPy是一个Python框架,用于使用不同的局部敏感散列方法在高维向量空间中进行快速(近似)最近邻搜索。
你可以使用NearPy去进行试验和评估新的(研究)方法,但也可以直接用于实际应用。NearPy配有一个redis存储适配器。
要安装它,只需执行 pip install NearPy。它还将安装scipy,numpy和redis。
现在支持密集和稀疏(scipy.sparse)向量。
点击此处了解更多信息:http://pixelogik.github.io/NearPy/
(文中向量和矢量是同一个意思,都翻译于vector)
原理
为了找到查询向量的近似最近邻居,首先索引要存储的向量。对于应该被索引(’存储’)的每个向量,生成散列,即字符串值。该散列用作存储向量的后备数据单元的键。在大多数情况下,后备数据单元只是一个系列的向量,后备数据单元是在这种应用下使用的术语。
这样生成的后备数据单元(bucket)的键(即向量散列值)对于查找查询向量的最近邻居没有任何用处。因此,NearPy实现近似最近邻算法的机制的“秘密”是使用所谓的一些局部敏感哈希函数—LSH。这些局部敏感哈希函数考虑了空间性,因此它们倾向于为近似向量生成相同的散列值(后备数据的键)。这使得在给定查询向量的情况下获得接近向量的速度非常快。因为这是一种非常粗略的方法,所以它被称为近似最近邻搜索,因为您可能无法获得真正的最近邻居。在许多应用程序中这是很好的一种折中方式,因为你只想得到20个“足够相等”的向量。
Engine — 发动机
使用NearPy时,您将主要通过配置和使用Engine对象来完成此操作。Engines是可配置的管道,用于使用局部敏感哈希(LSH)进行近似最近邻搜索(ANNS)。