3

我正在使用 simhash,但也看到 minhash 更有效。
但我不明白。
请为我解释一下:minhash 比 simhash 有什么优势?

4

2 回答 2

3

与 minhash 相比,Simhash 速度更快且内存需求通常更小,但受限于它只能检测非常接近的相似性这一事实。如果两个项目的差异超过少量,则不会检测到它们的相似性。另一方面,Minhash 可用于检测甚至非常遥远的相似性,例如彼此之间只有 5% 相似性的项目。Simhash 的理解也有点复杂。

Minhash 依赖于为每个项目生成多个散列,例如,通常在 20 到 400 个 64 位散列之间。这些散列值都需要存储,连同它们所属的项目的 ID,由散列索引。要查找与给定项目具有例如 50% 估计相似性的所有项目,您必须找到共享至少 50% 给定项目哈希值的所有其他项目。这可能涉及枚举相当多的 hash-itemID 对。

另一方面,Simhash 对每个项目只使用一个散列,例如 64 位散列;并且这个散列的生成使得非常相似的项目将具有非常相似的位模式的散列。该散列必须(连同项目的 ID)存储在多个表(例如 8 个不同的表)中,每个表以不同的方式排列散列的位,并且每个表按数字顺序对置换的散列进行排序。使用多个表可以实现一个巧妙的技巧,您可以快速找到与给定散列最多相差k位的所有散列;问题是k不能很大:根据您希望存储的项目数量、整个散列中有多少位以及您可以在内存中保留多少表,k可能低至 3 或可能高达6 或 7. 看到这个simhash 的解释

Minhash 和 simhash 的速度都取决于将表保存在主内存中,但如果您需要克服内存限制,两者都可以在多台机器上拆分。创建 simhash 的方法由谷歌持有的专利保护,尽管它们似乎至少允许该算法的非商业用途。

于 2017-09-25T23:07:02.640 回答
0

在 simhash 中,我们不需要存储超平面。它的误差范围稍差。Simhash 讲座

于 2017-05-30T14:01:07.387 回答