如果我放宽一些约束,可以在近似最近邻居上获得算法快捷方式吗?

问题描述

我正在寻找一种算法,该算法每次查询的时间最快,类似于最近邻居搜索,但有两个区别:

  • 我只需要大致确定(容忍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 (将#修改为@)