Yöreye Duyarlı Hashing nasıl anlaşılır?


156

LSH'nin yüksek boyutlu özelliklere sahip benzer öğeleri bulmanın iyi bir yolu olduğunu fark ettim.

Http://www.slaney.org/malcolm/yahoo/Slaney2008-LSHTutorial.pdf makalesini okuduktan sonra hala bu formüllerle kafam karıştı.

Herkes kolay yolu açıklayan bir blog veya makale biliyor mu?


3
Ullman Bölüm 3 - "BENZER ÜRÜNLER BULMA" infolab.stanford.edu/~ullman/mmds.html
achini

Yanıtlar:


250

LSH için gördüğüm en iyi öğretici şu kitapta yer alıyor: Devasa Veri Kümeleri Madenciliği. Bölüm 3'ü kontrol edin - Benzer Öğeleri Bulma http://infolab.stanford.edu/~ullman/mmds/ch3a.pdf

Ayrıca aşağıdaki slaydı da öneriyorum: http://www.cs.jhu.edu/%7Evandurme/papers/VanDurmeLallACL10-slides.pdf . Slayttaki örnek, kosinüs benzerliği için karmaşayı anlamamda bana çok yardımcı oluyor.

ACL2010 Benjamin Van Durme ve Ashwin Lall'dan iki slayt ödünç alıyorum ve LSH Ailelerinin Kosinüs Mesafesi'nin sezgilerini biraz açıklamaya çalışıyorum. resim açıklamasını buraya girin

  • Şekilde iki adet iki boyutlu veri noktasını temsil eden kırmızı ve sarı renkli iki daire vardır . LSH kullanarak kosinüs benzerliklerini bulmaya çalışıyoruz .
  • Gri çizgiler, rasgele rastgele seçilmiş bazı düzlemlerdir.
  • Veri noktasının gri bir çizginin üstünde mi yoksa altında mı olduğuna bağlı olarak, bu ilişkiyi 0/1 olarak işaretleriz.
  • Sol üst köşede, iki veri noktasının imzasını temsil eden iki sıra beyaz / siyah kareler vardır. Her kare bir bit 0 (beyaz) veya 1 (siyah) 'a karşılık gelir.
  • Böylece, bir uçak havuzunuz olduğunda, veri noktalarını uçaklarla ilgili konumlarıyla kodlayabilirsiniz. Havuzda daha fazla düzlemimiz olduğunda, imzada kodlanan açısal farkın gerçek farka daha yakın olduğunu düşünün. Çünkü sadece iki nokta arasında bulunan düzlemler iki veriye farklı bit değeri verecektir.

resim açıklamasını buraya girin

  • Şimdi iki veri noktasının imzasına bakıyoruz. Örnekte olduğu gibi, her bir veriyi temsil etmek için sadece 6 bit (kare) kullanıyoruz. Bu, sahip olduğumuz orijinal veriler için LSH karmasıdır.
  • İki karma değeri arasındaki sıkıştırma mesafesi 1'dir, çünkü imzaları sadece 1 bit farklıdır.
  • İmzanın uzunluğu göz önüne alındığında, grafikte gösterildiği gibi açısal benzerliklerini hesaplayabiliriz.

Ben burada kosinüs benzerliği kullanan python bazı örnek kod (sadece 50 satır) var. https://gist.github.com/94a3d425009be0f94751


neden bu yere duyarlıdır?
nawara

21
bölgeye duyarlı - birbirine yakın bulunan veri noktaları benzer karma değerlerle eşleştirilir (yüksek olasılıkla aynı grupta).
greeness

2
Üzgünüm, bu konuya geç kaldım ama kosinüs hakkında bir sorum vardı. Sunum, gerçek vektör ile düzlem vektörü> = 0 arasındaki nokta çarpımı veya bit 0 ise bit değerinin bir olduğunu söyler. Düzlem vektörünün yönü nedir çünkü 90 derece ile 180 derece arasındaki açılar da bir negatif olan kosinüs. Her bir düzlemin iki vektörden oluştuğunu ve gerçek vektörle yapılan daha küçük açıyı aldığımızı düşünüyorum.
vkaul11

Teşekkür ederim. Öyleyse, h'nin açısal farkı kodladığını ve b'nin "hassas" olduğunu söylemek doğru mudur? Bunun gibi h * PI'nın ışıltılı teta olduğunu ve b açının kesinliğini anlıyorum.
user305883

1
Sağladığınız slayt çok düzgün: cs.jhu.edu/~vandurme/papers/VanDurmeLallACL10-slides.pdf - "havuzlama hilesi" nin matematiksel mantığını ya da doğrusal cebirin kavramlarını da açıklayabilir misiniz? anlamak için?
user305883


21

İşte Stanford'dan bunu anlatan bir sunum. Benim için büyük bir fark yarattı. İkinci bölüm LSH hakkında daha fazladır, ancak birinci bölüm de kapsamaktadır.

Genel bakışın bir resmi (Slaytlarda çok daha fazlası var):

resim açıklamasını buraya girin

Yüksek Boyutlu Verilerde Komşuya Yakın Arama - Bölüm1: http://www.stanford.edu/class/cs345a/slides/04-highdim.pdf

Yüksek Boyutlu Verilerde Komşuya Yakın Arama - Bölüm2: http://www.stanford.edu/class/cs345a/slides/05-LSH.pdf


