关于 LSH(Locality-sensitive hashing)和 minihash 实现的问题

Posted

技术标签:

【中文标题】关于 LSH(Locality-sensitive hashing)和 minihash 实现的问题【英文标题】:Questions about LSH (Locality-sensitive hashing) and minihashing implementation 【发布时间】:2021-10-31 08:03:07 【问题描述】:

我正在尝试实施这篇论文

Browser Fingerprint Coding Methods Increasing the Effectiveness of User Identification in the Web Traffic

我有几个关于 LHS 算法和建议实现的问题:

只有当您有很多文档要相互比较时才使用 LSH 算法(因为它应该将相似的文档放在同一个桶中)。例如,如果我有一个新文档,我想计算与其他文档的相似度,我必须从头开始重新启动 LHS 算法,包括新文档,对吗?

在“Mining of Massive Datasets, Ch3”中,据说对于 LHS,我们应该在每个波段使用一个哈希函数。每个哈希函数创建 n 个桶。 所以,对于第一个波段,我们将有 n 个桶。对于第二个波段,我应该继续使用相同的散列函数(这样我就可以继续使用与以前相同的存储桶)还是另一个(以 m>>n 存储桶结束)?

这个问题与上一个问题有关。如果我对所有波段使用相同的哈希函数,那么我将有 n 个桶。这里没问题。但是如果我必须使用更多的哈希函数(每行一个不同的函数),我最终会得到很多不同的桶。我应该测量每个桶中每一对的相似度吗? (如果我必须只使用一个哈希函数,那么这不是问题)。

在论文中,我理解了算法的大部分内容,除了它的结尾。 基本上,通过 minhashing 创建了两个签名矩阵(一个用于稳定特征,一个用于不稳定特征)。然后,他们在第一个矩阵上使用 LSH 来获得候选对列表。到目前为止,一切都很好。 最后会发生什么?他们在第二个矩阵上执行 LHS 吗?如何使用第一个 LHS 的结果?我看不到第一个和第二个 LHS 之间的关系。

最后一步的输出应该是配对候选列表,对吧?我所要做的就是对它们进行 Jaccard 相似性并设置一个阈值,对吗?

感谢您的回答!

【问题讨论】:

【参考方案1】:

我的问题得到了部分答案(仍然缺少问题 4)

    没有。您将保留存储桶结构并将新文档散列到其中。然后仅与它落入其中一个存储桶中的那些文档进行比较。

    没有。您必须为每个哈希函数使用不同的哈希函数和一组不同的桶。

    这无关紧要,因为 (2) 的答案。

【讨论】:

以上是关于关于 LSH(Locality-sensitive hashing)和 minihash 实现的问题的主要内容,如果未能解决你的问题,请参考以下文章

局部敏感哈希(Locality-Sensitive Hashing, LSH)方法介绍(转)

局部敏感哈希(Locality-Sensitive Hashing, LSH)

二进制特征和局部敏感哈希 (LSH)

Locality-sensitive hashing

局部敏感哈希 Kernelized Locality-Sensitive Hashing Page

LSH︱python实现局部敏感哈希——LSHash