Belgeler arasındaki mesafeyi hesaplamanın bazı standart yolları nelerdir?


34

"Belge" derken, Wikipedia makaleleri ve haber hikayeleri gibi web sayfalarını da düşündüm. Vanilyalı sözcük uzaklık ölçütlerini ya da en gelişmiş anlamsal uzaklık ölçütlerini veren yanıtları tercih ediyorum, ikincisi için daha güçlü bir tercih.

Yanıtlar:


48

Tam olarak ne kadar anlamsal bilgiyi saklamak istediğinize ve belgelerinizin ne kadar kolay hale getirildiğine (html belgelerinin belirtilmesinin oldukça zor olacağını, ancak etiketler ve bağlamla bir şeyler yapabileceğiniz) bağlı olarak, bununla ilgili bir çok farklı yol vardır. .)

Bazıları arkadaş tarafından belirtilmiş ve kullanıcının 113029 paragrafı vektörleri gerçekten sağlam bir tane, ancak sadece farklı yaklaşımların artıları ve eksileri hakkında biraz daha derinlere ineceğimi düşündüm.

  • Cosine Distance - Gerçek bir kosinüs mesafesi denenmiş, muhtemelen çoklu alanlarda genel olarak kullanılan en yaygın mesafe ölçüsüdür. Bununla birlikte, kosinüs mesafesinden, anlamsal olan herhangi bir şeyle eşleştirilebilecek çok az bilgi var, bu durum için ideal değildir.
  • Levenshtein Uzaklığı - Ayrıca edit distance, genellikle sadece bireysel belirteç seviyesinde kullanılır (kelimeler, bigramlar, vb.). Genel olarak bu metriği yalnızca herhangi bir anlamsal bilgiyi atmadığı için değil, aynı zamanda çok farklı sözcük değişikliklerini de benzer şekilde ele alma eğiliminde değildir, ancak bu tür bir şey için oldukça yaygın bir ölçüttür.
  • LSA - Belge benzerliğini değerlendirmek söz konusu olduğunda geniş bir teknik cephaneliğin parçası topic modeling. LSA kısa süre önce modadan çıktı ve benim deneyimlerime göre, bu en güçlü konu modelleme yaklaşımı değil, ancak uygulanması oldukça kolay ve birkaç açık kaynak uygulaması var.
  • LDA - Aynı zamanda kullanılan bir tekniktir topic modeling, fakat LSAaslında daha yumuşak ve sezgisel olma eğiliminde olan içsel gösterimleri öğrenmesinden farklıdır . Genel olarak, elde ettiğiniz sonuçlar, LDAbelge benzerliğini modellemek için daha iyidir LSA, ancak konular arasında nasıl güçlü bir şekilde ayrımcılık yapıldığını öğrenmek için iyi değildir.
  • Pachinko Tahsis - LDA üstüne gerçekten temiz bir uzantısıdır. Genel olarak, bu sadece önemli ölçüde iyileştirilmiş bir versiyonudur LDA, sadece olumsuz yönleri eğitmek biraz daha uzun sürer ve açık kaynak uygulamaları gelmesi biraz daha zordur.
  • word2vec - Google akıllıca gibi tekniklerle elde seyrek vektörlerin daha makul vektörlere kelimeler ve belgeleri azaltmak için teknikler bir dizi üzerinde çalışıyor Count Vectorizersve TF-IDF. Word2vec, harika bir dizi açık kaynaklı uygulamaya sahip olduğu için mükemmeldir. Vektöre sahip olduğunuzda, üzerine herhangi bir diğer benzerlik metriği (kosinüs mesafesi gibi), üzerinde çok daha etkili bir şekilde kullanılabilir.
  • doc2vec - Ayrıca paragraph vectors, belgelerin yoğun vektör gösterimlerini inceleyen Google'ın bir dizi makalesinde en son ve en iyisi olarak da bilinir . gensimPython kütüphanesi bir uygulamasıdır sahip word2vecolduğu oldukça makul yapı için de yararlanılabilir o basit yeterlidir doc2vec, ancak bu yol gitmek istiyorum akılda lisansı tutmak için emin olun

Umarım bu yardımcı olur, herhangi bir sorunuz olursa bana bildirin.


6

Her biri lehte ve aleyhte olan birkaç anlamsal mesafe ölçüsü vardır. İşte bunlardan sadece birkaçı:

  • kosinüs mesafesi , belge özellik vektörleri arasındaki iç çarpım;
  • Başka bir vektör tabanlı model olan LSA , ancak orijinal terim evrak matrisini gürültüyü gidermek için SVD kullanan;
  • WordNet tabanlı, insan tarafından doğrulanabilir, ancak genişletilebilir olsa bile.

En basit bir yaklaşımla başlayın ve sonra davanızla ilgili sorunlara göre devam edin.


1
LSA yaparken, genellikle orijinal veri setinin LSA projeksiyonlarında kosinüs mesafesini kullandığınızı unutmayın. Sadece netleştirmek için.
Simon,

6

Ampirik olarak LSA'yı her zaman ve denediğim her veri setinde LDA'dan çok daha üstün buldum. Aynı şeyi söyleyen diğer insanlarla konuştum. Ayrıca, belgeler arasında semantik benzerliği ölçmek için, çoğunlukla wordnet tabanlı bir ölçütle kombinasyon halinde olmak üzere, SemEval yarışmalarının birçoğunu kazanmak için de kullanıldı, bu yüzden modası geçtiğini veya kesinlikle daha iyi olan LDA'ya göre daha düşük olduğunu söyleyemem. Konu modellemesi ve deneyimlerime göre anlamsal benzerlik değil, bazı cevaplayıcıların söylediklerinin aksine.

