Konu modellerinde konu dengesi


23

Bir dizi açık uçlu makalenin içeriği hakkında biraz bilgi edinmek istediğim bir proje üzerinde çalışıyorum. Bu özel projede 148 kişi, daha büyük bir deneyin parçası olarak varsayımsal bir öğrenci organizasyonu hakkında yazılar yazdı. Alanımda (sosyal psikoloji), bu verileri analiz etmenin tipik yolu, makaleleri elle kodlamak olsa da, bunu nicel olarak yapmak istiyorum, çünkü el kodlaması hem emek yoğun hem de benim için çok özneldir. damak zevki.

Serbest cevap verilerini nicel olarak analiz etmenin yolları hakkındaki araştırmalarım sırasında, konu modelleme (ya da Latent Dirichlet Allocation, veya LDA) adı verilen bir yaklaşıma rastladım . Konu modelleme, verilerinizin bir sözcük ifadesi temsilini (bir terim belgesi matrisi) alır ve verinin gizli konularını çıkarmak için eş-beraberlik kelimesi hakkındaki bilgileri kullanır. Bu yaklaşım başvurum için mükemmel görünüyor.

Maalesef verilerime konu modelleme uyguladığımda iki konu keşfettim:

  1. Konu modellemeyle ele geçen konuları yorumlamak bazen zor
  2. Konu modellerimi farklı bir rastgele tohumla tekrar çalıştırdığımda, konular çarpıcı biçimde değişiyor gibi görünüyor

Özellikle 2. konu beni ilgilendirmektedir. Bu nedenle, iki tane ilgili sorum var:

  1. Modelimi yorumlanabilirlik ve stabilite için uygun prosedürümü optimize etmek için LDA prosedüründe yapabileceğim bir şey var mı? Şahsen, en düşük şaşkınlığa ve / veya en iyi model uygunluğa sahip modeli bulmayı umursamıyorum - Bu çalışmanın katılımcılarının yazılarında yazdıklarını anlamama ve karakterize etmeme yardımcı olmak için çoğunlukla bu prosedürü kullanmak istiyorum. Ancak, sonuçlarımın kesinlikle rastgele tohumun bir eseri olmasını istemiyorum!
  2. Yukarıdaki soruya ilişkin olarak, bir LDA yapmak için ne kadar veriye ihtiyaç duyduğunuz konusunda standartlar var mı? Bu yöntemi kullanmış olduğum makalelerin çoğu büyük kurumları analiz ediyor (örneğin, son 20 yıldaki tüm Bilim makalelerinin bir arşivi), ancak deneysel veriler kullandığım için belgeler grubum çok daha küçük.

Ellerini kirletmek isteyen herkes için deneme verilerini buraya yazdım ve aşağıda kullandığım R kodunu yapıştırdım.

require(tm)
require(topicmodels)

# Create a corpus from the essay 
c <- Corpus(DataframeSource(essays))
inspect(c)

# Remove punctuation and put the words in lower case
c <- tm_map(c, removePunctuation)
c <- tm_map(c, tolower)

# Create a DocumentTermMatrix.  The stopwords are the LIWC function word categories
# I have a copy of the LIWC dictionary, but if you want to do a similar analysis,
# use the default stop words in tm
dtm <- DocumentTermMatrix(c, control = list(stopwords = 
  c(dict$funct, dict$pronoun, dict$ppron, dict$i, dict$we, dict$you, dict$shehe, 
    dict$they, dict$inpers, dict$article, dict$aux)))

# Term frequency inverse-document frequency to select the desired words
term_tfidf <- tapply(dtm$v/rowSums(as.matrix(dtm))[dtm$i], dtm$j, mean) * log2(nDocs(dtm)/colSums(as.matrix(dtm)))
summary(term_tfidf)

dtm <- dtm[, term_tfidf >= 0.04]

lda <- LDA(dtm, k = 5, seed = 532)
perplexity(lda)
(terms <- terms(lda, 10))
(topics <- topics(lda))

Düzenle:

nstartYorumlarda Flounderer tarafından önerildiği şekilde değişiklik yapmayı denedim . Ne yazık ki, aşağıda gösterildiği gibi, nstartrastgele tohumdan rastgele tohuma oldukça dramatik biçimde değişen konularda 1000 sonuçlara ayarlanması bile . Sadece tekrar vurgulamak gerekirse, aşağıdaki iki modelin tahmininde değiştirdiğim tek şey, model tahminine başlamak için kullanılan rastgele tohumdur ve yine de konular bu iki çalışmada tutarlı görünmüyor.

