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!
[MinHash vs SimHash mit Algorithmus Erklärung] (https://moz.com/devblog/near-duplicate-detection/) – gavenkoa