Yanıtlar:
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.
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.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.topic modeling
, fakat LSA
aslı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, LDA
belge 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.LDA
, sadece olumsuz yönleri eğitmek biraz daha uzun sürer ve açık kaynak uygulamaları gelmesi biraz daha zordur.Count Vectorizers
ve 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.paragraph vectors
, belgelerin yoğun vektör gösterimlerini inceleyen Google'ın bir dizi makalesinde en son ve en iyisi olarak da bilinir . gensim
Python kütüphanesi bir uygulamasıdır sahip word2vec
olduğ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 olunUmarım bu yardımcı olur, herhangi bir sorunuz olursa bana bildirin.
Her biri lehte ve aleyhte olan birkaç anlamsal mesafe ölçüsü vardır. İşte bunlardan sadece birkaçı:
En basit bir yaklaşımla başlayın ve sonra davanızla ilgili sorunlara göre devam edin.
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.
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.
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.