Tanto quanto sei, você só precisa fornecer vários tópicos e o corpus. Não é necessário especificar um conjunto de tópicos candidatos, embora um possa ser usado, como você pode ver no exemplo, começando na parte inferior da página 15 de Grun e Hornik (2011) .
Atualizado em 28 de janeiro de 14. Agora, faço as coisas de maneira um pouco diferente do método abaixo. Veja aqui a minha abordagem atual: /programming//a/21394092/1036500
Uma maneira relativamente simples de encontrar o número ideal de tópicos sem dados de treinamento é percorrendo modelos com diferentes números de tópicos para encontrar o número de tópicos com a máxima probabilidade de log, considerando os dados. Considere este exemplo comR
# 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")
Antes de começar a gerar o modelo de tópico e analisar a saída, precisamos decidir sobre o número de tópicos que o modelo deve usar. A seguir, é apresentada uma função para repetir diferentes números de tópicos, obter a probabilidade de log do modelo para cada número de tópico e plotá-lo para que possamos escolher o melhor. O melhor número de tópicos é aquele com o maior valor de probabilidade de log para obter os dados de exemplo incorporados ao pacote. Aqui, escolhi avaliar todos os modelos, começando com 2 tópicos e 100 tópicos (isso levará algum tempo!).
best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
Agora podemos extrair os valores de probabilidade de log para cada modelo que foi gerado e nos preparar para plotá-lo:
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 agora faça um gráfico para ver em qual número de tópicos a maior probabilidade de log aparece:
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))
Parece que está entre 10 e 20 tópicos. Podemos inspecionar os dados para encontrar o número exato de tópicos com a maior probabilidade de log da seguinte forma:
best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
topics LL
12 13 -8525.234
Portanto, o resultado é que 13 tópicos fornecem o melhor ajuste para esses dados. Agora podemos continuar criando o modelo LDA com 13 tópicos e investigando o modelo:
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 assim por diante para determinar os atributos do modelo.
Essa abordagem é baseada em:
Griffiths, TL e M. Steyvers 2004. Encontrando tópicos científicos. Anais da Academia Nacional de Ciências dos Estados Unidos da América 101 (Suppl 1): 5228 –5235.
devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k")
+1 boa resposta.best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
. Por que você seleciona apenas 21:30 dos dados brutos?