LSA - Latent Semantic Analiz - PHP ile kod nasıl?

4 Cevap php

Ben metinler için konu / etiketleri bulmak için PHP Latent Semantic Analiz (LSA) uygulamak istiyoruz.

İşte ben yapmak zorunda düşünüyorum budur. Is this correct? How can I code it in PHP? How do I determine which words to chose?

Ben herhangi bir harici kütüphaneleri kullanmak istemiyorum. I've already an implementation for the Singular Value Decomposition (SVD).

  1. Verilen metinden tüm kelimeleri ayıklayın.
  2. Ağırlık kelimeler / cümleler, mesela ile tf–idf. Ağırlıklandırma çok karmaşık ise, sadece olaylar sayısını alır.
  3. Bir matris oluşturmak: sütunlar veritabanından bazı belgeleri (? Daha iyi) olan satırlar değerleri olaylar numaraları veya ağırlık vardır, tüm benzersiz kelimelerdir.
  4. Tekil değer ayrışımı (SVD) yapın.
  5. Boyut azaltma (nasıl?) Yapmak için matris S (SVD) değerleri kullanın.

Bana yardımcı olur umarım. Şimdiden çok teşekkür ederiz!

4 Cevap

LSA bağlantılar:

İşte tam bir algoritmadır. Eğer SVD varsa, orada bir şekilde çoğu vardır. Kağıtları Yukarıdaki benden daha iyi açıklayacağım.

Varsayımlar:

  • Değilse your SVD function will give the singular values and singular vectors in descending order., daha akrobasi yapmak zorunda.

M: (satır, d sütunları w) d (belgeler) tarafından (kelime) w korpus matrisi,. Bu ham sayar, ya TFIDF ya da her neyse olabilir. Stopwords veya ortadan olmayabilir, ve sıkılama ne olabilir (Landauer stopwords tutmak ve kök yok diyor, ama evet TFIDF için).

U,Sigma,V = singular_value_decomposition(M)

U:  w x w
Sigma:  min(w,d) length vector, or w * d matrix with diagonal filled in the first min(w,d) spots with the singular values
V:  d x d matrix

Thus U * Sigma * V = M  
#  you might have to do some transposes depending on how your SVD code 
#  returns U and V.  verify this so that you don't go crazy :)

Daha sonra reductionality .... asıl LSA kağıt bazında için çok yakın bir değer göstermektedir tekil değerler tekil değerlerin toplamının% 50'den fazla olduğu şekilde yeterli vektörleri tutmaktır.

Daha succintly ... (pseudocode)

Let s1 = sum(Sigma).  
total = 0
for ii in range(len(Sigma)):
    val = Sigma[ii]
    total += val
    if total > .5 * s1:
        return ii

Bu daha önce min (d, w) idi yeni temeli rütbe, iade edecek ve biz şimdi yaklaşık edeceğiz {} ii.

