Les paramètres d'entrée pour l'utilisation de l'allocation Dirichlet latente

17

Lors de l'utilisation de la modélisation de sujet (allocation Dirichlet latente), le nombre de sujets est un paramètre d'entrée que l'utilisateur doit spécifier.

Il me semble que nous devrions également fournir une collection d'ensembles de sujets candidats que le processus Dirichlet doit échantillonner? Ma compréhension est-elle correcte? En pratique, comment configurer ce type de sujet candidat?

user3125
la source

Réponses:

21

Autant que je sache, il vous suffit de fournir un certain nombre de sujets et le corpus. Il n'est pas nécessaire de spécifier un ensemble de sujets candidats, bien qu'il soit possible de l'utiliser, comme vous pouvez le voir dans l'exemple commençant au bas de la page 15 de Grun et Hornik (2011) .

Mis à jour le 28 janvier 14. Je fais maintenant les choses un peu différemment de la méthode ci-dessous. Voir ici pour mon approche actuelle: /programming//a/21394092/1036500

Un moyen relativement simple de trouver le nombre optimal de sujets sans données de formation consiste à parcourir les modèles avec différents nombres de sujets pour trouver le nombre de sujets avec la probabilité de journalisation maximale, compte tenu des données. Considérez cet exemple avecR

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

Avant de passer directement à la génération du modèle de sujet et à l'analyse de la sortie, nous devons décider du nombre de sujets que le modèle doit utiliser. Voici une fonction pour parcourir différents numéros de sujet, obtenir la ressemblance de log du modèle pour chaque numéro de sujet et le tracer afin que nous puissions choisir le meilleur. Le meilleur nombre de sujets est celui avec la valeur de probabilité de journal la plus élevée pour obtenir les données d'exemple intégrées dans le package. Ici, j'ai choisi d'évaluer chaque modèle en commençant par 2 sujets mais jusqu'à 100 sujets (cela prendra un certain temps!).

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

Maintenant, nous pouvons extraire les valeurs de vraisemblance du log pour chaque modèle qui a été généré et nous préparer à le tracer:

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

Et maintenant, faites un graphique pour voir à quel nombre de sujets la probabilité de journal la plus élevée apparaît:

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

entrez la description de l'image ici

On dirait que c'est entre 10 et 20 sujets. Nous pouvons inspecter les données pour trouver le nombre exact de sujets avec la probabilité de journalisation la plus élevée, comme ceci:

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

Le résultat est donc que 13 sujets donnent le meilleur ajustement pour ces données. Maintenant, nous pouvons aller de l'avant avec la création du modèle LDA avec 13 sujets et étudier le modèle:

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

Et ainsi de suite pour déterminer les attributs du modèle.

Cette approche est basée sur:

Griffiths, TL et M. Steyvers 2004. Trouver des sujets scientifiques. Actes de l'Académie nationale des sciences des États-Unis d'Amérique 101 (Suppl 1): 5228 –5235.

Ben
la source
J'ai mis à jour le code pour cela et enregistré en tant qu'essentiel. a une méthode de tracé qui imprime par défaut. devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k") +1 belle réponse.
Tyler Rinker
En augmentant k dans LDA, vous agrandissez l'espace des paramètres et les modèles avec k plus petits sont essentiellement imbriqués dans les modèles avec k plus élevé. Donc LL devrait toujours augmenter avec k. Ce qui arrive à une petite bosse autour de k = 13 est probablement dû au fait que l'algorithme VEM ne converge pas vers le maximum global pour les modèles complexes. Vous aurez plus de chance avec AIC ou BIC.
VitoshKa
Salut @Ben, réponse vraiment utile. J'ai une question à ce sujet, lorsque vous évaluez le modèle avec 2-100 sujets: best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)}). Pourquoi ne sélectionnez-vous que les données brutes 21:30 des données?
Economist_Ayahuasca
Comme il y a quelques années, j'ai posté cette réponse, je ne me souviens pas exactement. Mais probablement juste pour garder le temps de calcul court!
Ben
1
Maintenant, il y a ce joli paquet pour calculer le nombre optimal de sujets: cran.r-project.org/web/packages/ldatuning
Ben