lda <- LDA(dtm, k = 5, seed = 535, control = list(nstart = 1000))
(terms <- terms(lda, 10))

      Topic 1         Topic 2      Topic 3      Topic 4       Topic 5      
 [1,] "international" "ethnicity"  "free"       "credit"      "kind"       
 [2,] "communicate"   "true"       "team"       "mandatory"   "bridge"     
 [3,] "gain"          "asians"     "cooperate"  "music"       "close"      
 [4,] "use"           "hand"       "order"      "seen"        "deal"       
 [5,] "big"           "hold"       "play"       "barrier"     "designed"   
 [6,] "communication" "effective"  "big"        "stereotypes" "effort"     
 [7,] "america"       "emphasis"   "beginning"  "asians"      "implemented"
 [8,] "chinese"       "halls"      "china"      "fantastic"   "websites"   
 [9,] "ethnicity"     "minorities" "difference" "focusing"    "planned"    
[10,] "networks"      "population" "easier"     "force"       "body"

lda <- LDA(dtm, k = 5, seed = 536, control = list(nstart = 1000))
(terms <- terms(lda, 10))

      Topic 1       Topic 2         Topic 3        Topic 4       Topic 5    
 [1,] "kind"        "international" "issue"        "willing"     "play"     
 [2,] "easier"      "ethnicity"     "close"        "use"         "trying"   
 [3,] "gain"        "communication" "currently"    "hand"        "unity"    
 [4,] "websites"    "communicate"   "implemented"  "networks"    "decision" 
 [5,] "credit"      "bridge"        "particularly" "stereotypes" "gap"      
 [6,] "effort"      "america"       "credit"       "communicate" "normally" 
 [7,] "barriers"    "connection"    "fulfill"      "came"        "asians"   
 [8,] "effects"     "kind"          "grew"         "asians"      "created"  
 [9,] "established" "order"         "perspectives" "big"         "effective"
[10,] "strangers"   "skills"        "big"          "budget"      "prejudice"

2
Verilerinizi paylaştığınız için teşekkür ederiz! Bakması çok ilginçti. Sorularınıza iyi bir cevabım yok ama bazı şeyler önermek istiyorum. Soru 1 için, paketteki LDAfonksiyondaki kontrol parametrelerini ayarlamayı deneyebilirsiniz topicmodels. Özellikle, nstartdaha büyük olmayı deneyebilirsiniz . Bu, sonuçlarınızı daha kararlı hale getirme garantilidir , çünkü LDA işlevi farklı rasgele tohumlarla tekrar tekrar tekrar çalışacak ve daha sonra en iyi sonucu verecektir. Ne yazık nstartki, 1000’in artması , algoritmanın 1000 kat daha fazla iş yapmasını sağlayacak (devam ediyor)
Flounderer

1
bu yüzden daha yavaş olacak. Ve yeterince kararlı olacağının garantisi de yok . Yanıt: her iki soru da bana göre LDA, bir insanın işlemesi için çok fazla veri olduğunda görünmeyen belgeleri sınıflandırmak için gerçekten tasarlandı. Bunun için, VEM algoritmasının yalnızca bir çalıştırmadan diğerine değişebilen "yeterince iyi" bir cevap vermesi sorun değil. Fakat sizin için bu arzu edilmez ve LDA en iyi seçenek olmayabilir. Burada Shalizi'nin kursu ile ilgili ilk birkaç dersinde bazı mükemmel alternatifler var: örneğin, stat.cmu.edu/~cshalizi/350 , örneğin her birini dönüştürebilirsiniz (devamı)
Flounderer

2
sözcüklerden oluşan bir vektöre kompozisyon yazıp sonuçlara bir PCA yapın, sonra kümeleri arayın. Korpusunuz yeterince büyükse, dürüst olmak gerekirse, VEM'in güvenilir sonuçlar veremeyecek kadar büyük olması beni şaşırtmaz. Belki de acıyım, ancak bu yöntemi benzer yazarlar tarafından başka bir modelde çalışmak için almaya çalışmak için çok fazla zaman harcadım ve küçük örnekleri kullanırken bile, koşmadan koşuya tamamen tutarsızdı. Bildiğim kadarıyla, bu gibi algoritmalar için başlangıç ​​noktaları seçmeyi tartışan pek çok makale yok.
Flounderer