(Burada, '-> asal, devrik değil)

Boyutları wx ii, ii x ii, ve ii x d, 'Sigma' V 'U: Biz yeni matrisleri oluşturmak.

Bu LSA algoritması özüdür.

Elde edilen bu matris U '* Sigma'nın' * V geliştirilmiş 'kosinüs benzerliği arama' için kullanılabilir ', ya da, örneğin onun içinde her bir belge için ilk 3 kelime seçebilirsiniz. Bu basit bir tf-idf daha bazı tartışma konusudur yeilds olsun.

Benim için, LSA nedeniyle anlamlılık arasında kötü gerçek dünya veri setleri gerçekleştirir ve veri çok konularda ayarlar. Bu olasılık / matematiksel temeli (bu kelime sayım için mantıklı değil (Gauss) dağılımlar, normal ish varsayar) sağlıksızdır bulunuyor.

Sizin kilometre kesinlikle değişecektir.

Tagging using LSA (one method!)

  1. U 'Sigma'nın' V SVD kullanarak 'boyutsal azaltılmış matrisler ve bir azaltma sezgisel Construct

  2. Elle, U 'matris üzerinden bakmak ve her bir "konu" açıklayan terimlerden ile geldi. Bu vektörün büyük parçaları vardı Örneğin, "Bronx, Yankees, Manhattan," daha sonra "New York" bunun için iyi bir dönem olabilir. Bir ilişkisel dizi veya listesinde bu tutun. Vektörlerin sayısı sonlu olacaktır çünkü bu adım, makul olmalıdır.

  3. Bir belge için bir kelime vektörü (v1) varsayarsak, o zaman v1 * t (U ') bu belge için konu' güçlü verecektir '. Önceki adımda hesaplanan 3 en yüksek seçin, sonra da "konu" vermek.

Bu cevap, doğrudan posterleri sorusuna, ama haberleri AutoTag nasıl meta soruya değildir. OP Varlık Tanıma Adını bahseder, ama onlar otomatik etiketleme hattı boyunca daha fazla bir şey demek inanıyorum. Onlar gerçekten NER demek, o zaman bu tepki atmasyon olduğunu :)

Farklı kaynaklardan bu kısıtlamaları (600 ürün / gün, 100-200 karakter / madde) göz önüne alındığında, burada bazı etiketleme seçenekleri şunlardır:

  1. Elle. Bir analist kolayca muhtemelen birkaç saat içinde, günde bu 600 yapabilirdi. Amazon'un Mechanical Turk, veya kullanıcılar bunu yapmak gibi bir şey de mümkün olabilir. , "El-etiketli" bazı sayıda olması bu olsa bile sadece 50 veya 100, aşağıda autogenerated yöntemler size olsun ne olursa olsun karşılaştırmak için iyi bir temel olacaktır.

  2. LSA, Konu-Modelleri (Latent Dirichlet Tahsis), ve benzeri kullanarak Dimentionality azalmalar, .... ben gerçek dünya veri setleri üzerinde LSA ile gerçekten kötü şans vardı ve ben onun istatistiksel olarak memnun değilim. LDA Ben çok daha iyi buluyorum, ve olan bir incredible mailing list bu metinlere konu atamak nasıl iyi düşünme vardır.

  3. Basit sezgisel tarama ... Eğer gerçek haberleri varsa, o zaman exploit the structure of the news item. , Ilk cümlede odaklanın tüm ortak kelimeleri (durdurma sözcükleri) dışarı atmak ve ilk iki cümle gelen en iyi 3. isimler seçin. Veya halt, ilk cümlede tüm isimler alır ve sizi alır nerede olduğunu görmek. Metinler tüm İngilizce iseniz, o zaman bütün shebang üzerinde konuşma analizi parçası yapmak, ve o sizi alır ne görmek. Haberler, LSA ve diğer düzen bağımsız yöntemler (tf-IDF) gibi yapılandırılmış öğeleri ile bir çok bilgiyi dışarı atar.

İyi şanslar!

(Bu cevap gibi, belki sığdırmak soruyu yeniden etiketlemek ise)

Tüm son adıma kadar doğru görünüyor. SVD için olağan gösterimine * üç matrisi A = USV verir olmasıdır. S Bu durumda, temelde her boyut orijinal veri yakalar ne kadar bir ölçü verir, o (diyagonal kapalı tüm sıfır anlamında) bir köşegen matristir. Sayılar ("tekil değerler") aşağı gidecek ve birçok boyutları yararlıdır nasıl bir drop-off için bakabilirsiniz. Aksi takdirde, sadece almak için kaç boyutlar için bir rasgele sayı N seçmek isteyeceksiniz.

Burada biraz bulanık olsun. Indirgenmiş boyutlu uzayda bakımından (kelime) koordinatları U veya V ya, ben onlar girdi matrisinin satır veya sütun olup olmamasına bağlı olarak düşünüyorum. Taraftan kapalı, ben kelimeleri koordinatları, yani U ilk satır ilk sözcük, yani giriş matrisinin ilk satırına karşılık U'nun satır olacağını düşünüyorum. Sonra sadece en azaltılmış uzayda koordinat kelime olarak bu satırın ilk N sütunları alır.

HTH

Güncelleme:

Bu süreç bugüne kadar etiketleri seçmek için tam olarak nasıl söylemez. Ben etiketleri (karar ağaçları, diyelim ki, böyle bir makine öğrenme algoritması, göreve daha uygun olabilir) seçmek için LSI kullanan herkes duymadım. LSI iki kelime benzer olmadığını söyler. Bu etiketleri atama uzun bir yol var.

İki görevler-a) kullanmak için etiket kümesi ne vardır? b) nasıl iyi üç etiketlerini seçmek için?. LSI (a) cevap yardımcı oluyor nasıl bir duygusu çok yoktur. Sen elle etiket kümesi seçebilirsiniz. LSI kullanıyorsanız Ama, etiketleri muhtemelen belgelerde meydana kelime olmalıdır. Sonra (b) için, belgede bulunan bir deyişle en yakın etiketleri dışarı almak istiyorum. Bunu uygulayan bir kaç yolu ile deneme olabilir. Yakınlık etiketi bulunuyor (U onun satır) koordinat arasındaki kosinüs benzerliği (bkz. Wikipedia) ve en onun satır (koordinat kelime ile ölçülür belgedeki any kelimesine yakın olan üç etiketleri seçin U).

SO link text tüm PHP bunu yapmanın tehlikeleri üzerinde iplik bir ek vardır.

Özellikle, bir metin için çıkan "konu" nasıl açıklanır Latent Semantic Mapping bu yazıda orada bir bağlantı vardır.