问题描述
我正在寻找一种算法,该算法每次查询的时间最快,类似于最近邻居搜索,但有两个区别:
- 我只需要大致确定(容忍I型和II型错误)在某个距离 k 之内的邻居的存在,或者返回最近邻居的近似距离。
- 我可以一次查询很多
我想要的吞吐量比那里的近似最近的邻居库(https://github.com/erikbern/ann-benchmarks)更好,后者似乎更适合单个查询。特别是,第一个条件的算法松弛似乎应该为算法捷径留出空间,但是我在文献中找不到任何解决方案,也无法弄清楚如何设计一个。
这是我目前最好的解决方案,每个CPU每秒可处理约1万次查询。如果可能的话,我正在寻找接近数量级加速的东西。
sample_vectors = np.random.randint(low=0,high=2,size=(10000,vector_size))
new_vectors = np.random.randint(low=0,size=(100000,vector_size))
import annoy
ann = annoy.AnnoyIndex(vector_size,metric='hamming')
for i,v in enumerate(sample_vectors):
ann.add_item(i,v)
ann.build(20)
for v in new_vectors:
print(ann.get_nns_by_vector(v,n=1,include_distances=True))
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)