Neden minhash'ı doğrudan LSH işleviniz olarak kullanmıyorsunuz?
Thomas Ahle

1
Kova başına yinelenmeyenlerin sayısının yeterince yüksek kaldığına inanıyorum, ancak bu tür bağımsız hash işlevlerini kullanırsak, aynı kovayla eşleşmeyen yakın kopyaların eşleşme olasılığı önemli ölçüde azalır.
Shatu

7
  • LSH, bir dizi belge / resim / nesne girdisi olarak alan ve bir tür Karma Tablo çıktısı alan bir prosedürdür.
  • Bu tablonun indeksleri, aynı endeksteki belgelerin benzer kabul edileceği ve farklı indekslerdeki belgelerin " farklı " olduğu belgeleri içerir .
  • Burada benzer metrik sistemine bağlıdır ve ayrıca bir eşik benzerlik ilgili s LSH küresel bir parametre gibi davranır.
  • Bu neyi yeterli eşik tanımlamak için size kalmış s sorununuza içindir.

resim açıklamasını buraya girin

Farklı benzerlik önlemlerinin farklı LSH uygulamalarına sahip olduğunun altını çizmek önemlidir.

Blogumda, minHashing (jakar benzerlik ölçüsü) ve simHashing (kosinüs mesafesi ölçüsü) vakaları için LSH'yi ayrıntılı olarak açıklamaya çalıştım. Umarım faydalı bulursunuz: https://aerodatablog.wordpress.com/2017/11/29/locality-sensitive-hashing-lsh/


2

Ben görsel bir insanım. İşte benim için bir sezgi olarak işe yarayan.

Aramak istediğiniz her şeyin yaklaşık olarak elma, küp, sandalye gibi fiziksel nesneler olduğunu varsayalım.

Bir LSH için sezgim, bu nesnelerin gölgelerini almanın benzer olmasıdır. Bir 3D küpün gölgesini alırsanız, bir kağıt parçası üzerinde 2D kare benzeri bir şey elde edersiniz veya 3D küre size bir kağıt parçası üzerinde daire benzeri bir gölge verir.

Sonunda, bir arama probleminde (metindeki her kelimenin bir boyut olabileceği) üçten fazla boyut vardır, ancak gölge benzetmesi benim için hala çok yararlıdır.

Artık yazılımdaki bit dizelerini verimli bir şekilde karşılaştırabiliriz. Sabit uzunluklu bit dizesi, tek bir boyuttaki bir çizgi gibi, az çok.

Bir LSH ile, nesnelerin gölgelerini sonunda tek bir sabit uzunluk çizgisi / bit dizesine nokta (0 veya 1) olarak yansıtırım.

Bütün hile, gölgeleri alt boyutta hala mantıklı olacak şekilde almaktır, örneğin orijinal nesneye tanınabilecek kadar iyi benzemektedirler.

Bir küpün perspektif olarak 2B çizimi bana bunun bir küp olduğunu söylüyor. Ama bir 2D kareyi, perspektifsiz bir 3D küp gölgesinden kolayca ayırt edemiyorum: ikisi de bana bir kare gibi görünüyor.

Nesnemi ışığa nasıl sunacağım, iyi tanınabilir bir gölge alıp almadığımı belirler. Bu yüzden "iyi" bir LSH'yi nesnelerimi bir ışık önünde çevirecek olan gölge olarak düşünüyorum, böylece gölgeleri en iyi nesneyi temsil ediyor olabilir.

Özetlemek gerekirse: Bir LSH ile küp, masa veya sandalye gibi fiziksel nesneler olarak endekslenecek şeyleri düşünüyorum ve gölgelerini 2D ve sonunda bir çizgi boyunca (biraz dize) yansıtıyorum. Ve "iyi" LSH "fonksiyonu" 2B düzlükte ve daha sonra bit dizimde yaklaşık ayırt edilebilir bir şekil elde etmek için nesnelerimi bir ışık önünde nasıl sunacağım.

Sonunda sahip olduğum bir nesnenin indekslediğim bazı nesnelere benzer olup olmadığını araştırmak istediğimde, bu "sorgu" nesnesinin gölgelerini, nesneyi ışığın önünde sunmak için aynı yolu kullanarak alıyorum (sonunda biraz bitiyor) dize). Ve şimdi, bu bit dizesinin, diğer tüm dizinlenmiş bit dizelerimle ne kadar benzer olduğunu karşılaştırabilirim; bu, nesnelerimi ışığa sunmanın iyi ve tanınabilir bir yolunu bulursam, tüm nesnelerimı aramak için bir proxy.


0

Çok kısa bir cevap olarak , tldr cevabı:

Yere duyarlı karma işleminin bir örneği, ilk olarak karma girdilerinizde düzlemleri rastgele (bir döndürme ve ofset ile) ayarlamak ve daha sonra puanlarınızı boşluktaki karma değerine bırakmak ve her düzlem için noktanın üstünde veya altında (örneğin: 0 veya 1) ve cevap hashtir. Dolayısıyla, uzayda benzer noktalar, kosinüs mesafesi önce veya sonra ölçülürse benzer bir karmaya sahip olacaktır.

Bu örneği scikit-learn kullanarak okuyabilirsiniz: https://github.com/guillaume-chevalier/SGNN-Self-Governing-Neural-Networks-Projection-Layer

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.