MinHashing vs SimHashing


12

Angenommen, ich habe fünf Gruppen, die ich gruppieren möchte. Ich verstehe, dass die hier beschriebene SimHashing-Technik:

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

ergeben könnte drei Cluster ( {A}, {B,C,D}und {E}), zum Beispiel, wenn seine Ergebnisse sind:

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

Ebenso die in Kapitel 3 des MMDS-Buches beschriebene MinHashing-Technik:

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

könnten auch die gleichen drei Cluster ergeben, wenn die Ergebnisse wären:

A -> h01 - h02 - h03

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

E -> h11 - h12 - h13

(Jeder Satz entspricht einer MH-Signatur, die aus drei "Bändern" besteht, und zwei Sätze werden gruppiert, wenn mindestens eines ihrer Signaturbänder übereinstimmt. Mehr Bänder bedeuten mehr Übereinstimmungschancen.)

Ich habe jedoch einige Fragen im Zusammenhang mit diesen:

(1) Kann SH als Einzelbandversion von MH verstanden werden?

(2) Bedeutet MH notwendigerweise die Verwendung einer Datenstruktur wie Union-Find zum Aufbau der Cluster?

(3) Habe ich Recht, wenn ich denke, dass die Cluster in beiden Techniken tatsächlich "Vor-Cluster" sind, in dem Sinne, dass sie nur Mengen von "Kandidatenpaaren" sind?

(4) Wenn (3) wahr ist, muss ich dann noch eine -Suche in jedem "Pre-Cluster" durchführen, um sie weiter in "echte" Cluster zu unterteilen? (Das könnte vernünftig sein, wenn ich viele kleine und ziemlich ausgeglichene Vor-Cluster habe, sonst nicht so sehr)Ö(n2)

Antworten:


3

Wie bereits erwähnt, gehören sowohl MinHash als auch SimHash zu Locality Sensitive Hashing. Referenz: https://en.wikipedia.org/wiki/Locality-sensitive_hashing

Der Hauptunterschied zwischen den beiden ist die Art und Weise, wie mit Kollisionen umgegangen wird.

  1. SimHash verwendet Cosinus-Ähnlichkeit
  2. MinHash verwendet Jaccard Index.

Antworten auf Ihre Fragen:

  1. Nein. Sie verwenden unterschiedliche Kollisionshandhabungstechniken, um die Ähnlichkeit zu überprüfen. Es gibt auch eine Variante der einzelnen Hash-Funktion für Min Hash, die jedoch anders funktioniert. Weitere Informationen finden Sie in der folgenden Referenz: https://en.wikipedia.org/wiki/MinHash (Variante mit einer einzelnen Hash-Funktion)
  2. Ja, https://github.com/chrisjmccormick/MinHash/blob/master/runMinHashExample.py
  3. Ö(nLogn)

SimHash und MinHash verwenden diese Ähnlichkeitsfunktionen nicht. Ich denke, ein besserer Weg zu sagen wäre, dass sie Digests erstellen, die sich diesen Funktionen annähern.
Alexey Grigorev

@AlexeyGrigorev Ich bin ein wenig verwirrt. Ich habe die folgende Implementierung für minHash 'computeSimilarityFromSignatures' @ link untersucht . Es verwendet ein | HashedArray (A) & HashedArray (B) | / (Gesamtzahl der Einträge)
Pramit
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.