I parametri di input per l'utilizzo dell'allocazione Dirichlet latente


17

Quando si utilizza la modellazione degli argomenti (Allocazione direttrice latente), il numero di argomenti è un parametro di input che l'utente deve specificare.

Mi sembra che dovremmo anche fornire una raccolta di set di argomenti candidati su cui il processo Dirichlet deve confrontarsi? La mia comprensione è corretta? In pratica, come impostare questo tipo di set di argomenti candidati?

Risposte:


21

Per quanto ne so, devi solo fornire una serie di argomenti e il corpus. Non è necessario specificare un set di argomenti candidati, sebbene sia possibile utilizzarne uno, come si può vedere nell'esempio che inizia nella parte inferiore della pagina 15 di Grun e Hornik (2011) .

Aggiornato il 28 gennaio 14. Ora faccio le cose in modo leggermente diverso rispetto al metodo seguente. Vedi qui per il mio approccio attuale: /programming//a/21394092/1036500

Un modo relativamente semplice per trovare il numero ottimale di argomenti senza dati di formazione è quello di passare in rassegna i modelli con diversi numeri di argomenti per trovare il numero di argomenti con la massima probabilità di log, dati i dati. Considera questo esempio conR

# 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")

Prima di iniziare a generare il modello di argomento e ad analizzare l'output, dobbiamo decidere il numero di argomenti che il modello dovrebbe utilizzare. Ecco una funzione per passare in rassegna numeri di argomenti diversi, ottenere la probabilità di log del modello per ciascun numero di argomento e tracciarlo in modo che possiamo scegliere quello migliore. Il miglior numero di argomenti è quello con il più alto valore di probabilità di log per ottenere i dati di esempio integrati nel pacchetto. Qui ho scelto di valutare ogni modello a partire da 2 argomenti, sebbene a 100 argomenti (questo richiederà del tempo!).

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

Ora possiamo estrarre i valori di verosimiglianza del log per ciascun modello che è stato generato e prepararci a tracciarlo:

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)))

E ora crea una trama per vedere a quale numero di argomenti appare la più alta probabilità di log:

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))

inserisci qui la descrizione dell'immagine

Sembra che sia compreso tra 10 e 20 argomenti. Possiamo ispezionare i dati per trovare il numero esatto di argomenti con la più alta probabilità di log in questo modo:

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

Quindi il risultato è che 13 argomenti offrono la soluzione migliore per questi dati. Ora possiamo procedere con la creazione del modello LDA con 13 argomenti e lo studio del modello:

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

E così via per determinare gli attributi del modello.

Questo approccio si basa su:

Griffiths, TL e M. Steyvers 2004. Alla ricerca di argomenti scientifici. Atti della National Academy of Sciences degli Stati Uniti d'America 101 (Suppl 1): 5228 –5235.


Ho aggiornato il codice per questo e salvato come sostanza. ha un metodo di stampa che stampa per impostazione predefinita. devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k") +1 bella risposta.
Tyler Rinker,

Aumentando k in LDA si sta espandendo lo spazio dei parametri e i modelli con k più piccolo vengono essenzialmente nidificati all'interno di modelli con k più alto. Quindi LL dovrebbe essere in costante aumento con k. Quello che succede a un piccolo dosso attorno a k = 13 è probabilmente dovuto all'algoritmo VEM che non converge al massimo globale per modelli complessi. Avrai più fortuna con AIC o BIC.
VitoshKa,

Ciao @Ben, risposta davvero utile. Ho una domanda su di esso, quando si sta valutando il modello con 2-100 argomenti: best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)}). Perché selezioni solo le 21:30 dei dati?
Economist_Ayahuasca,

Da quando ho pubblicato quella risposta qualche anno fa, non ricordo esattamente. Ma probabilmente solo per ridurre i tempi di calcolo!
Ben,

1
Ora c'è questo bel pacchetto per calcolare il numero ottimale di argomenti: cran.r-project.org/web/packages/ldatuning
Ben
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.