我正在使用simhash,但也看到minhash更有效 但我不明白 请为我解释一下:simhash有什么更有利的minhash?
答案 0 :(得分:2)
Simhash速度更快,通常比minhash具有更小的内存要求,但它受到的限制是它只能检测到非常接近的相似性。如果两个项目的差异超过少量,则不会检测到它们的相似性。另一方面,Minhash可用于检测甚至相当远的相似性,例如彼此仅具有5%相似性的项目。 Simhash的理解也有点复杂。
Minhash依赖于为每个项目生成多个哈希值,例如通常介于20到400个64位哈希之间。这些哈希都需要存储,以及它们所属项目的ID,通过哈希索引。要查找所有包含例如50%估计与给定项目的相似度,您必须找到共享至少50%给定项目哈希值的所有其他项目。这可能涉及枚举相当多的hash-itemID对。
另一方面,Simhash每个项目只使用一个哈希值,例如: 64位哈希;并且生成这个散列,使得非常相似的项具有非常相似的位模式的散列。必须将此哈希值(以及项目的ID)存储在多个表中(例如,8个不同的表),每个表以不同的方式排列哈希的位,并且每个表按数字顺序排列置换的哈希值。使用多个表可以实现一个聪明的技巧,您可以快速找到给定哈希中最多 n 位的所有哈希值;问题是 n 不能很大:取决于您希望存储的项目数,整个哈希中有多少位,以及您可以在内存中保留多少个表, n < / em>可能低至3或可能高达6或7。Minhash和simhash都依赖于他们将表保存在主内存中的速度,但是如果你需要克服内存限制,两者都可以分散在多台机器上。创建simhash的方法由Google持有的专利涵盖,但它们似乎至少允许非商业化使用该算法。
答案 1 :(得分:0)
在simhash中,我们不需要存储超平面。它的误差范围稍差。Simhash lecture