Gizli Dirichlet tahsisini kullanmak için giriş parametreleri


17

Konu modelleme (Gizli Dirichlet Tahsisi) kullanırken, konu sayısı kullanıcının belirtmesi gereken bir giriş parametresidir.

Bana göre Dirichlet sürecinin karşı karşıya gelmesi gereken bir aday konu seti koleksiyonu da sağlamalıyız? Anlayışım doğru mu? Uygulamada, bu tür bir aday konu seti nasıl kurulur?

Yanıtlar:


21

Bildiğim kadarıyla sadece bir dizi konu ve ceset sağlamanız gerekiyor. Grun ve Hornik (2011) sayfa 15'in altından başlayarak örnekte de görebileceğiniz gibi, bir aday konu kümesi belirtmenize gerek yoktur .

Güncelleme 28 Ocak 14. Şimdi aşağıdaki yönteme göre biraz farklı şeyler yapmak. Mevcut yaklaşımım için buraya bakın: /programming//a/21394092/1036500

Eğitim verisi olmadan optimum konu sayısını bulmanın nispeten basit bir yolu, veriler göz önüne alındığında maksimum günlük olasılığı olan konuların sayısını bulmak için farklı sayıda konuya sahip modeller arasında geçiş yapmaktır. Şu örneği düşünün:R

# download and install one of the two R packages for LDA, see a discussion
# of them here: http://stats.stackexchange.com/questions/24441
#
install.packages("topicmodels")
library(topicmodels)
#
# get some of the example data that's bundled with the package
#
data("AssociatedPress", package = "topicmodels")

Konu modelini üretmeye ve çıktıyı analiz etmeye başlamadan önce, modelin kullanması gereken konu sayısına karar vermeliyiz. Farklı konu numaralarının üzerinden dönme, her konu numarası için modelin günlük benzerliğini elde etme ve en iyi olanı seçebilmemiz için çizim yapma işlevi. En iyi konu sayısı, pakete yerleştirilmiş örnek verileri elde etmek için en yüksek günlük olabilirlik değerine sahip olanıdır. Burada 100 konu olsa da 2 konu ile başlayan her modeli değerlendirmeyi seçtim (bu biraz zaman alacak!).

best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})

Şimdi üretilen her model için günlük benzerlik değerlerini çıkarabilir ve onu çizmeye hazırlayabiliriz:

best.model.logLik <- as.data.frame(as.matrix(lapply(best.model, logLik)))

best.model.logLik.df <- data.frame(topics=c(2:100), LL=as.numeric(as.matrix(best.model.logLik)))

Ve şimdi, en yüksek günlük olasılığının ne kadar sayıda konu göründüğünü görmek için bir plan yapın:

library(ggplot2)
ggplot(best.model.logLik.df, aes(x=topics, y=LL)) + 
  xlab("Number of topics") + ylab("Log likelihood of the model") + 
  geom_line() + 
  theme_bw()  + 
  opts(axis.title.x = theme_text(vjust = -0.25, size = 14)) + 
  opts(axis.title.y = theme_text(size = 14, angle=90))

resim açıklamasını buraya girin

Görünüşe göre 10 ila 20 konu arasında. Günlüğü benzerliği en yüksek olan konuların tam sayısını bulmak için verileri inceleyebiliriz:

best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
       topics        LL
12     13           -8525.234

Sonuç olarak, 13 konu bu verilere en iyi şekilde uyuyor. Şimdi 13 başlıklı LDA modeli oluşturup modeli araştırmaya devam edebiliriz:

lda_AP <- LDA(AssociatedPress[21:30,], 13)   # generate the model with 13 topics 
get_terms(lda_AP, 5)                         # gets 5 keywords for each topic, just for a quick look
get_topics(lda_AP, 5)                        # gets 5 topic numbers per document

Ve böylece modelin özelliklerini belirlemek için.

Bu yaklaşım aşağıdakilere dayanmaktadır:

Griffiths, TL ve M. Steyvers 2004. Bilimsel konular bulma. Amerika Birleşik Devletleri Ulusal Bilimler Akademisi Bildirileri 101 (Ek 1): 5228 –5235.


Bunun için kodu güncelledim ve bir gist olarak kaydettim. varsayılan olarak yazdırılan çizim yöntemine sahiptir. devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k") +1 güzel cevap.
Tyler Rinker

LDA'da k değerini artırarak parametre alanını genişletiyorsunuz ve daha küçük k'ye sahip modeller esasen daha yüksek k'ye sahip modellerin içine yerleştiriliyor. Dolayısıyla LL k ile sürekli artmalıdır. K = 13 çevresindeki küçük bir yumruya olan şey, muhtemelen VEM algoritmasının karmaşık modeller için küresel maksimuma yaklaşmamasıdır. AIC veya BIC ile daha fazla şansınız olacak.
Vitoshka

Merhaba @ Ben, gerçekten yararlı bir cevap. Eğer 2-100 konularla modeli değerlendiriyoruz zaman, bu konuda bir sorum var: best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)}). Verilerin neden yalnızca 21:30 sıralarını seçiyorsunuz?
Economist_Ayahuasca

Birkaç yıl önce bu cevabı gönderdiğimden tam olarak hatırlayamıyorum. Ama muhtemelen sadece hesaplama süresini kısa tutmak için!
Ben

1
Şimdi en uygun sayıda konuyu hesaplamak için bu güzel paket var: cran.r-project.org/web/packages/ldatuning
Ben
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.