MinHashing vs SimHashing


12

假设我有五组要聚类。我了解SimHashing技术在这里描述:

https://moultano.wordpress.com/2010/01/21/simple-simhashing-3kbzhsxyg4467-6/

可能产生三个集群({A}{B,C,D}{E}),举例来说,如果其结果是:

A -> h01
B -> h02
C -> h02
D -> h02
E -> h03

同样,MMDS书籍的第3章中介绍了MinHashing技术:

http://infolab.stanford.edu/~ullman/mmds/ch3.pdf

如果其结果是,也可以产生相同的三个聚类:

A -> h01 - h02 - h03

B -> h04 - h05 - h06
      |
C -> h04 - h07 - h08
                  |
D -> h09 - h10 - h08

E -> h11 - h12 - h13

(每组对应一个由三个“带”组成的MH签名,如果两个签名带中的至少一个匹配,则将这两组分组。更多的带意味着更多的匹配机会。)

但是我有几个与此有关的问题:

(1)可以将SH理解为MH 的单频段版本吗?

(2)MH是否必然暗示使用诸如Union-Find之类的数据结构来构建集群?

(3)我认为这两种技术中的聚类实际上只是“候选聚类”,也就是说它们只是“候选对”的集合,对吗?

(4)如果(3)为真,是否意味着我仍然必须在每个“预集群”内部进行搜索,以将它们进一步划分为“真实”集群?(如果我有很多小型且相当平衡的预丛集,那可能是合理的,否则就不那么多了)O(n2)

Answers:


3

正如上面正确指出的,MinHash和SimHash都属于“本地敏感哈希”。参考:https : //en.wikipedia.org/wiki/Locality-sensitive_hashing

两者之间的主要区别在于处理冲突的方式,

  1. SimHash,使用余弦相似度
  2. MinHash,使用Jaccard索引。

您的问题的答案:

  1. 否。他们使用不同的碰撞处理技术来验证相似性。最小哈希的单个哈希函数也有一个变体,但其工作方式有所不同。有关更多详细信息,请查阅以下参考资料:https ://en.wikipedia.org/wiki/MinHash(具有单个哈希函数的变体)
  2. 是的,https://github.com/chrisjmccormick/MinHash/blob/master/runMinHashExample.py
  3. 我认为可以通过在聚类时修改二进制搜索的形式将复杂度降低到。O(nlogn)

SimHash和MinHash不使用这些相似性功能。我认为一种更好的说法是,它们创建与这些功能近似的摘要。
阿列克谢·格里戈列夫

@AlexeyGrigorev我有点困惑。我研究了minHash'computeSimilarityFromSignatures'@ link的以下实现。它使用| HashedArray(A)&HashedArray(B)| /(条目总数)
Pramit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.