Flounderer, katılımınız için çok teşekkür ederim! Özellikle LDA hakkında daha fazla kılavuzun olmadığını duymak biraz hayal kırıklığı yaratıyor, ancak sanırım bu denetimsiz bir yöntemin toprakları ile birlikte geliyor. nstartBunlardan herhangi birinin işe yarayıp yaramadığını görmek için kurgu web sitesine bakmaya çalışacağım . (BTW, yorumlarınızı bir cevaba eklerseniz, oy kullanırım. Herhangi bir şeyi kabul etmeden önce başkalarının tavsiyesi olup olmadığını görmek isterim, ancak yorumlarınızın yanıt olarak kabul edilmekten daha fazlası olduğunu düşünüyorum.
Patrick S. Forscher

Sosyal bilimlerinizin ağrılığını duyduğunuzu hissediyorum Patrick, ama yaklaşımınızın başlangıçta yanlış olduğunu düşünüyorum. İstatistiksel testler kullanmak istiyorsanız, sınıflandırma hata oranlarını elde etmek için insanların bir kısmını kodlamaları gerekecek, bunu (şahsen) yaptınız mı? Öyleyse, hangi özelliklerin en belirgin olduğunu bilirsiniz ve daha iyi bir algoritma tasarlayabilir / seçebilirsiniz.
07

Yanıtlar:


6

Kendi merakım için, bu veri setine üzerinde çalıştığım bir kümeleme algoritması uyguladım.

Ben ettik geçici olarak koymak-up sonuçlarının burada (denemeler veri kümesi seçin).

Sorun başlangıç ​​noktaları veya algoritma değil veriler gibi görünüyor. 'Makul bir şekilde' (tabi ki, sınırlı tecrübelerime göre), bazı gizli konular / kavramlar / temalar / kümeler (aramak istediğiniz her şey) olduğu sürece, 147 örnekte bile, iyi kümeler elde edebilirsiniz.

Veriler birbirinden iyi ayrılmış konulara sahip değilse, hangi algoritmayı kullanırsanız kullanın iyi cevap alamayabilirsiniz.


@ Siddharth.Gopal Yanıtınız için çok teşekkürler! Tüm katılımcıların ("BadgerConnect" olarak adlandırdığımız) bir varsayımsal öğrenci organizasyonunu tanımladığı göz önüne alındığında, kümelenmelerde biraz örtüşmeyi beklediğim doğrudur. Bu nedenle, örneğin, konu modellemesinin, bazı konuların kağıttan kağıda çok farklı olduğu Bilim'den alınan kağıtlara uygulanması konusundaki uygulamaların aksine, konuların hepsi biraz benzerdir. Ancak, bazı makalelerin BadgerConnect lehine olduğu, bazılarının BadgerConnect'e karşı yazdığı doğrudur.
Patrick S. Forscher

Ayrıca, makalelerin sundukları argümanlara ve argümanların nasıl sunulduğuna göre değişkenlik gösterdiği de doğrudur. Mümkünse, bu değişkenliğin bir kısmını yakalamak istiyorum. Bu ayrımlardan bazılarını yakalamanın mümkün olup olmadığı hakkında herhangi bir fikriniz var mı (en azından, bu varsayımsal öğrenci programına karşı yazılanlar ve lehine yazılar arasındaki fark)? Ayrıca, farklı rastgele tohumları kullandığınızda kümelenme sonuçlarınız istikrarlı mıydı?
Patrick S. Forscher

1
1. Algoritmanın kararlılığından tamamen endişe duyuyorsanız - algoritmayı birçok kez çalıştırmayı deneyin ve olasılığı en yüksek olan modeli seçin.
Siddharth Gopal

1
(İstikrar burada ikincil bir sorun gibi gözükse de). 2. Argümanlar ve görüşler bakımından ne beklediğinizin açıklanmasından sonra, denemeleri bir sözcük torbası olarak temsil etmek, bu bağlamda iyi bir fikir değildir. Etkilenen konu modelinin kendisi bunun için iyi bir araç olmayabilir. İlgilendiğiniz bazı anahtar kelimeleri (ırk, yemek, yurt vb.) Seçmenizi ve kelimenin oluştuğu cümlenin duyarlılığını analiz etmeye çalışmanızı öneririm. Örneğin , bir demo için buraya bir göz atın .
Siddharth Gopal

1
Python'un nltk adında mükemmel bir NLP araç seti vardır. Ne sunduğuna bir göz atmak isteyebilirsin. Tf-idf ile ilgili olarak, 'teknik olarak', LDA'ya giriş, yalnızca multinom dağılımı, rastgele gerçek sayılar için tanımlanmadığından kelime sayımları olmalıdır.
Siddharth Gopal

10
  1. "Konu modelleri" olarak adlandırılan "konular" kavramı yanıltıcıdır. Model, anlamsal olarak tutarlı "konuları" hiç bilmek için tasarlamıyor veya bilmiyor. "Konular" sadece tokenlere (kelimelere) göre yapılan dağıtımlardır. Başka bir deyişle, model sadece terimlerin yüksek dereceli birlikte oluşumunu yakalar. Bu yapıların bir şey ifade edip etmediği, modelin amacı değil.

  2. "LDA" modeli iki bölümden oluşur (temelde tüm grafik modeller): a) model tanımı ve b) çıkarım / arazi modeli parametrelerine yönelik bir çıkarım algoritması uygulaması. Bahsettiğiniz şey, "LDA" modelinin sorunu olabilir veya olmayabilir, ancak kullandığınız özel uygulamanın bir hata / hata / yanlış yapılandırma olabilir (R paketi).

  3. Neredeyse tüm "LDA" uygulamaları bir miktar randomizasyon gerektirir. Ve çıkarım algoritmalarının doğası gereği (örneğin, MCMC ya da değişken çıkarım), yerel olarak asgari çözümler ya da birçok çözümün bir dağıtımını elde edersiniz. Yani, kısacası, gözlemlediğiniz bir şekilde bekleniyor.