Eğer gensim (bir python kütüphanesi) kullanıyorsanız, LSA, LDA ve word2vec'e sahiptir, bu yüzden kolayca karşılaştırabilirsiniz. açık kaynak uygulamalarından habersiz. Her belgede olduğu gibi ölçeklendirilemez, yavaş makine öğrenme algoritması olan SGD kullanılarak yeni ve ayrı bir model oluşturulmalıdır. Ama muhtemelen size en doğru sonuçları verecektir. LSA ve LDA da iyi ölçeklendirilmiyor (ancak word2vec bunu yapıyor), LDA genel olarak daha kötü ölçekleniyor. Gensim'in uygulamaları yinelemeli SVD kullandığı için çok hızlı.

Bir başka not, eğer word2vec kullanıyorsanız, yine de her kelime için farklı bir vektör verdiğinden, dokümanlardan vektörler oluşturmanın bir yolunu belirlemeniz gerekecektir. Bunu yapmanın en basit yolu, her bir vektörü normalleştirmek ve belgedeki tüm sözcük vektörleri üzerinde ortalamayı almak veya her bir kelimenin idf ağırlığı ile ağırlıklı bir ortalama almaktır. Bu yüzden 'use word2vec' kadar basit değil, belge benzerliğini hesaplamak için daha fazla bir şey yapmanız gerekecek.

Ben şahsen LSA'ya giderdim, çünkü deneysel olarak iyi çalıştığını görmüştüm ve gensim'in kütüphanesi çok iyi ölçekleniyor. Ancak, ücretsiz öğle yemeği yoktur, bu nedenle tercihen her yöntemi deneyin ve verileriniz için hangisinin daha iyi olduğunu görün.


LSA'yı tam olarak nasıl kullandınız? LDA'nın, genel olarak ampirik olarak büyük ölçüde arttırdığı gösterilen LSA (önceki bir dirchlet ile pLSA) çevresinde oldukça ince bir ambalaj olduğunu belirtmekte fayda var. Neredeyse kesinlikle LSA ile daha iyi doğruluklar göreceksiniz, ancak bu genellikle LSA ile çok kayda değer bir problem olan aşırı uydurmanın bir sonucudur. Ayrıca, burada ölçeklendirme ile tam olarak ne demek istiyorsunuz? doc2vec aslında her belge için yeni bir model gerektirmez ve hesaplama için LSA ile LDA arasında her ikisi de çok ölçeklenebilir olmak üzere kayda değer bir fark yoktur.
Slater Victoroff

LSA ile uyumu gözlemlemedim ve dediğim gibi, LDA konusunda daha iyi performans gösteren birçok kişiyle tanıştım. Ayrıca, LSA'yı yarı finalli yarışmalarda birçok kazanma yarışmasında kullandığını, kazanılan bir yarışmaya katıldığı bir LDA'yı hiç görmedim. Dokümanlar arasındaki anlamsal benzerliği karşılaştırmak için yapılan akademik konferans bu yüzden ne yaptıklarını bildiklerini sanıyorum. Doc2vec, Mikolov'un paragraf vektörü uygulamasına atıfta bulunuyorsanız, her bir belge için ayrı ayrı SGD yapar. Bu yüzden çok yavaş.
Simon,

@SlaterVictoroff Bence çok yorucu olduğunu söyleyen şeyler olduğunu bitti. LDA'nın arama / bilgi alma ve öneri durumları için zayıf olduğu bilinmektedir, ampirik olarak LSA'nın daha iyi çalıştığı ve bu bulguları kendi verilerimize göre doğrulamak istediğim gibi kendi deneyimlerime uygun olduğu gösterilmiştir. Doc2Vec'in sürümleri belge başına bir gradyan iniş yapar, bu genellikle bir çok farklı algoritmaya değindiğinden, Doc2Vec'te kullanılan algoritmaya bağlıdır.
Simon,

3

Sanatın durumu, son bir makalede tanıtılan "paragraf vektörleri" gibi görünmektedir: http://cs.stanford.edu/~quocle/paragraph_vector.pdf . Paragraf vektörleri arasındaki kosinüs / Öklid mesafesi muhtemelen diğer yaklaşımlardan daha iyi sonuç verir. Bu muhtemelen açık kaynak kodlu uygulamaların yetersizliğinden dolayı mümkün değildir.

Bir sonraki en iyi şey, LSA vektörleri arasındaki kosinüs mesafesi veya ham BOW vektörleri arasındaki kosinüs mesafesidir. Bazen TF-IDF gibi farklı ağırlıklandırma şemaları seçmek daha iyi çalışır.


Paragraf vektörü ölçeklenebilirliği hakkındaki yorumlarımı not edin. Bu teknik çok umut verici görünüyor, ama uygulamak zordur ve çok maliyetlidir her belge için ayrı bir SGD yapıyoruz gibi kağıdı doğru hatırlıyorsam, hiç de iyi ölçek değildir
Simon

1

Yöreye duyarlı hash algoritmalarının ailesinde alet çantanızın olması yararlıdır . Bu aile hiç anlam ifade etmiyor. Aslında metni bir bit dizisi olarak kabul eder. Aynı metin çok az farklılıklar ile göründüğünde kirli veri kümelerinde yararlı buluyorum.

Sen kullanabilirsiniz ssdeep (üzerine dayandığı Nilsimsa karma tür belgelerin tespitinde kullanılan). Ssdeep başlangıçta spam alanı için planlanmıştı. İstenmeyen posta göndericileri, kesin imza ile tespit edilmesini önlemek için (örn . Md5 ) mesajda küçük değişiklikler yapar (boşluk ekler ).

Hemen hemen aynı belgenin aynı veri setindeki birçok sürümü, üzerinde uygulanacak istatistiksel yöntemlere zarar vereceğinden, böyle bir temizliği yapmak çok faydalı olabilir.

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.