2014-12-30 30 views
7

Ich kenne die LSH (Locality Sensitive Hashing) -Techniken von SimHash und MinHash. SimHash verwendet Kosinusähnlichkeit über reellwertige Daten. MinHash berechnet Ähnlichkeit Ähnlichkeit über Binärvektoren. Aber ich kann nicht entscheiden, welches besser wäre.Auswahl zwischen SimHash und MinHash für ein Produktionssystem

Ich erstelle ein Backend-System für eine Website, um in der Nähe von Duplikaten von semi-strukturierten Textdaten zu finden. Beispiel: Jeder Datensatz enthält einen Titel, eine Position und eine kurze Beschreibung (< 500 Wörter).

Spezifische Sprachimplementierung beiseite, welcher Algorithmus wäre am besten für ein Greenfield-Produktionssystem geeignet?

+2

[MinHash vs SimHash mit Algorithmus Erklärung] (https://moz.com/devblog/near-duplicate-detection/) – gavenkoa

Antwort

4

Simhash ist schneller (sehr schnell) und erfordert in der Regel weniger Speicherplatz, sondern legt eine strenge Begrenzung, wie unähnlich zwei Dokumente und noch als Duplikate erkannt werden können. Wenn Sie einen 64-Bit-Simhash (eine häufige Wahl) verwenden und abhängig davon, wie viele permutierte Tabellen Sie speichern können, sind Sie möglicherweise darauf beschränkt, Entfernungen von nur 3 oder möglicherweise sogar 6 oder 7 zu hämmern sind kleine Hamming-Distanzen! Sie werden darauf begrenzt sein, Dokumente zu entdecken, die größtenteils identisch sind, und selbst dann müssen Sie möglicherweise sorgfältig prüfen, welche Funktionen Sie wählen, um in den Simhash zu gehen und welche Gewichtungen Sie ihnen geben.

Die Generation der Simhashes ist von Google patentiert, obwohl sie in der Praxis zumindest einen nichtkommerziellen Gebrauch zuzulassen scheinen.

Minhash verwendet mehr Speicher, da Sie in der Regel 50-400 Hashes pro Dokument speichern würden, und es ist nicht so CPU-effizient wie simhash, aber es ermöglicht es Ihnen, ganz weit entfernt Ähnlichkeiten zu finden, zum Beispiel so niedrig wie 5% geschätzte Ähnlichkeit, wenn Sie wollen. Es ist auch ein bisschen leichter zu verstehen als simhash, insbesondere in Bezug auf die Funktionsweise der Tabellen. Es ist ziemlich einfach zu implementieren, typischerweise mit Shingling, und braucht nicht viel Tuning, um gute Ergebnisse zu erzielen. Es ist (meines Wissens) nicht patentiert.

Wenn Sie mit großen Daten zu tun haben, die meisten CPU-intensive Teil des minhash Ansatz wird wahrscheinlich nach Sie die minhashes für das Dokument erzeugt haben, wenn Sie durch Ihre Tabelle Jagd sind andere zu finden Dokumente, die einige ihrer Hashes teilen. Es kann Zehntausende oder Hunderttausende von Dokumenten geben, die mindestens einen Hash mit ihm teilen, und Sie müssen sich durch all diese Dinge kämpfen, um diejenigen zu finden, die z. mindestens die Hälfte seiner Hashes. Simhash ist hier viel schneller.

Wie Otmar in seinem Kommentar unten erwähnt, gibt es Optimierungen von Minhash, mit denen Sie die gleiche Genauigkeit bei Ihren Ähnlichkeitsschätzungen mit weniger Hashes pro Dokument erreichen können. Dies kann die Menge an Unkraut, die Sie tun müssen, erheblich reduzieren.

Edit:

ich jetzt superminhash versucht haben. Es ist ziemlich schnell, obwohl meine Implementierung von Minshash using a single hash function plus bit-transformations to produce all the other hashes für meine Zwecke schneller war. Es bietet genauere jaccard-Schätzungen, etwa 15% besser in einigen Situationen, die ich getestet habe (obwohl fast kein Unterschied unter anderen). Dies bedeutet, dass Sie ungefähr ein Drittel weniger Hashes benötigen, um die gleiche Genauigkeit zu erreichen. Wenn Sie weniger Hashes in Ihrer Tabelle speichern, bedeutet dies, dass weniger "Jäten" erforderlich ist, um nahe Duplikate zu identifizieren, was zu einer erheblichen Beschleunigung führt. Mir ist kein Patent auf Superminhash bekannt.Danke Otmar!

+0

Es gibt einige Entwicklungen, die minwise kompakter gemacht (Li, Ping, und Christian König Hashing "b-Bit minwise Hashing.". Proceedings der 19. internationalen Konferenz über World Wide Web. ACM, 2010) und viel schneller ( Shrivastava, Anshumali. "Optimale Verdichtung für eine schnelle und genaue minwise Hashing." arXiv Preprint arXiv: 1703.04664 (2017); Dahlgaard, Søren, ua "Fast Similarity Sketching." arXiv preprint arXiv: 1704.04370 (2017); Ertl, Otmar. "SuperMinHash-Ein neuer Minwise Hash Algorithmus für Jaccard Similarity Estimation. "arXiv preprint arXiv: 1706.05698 (2017)). – otmar

+0

Danke Otmar! Ich habe meine Antwort bearbeitet, um mehr über verschiedene Aspekte der Effizienz zu erklären und insbesondere Ihren Superminhash-Algorithmus zu erwähnen. –