hash - 局部敏感哈希 (LSH) 如何工作?

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

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

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

然后,cq 分配到的存储桶的索引,并且(希望)也分配到其最近的邻居,假设有 100 个向量。

现在,为了找到 q 的神经网络,我们要做的就是计算 q这 100 个向量之间的距离, 那是对的吗?所以 c 的使用仅用于索引(它仅用于决定将 q 分配给哪个存储桶),对吧?


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

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

最佳答案

第一个描述的方法解释了近似最近邻搜索。是的,只需检查 bin c 中的其他 100 个项目即可获得最佳性能,但错过其他相邻存储桶中的良好候选者的风险更高。

纬度/经度坐标的简单散列方案是 Geohash 。您可以通过查看同一 Geohash block 内的商品来找到最近的商店,但在网格边界附近可能会出现不准确的结果。

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

关于hash - 局部敏感哈希 (LSH) 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37802137/

相关文章:

javascript - Firefox 中的 window.location.hash 问题

windows - Shlwapi.dll中的HashData是基于什么哈希算法?

php - CakePHP中的唯一 token

python - 创建原型(prototype)向量进行比较

algorithm - 高维空间的近似最近邻 (A1NN)

python - 文本相似度分析(Excel)

python - 如何哈希列表?

kernel - 使用 OpenCL 内核的最近邻插值代码

c - 使用谷歌的 C KD 树库

encryption - 你如何获得一个 zip 文件的密码哈希?