局部敏感哈希(LSH)如何运作?

时间:2016-06-14 02:45:26

标签: hash similarity nearest-neighbor locality-sensitive-hash bigdata

我已经阅读了this question,但不幸的是它没有帮助。

我不理解的是,一旦我们了解了哪个存储桶分配给我们的高维空间查询向量q,我们就会做什么:假设使用我们的一组局部敏感族函数h_1,h_2,...,h_n我们已将q翻译为低维(n维度)哈希码c

然后c是分配q的桶的索引,其中(希望)也分配给它最近的邻居,假设有100个向量。

现在,我们为了找到q的NN而做的是计算{100}向量<{1}}和之间的距离这100个向量,是正确?因此q的使用仅用于索引(它仅用于决定将c分配给哪个桶),对吧?

另一种解决方案,如this调查(第2.2节)中所述,是&#34;散列表查找的替代方案&#34; (前面描述的方法)是&#34;快速距离近似&#34;所以我们进行详尽的研究,我们计算q和生成的哈希码相对于数据集中每个元素的距离。这应该是快速的,因为哈希码在低维空间中并且距离应该更快计算(例如,如果哈希码空间是二进制的,那么我们可以使用XOR运算符来快速计算汉明两个哈希码之间的距离)。

现在,我想知道的是:这两种方法的优点/缺点是什么?为什么我应该使用一种方法而不是另一种方法?

1 个答案:

答案 0 :(得分:2)

第一个描述的方法解释了近似最近邻搜索。是的,只需检查垃圾箱c中的其他100个项目,您就可以获得最佳性能,但是在其他相邻存储桶中错过优秀候选人的风险更高。

lat / lon坐标的简单哈希方案是Geohash。您可以通过查看同一Geohash区域内的项目找到最近的商店,但在网格边界附近可能会得到不准确的结果。

可以找到快速距离近似的一个示例here,它找到具有足够小的汉明距离的图像匹配(利用pHash)。由于哈希只有64位长,因此笔记本电脑GPU可以进行7亿次/秒的比较。请注意,将检查所有图像,不使用索引或散列数据结构。通过这种方式,您可以保证获得所有匹配(在pHash空间中)。