Наскільки я знаю, вам просто потрібно подати ряд тем та корпусу. Не потрібно вказувати набір тем для кандидатів, хоча їх можна використовувати, як ви бачите в прикладі, починаючи внизу сторінки 15 Grun and Hornik (2011) .
Оновлено 28 січня 14. Зараз я все роблю дещо інакше, ніж описано нижче. Дивіться тут про мій поточний підхід: /programming//a/21394092/1036500
Порівняно простий спосіб знайти оптимальну кількість тем без даних про навчання - це перегортання моделей з різною кількістю тем, щоб знайти кількість тем з максимальною вірогідністю журналу, враховуючи дані. Розглянемо цей приклад с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")
Перш ніж правильно перейти до створення теми теми та аналізу результатів, нам потрібно визначитися з кількістю тем, які модель повинна використовувати. Ось функція для переходу на різні номери тем, отримання життєздатності журналу моделі для кожного номера теми та побудови її, щоб ми могли вибрати найкращу. Найкраща кількість тем - це найвища величина ймовірності журналу для отримання прикладних даних, вбудованих у пакет. Тут я вирішив оцінити кожну модель, починаючи з 2 тем, хоча до 100 тем (це займе певний час!).
best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
Тепер ми можемо витягнути значення життєздатності журналу для кожної створеної моделі та підготуватися до її побудови:
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)))
А тепер складіть сюжет, щоб побачити, у якій кількості тем з’являється найвища ймовірність журналу:
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))
Схоже, це десь між 10 і 20 темами. Ми можемо перевірити дані, щоб знайти точну кількість тем із найвищою швидкістю журналу:
best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
topics LL
12 13 -8525.234
Отже, результат 13 тем, що найкраще відповідають цим даним. Тепер ми можемо продовжувати розробку моделі LDA з 13 темами та дослідження моделі:
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
І так далі, щоб визначити атрибути моделі.
Цей підхід базується на:
Griffiths, TL, M. Steyvers 2004. Пошук наукових тем. Праці Національної академії наук Сполучених Штатів Америки 101 (Suppl 1): 5228 –5235.
devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k")
+1 приємна відповідь.