Pratik Öneriler:

  1. Farklı R paketleri deneyin: Örneğin, bu paket David Blei'nin eski yüksek lisans öğrencisi tarafından yapılır. Veya bunun gibi başka bir ortamı bile deneyin . Tüm bu kararlı paketlerden benzer sonuçlar elde ederseniz, en azından, sorunu biraz azaltırsınız.

  2. Durdurulan kelimeleri çıkarmamakla biraz oynamayı deneyin. Bunun nedeni, bu durma sözcüklerin, bu kadar küçük bir korpustaki (örneğin, 100 veya daha fazla makale) anlamsal anlamların birleştirilmesinde önemli bir rol oynamasıdır. Ayrıca, şeyleri filtrelememeye çalışın.

  3. Farklı konu sayıları gibi hiper-parametrelerle biraz oynamayı deneyin.

Konu tutarlılıkları hakkında makaleler:

  1. http://www.aclweb.org/anthology-new/D/D12/D12-1087.pdf

  2. http://people.cs.umass.edu/~wallach/publications/mimno11optimizing.pdf


Cevabınız için teşekkürler. Yorumlarınıza her seferinde bir cevap vereceğim. (1) Modelin konular hakkında hiçbir şey bilmediğini anlıyorum, ancak konu modellerinin ortaya çıkardığı yapıların (ve bu yapıların bir şey ifade edip etmediği bu modellerin amacı değil) iddiası, David Blei'nin bu inceleme makalesine doğrudan aykırı olduğunu , konu modellerin yaratıcısı. Bana göre bu konu modellerinin amacı, tam olarak bu projede yapmak istediğim şey olan metinsel verileri keşfetmeye / karakterize etmeye yardım etmek.
Patrick S. Forscher

(2) Sonuçlarımın bir hatadan kaynaklanmış olması mümkün olsa da, benim tarafımdaki bir tür hata nedeniyle olma ihtimallerinin daha yüksek olduğunu düşünüyorum (ve eğer durum böyle görünüyorsa, lütfen bana söyleyin!). topicmodelsPaketi, temelde Blei ve meslektaşları tarafından uygulanan orijinal algoritmaya R arayüzü olan R'de kullanıyorum .
Patrick S. Forscher,

(3) LDA’nın bazı randomizasyonlar gerektirdiğini biliyorum, bu yüzden kaçmak için kesin sonuçlar istemiyorum, ancak farklı rastgele tohumlar kullanarak benzer konular beklemenin makul olacağını düşünüyorum (aslında, bunun standart bir beklenti olduğuna inanıyorum. insanlar randomizasyona dayalı algoritmalar kullanırlar). Bilmek istediğim, sonuçlarda söz konusu istikrarın nasıl sağlanacağı.
Patrick S. Forscher

@ PatrickS.Forscher İlk yorumunuz için: Hayır. Bu çelişkili. "Konular" adı, biz insanlar olarak, bu sözcüklerin dağıtımına etiketler koyuyoruz. Bu kümelenme yapısı, gerçek dünyadaki, insan tarafından okunabilen konularla ilişkili olabilir veya olmayabilir. Kesin sorunu hafifletmek için konu modellerine tutarlılık kazandıracak çok sayıda makale vardır.
Liangjie Hong,

@ PatrickS.Forscher İkinci yorumunuz: Benzer olup olmadığınızı görmek için farklı bir uygulama deneyin (mantıksız sonuçlar). Örneğin, UMASS Mallet.
Liangjie Hong,
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.