MinHashing vs SimHashing


12

Kümelenmek istediğim beş setim olduğunu varsayalım. Burada açıklanan SimHashing tekniğinin:

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

üç küme (verim olabilir {A}, {B,C,D}ve {E}örneğin,), sonuçları olsaydı:

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

Benzer şekilde, MMDS kitabının 3. Bölümünde açıklanan MinHashing tekniği:

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

sonuçları şu olsaydı aynı üç kümeyi de verebilirdi:

A -> h01 - h02 - h03

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

E -> h11 - h12 - h13

(Her grup üç "banttan" oluşan bir MH imzasına karşılık gelir ve imza bantlarından en az biri eşleşiyorsa iki grup gruplanır. Daha fazla bant daha fazla eşleşme şansı anlamına gelir.)

Ancak bunlarla ilgili birkaç sorum var:

(1) SH, MH'nin tek bant versiyonu olarak anlaşılabilir mi?

(2) MH, kümeleri oluşturmak için mutlaka Union-Find gibi bir veri yapısının kullanılmasını gerektiriyor mu?

(3) Her iki teknikte de kümelerin sadece "aday çiftler" kümeleri olmaları anlamında "ön kümeler" olduğunu düşünmekte haklı mıyım?

O(n2)

Yanıtlar:


3

Yukarıda belirtildiği gibi, MinHash ve SimHash her ikisi de Lokasyon Duyarlı Karma'ya aittir. Referans: https://en.wikipedia.org/wiki/Locality-sensitive_hashing

İkisi arasındaki temel fark, çarpışmanın ele alınış biçimidir,

  1. SimHash, kosinüs benzerliğini kullanır
  2. MinHash, Jaccard Dizinini kullanır.

Sorularınızın cevapları:

  1. Hayır. Benzerliği doğrulamak için farklı çarpışma yönetimi teknikleri kullanıyorlar. Ayrıca Min Hash için tek Hash Fonksiyonunda bir varyant var, ancak farklı çalışıyor. Daha fazla ayrıntı için, aşağıdaki referansı inceleyin, https://en.wikipedia.org/wiki/MinHash (Tek hash işlevine sahip varyant)
  2. Evet, https://github.com/chrisjmccormick/MinHash/blob/master/runMinHashExample.py
  3. O(nlogn)

SimHash ve MinHash bu benzerlik fonksiyonlarını kullanmaz. Bence bu işlevleri yaklaşık olarak özetleyen özümler yaratabileceklerini söylemenin daha iyi bir yolu.
Alexey Grigorev

@AlexeyGrigorev Biraz kafam karıştı. MinHash 'computeSlikeityFromSignatures' @ bağlantısı için aşağıdaki uygulamaya baktım . Bir | HashedArray (A) ve HashedArray (B) | / (toplam giriş sayısı) kullanır
Pramit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.