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

Аналогічно, техніка MinHashing, описана в главі 3 книги MMDS:

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)

Відповіді:


3

Як правильно вказано вище, MinHash і SimHash обидва належать до Locality Sensitive Hashing. Довідка: https://en.wikipedia.org/wiki/Locality-sensitive_hashing

Основна відмінність між ними - спосіб керування зіткненням,

  1. SimHash, використовує косинусну схожість
  2. MinHash, використовує індекс Жаккарда.

Відповіді на ваші запитання:

  1. Ні. Вони використовують різні методи поводження зіткненнями для перевірки подібності. Також є варіант для однієї функції Hash для Min Hash, але вона працює інакше. Для отримання більш детальної інформації див. Наступну посилання: https://en.wikipedia.org/wiki/MinHash (Варіант з однією хеш-функцією)
  2. Так, https://github.com/chrisjmccormick/MinHash/blob/master/runMinHashExample.py
  3. Я думаю, що складність може бути зменшена до із зміненою формою бінарного пошуку під час кластеризації.O(nlogn)

SimHash та MinHash не використовують ці функції подібності. Я думаю, що краще сказати, що вони створюють дайджести, які наближають ці функції.
Олексій Григорьов

@AlexeyGrigorev Я трохи розгублений. Я подивився в наступну реалізацію для minHash 'computeSimilarityFromSignatures @ посилання . Він використовує | HashedArray (A) & HashedArray (B) | / (загальна кількість записів)
Pramit
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.