Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 相似性搜索的索引_Algorithm_Search_Indexing_Similarity_Locality Sensitive Hash - Fatal编程技术网

Algorithm 相似性搜索的索引

Algorithm 相似性搜索的索引,algorithm,search,indexing,similarity,locality-sensitive-hash,Algorithm,Search,Indexing,Similarity,Locality Sensitive Hash,我有大约100万个数字向量(指纹),每个向量包含100个介于0和65536之间的整数,我正试图使用给定的查询向量(例如[1,0,30,9,42,…])对指纹数据库进行快速相似性搜索查找此查询集与100M集数据库的交集/并集比率 要求以的方式返回查询向量的k个“最近邻”,具体操作如下: (1) 将向量排列成一棵树(基数树) (2) 使用模糊条件查询树,换句话说,如果树的每个节点上的值的差异在阈值内,则匹配 (3) 从(2)生成包含所有匹配向量的子树 (4) 现在,在具有较小阈值的子树上重复过程(2

我有大约100万个数字向量(指纹),每个向量包含100个介于0和65536之间的整数,我正试图使用给定的查询向量(例如[1,0,30,9,42,…])对指纹数据库进行快速相似性搜索查找此查询集与100M集数据库的交集/并集比率


要求以的方式返回查询向量的k个“最近邻”,具体操作如下:

(1) 将向量排列成一棵树(基数树)

(2) 使用模糊条件查询树,换句话说,如果树的每个节点上的值的差异在阈值内,则匹配

(3) 从(2)生成包含所有匹配向量的子树

(4) 现在,在具有较小阈值的子树上重复过程(2)


继续,直到子树有K个项目。如果K的项目太少,则使用上一棵树,计算子树每个成员的Jacard距离,并进行排序以消除最差的匹配,直到只剩下K个项目。

我可能会晚一点,但我建议

它适用于L2距离/点积相似性度量,有点复杂,但在时间和内存方面特别有效


它也在中实现,所以您也可以看看。

回答我自己的问题6年后,有一个近似近邻搜索的基准,有许多算法来解决这个问题:,目前的赢家是“分层可导航小世界图”:

您可以使用现成的相似性搜索服务,如AWS-ES或Pinecone.io。

是一个更直接的链接。但请注意,它们不测试二进制相似性搜索(如minhash);小世界图也有自己的问题(需要二次时间来构建;不要在硬数据集上工作)多亏了“二进制相似性搜索”,我猜你指的是通过Jacquard集相似性系数进行相似性搜索,比如minhash(与欧几里得距离、余弦或汉明距离度量相反)Jaccard,还有其他关于二进制数据的相似性度量: