Sejauh yang saya tahu Anda hanya perlu menyediakan sejumlah topik dan corpus. Tidak perlu menentukan kumpulan topik kandidat, meskipun satu dapat digunakan, seperti yang dapat Anda lihat dalam contoh mulai dari bagian bawah halaman 15 dari Grun dan Hornik (2011) .
Diperbarui 28 Januari 14. Saya sekarang melakukan hal-hal yang sedikit berbeda dengan metode di bawah ini. Lihat di sini untuk pendekatan saya saat ini: /programming//a/21394092/1036500
Cara yang relatif sederhana untuk menemukan jumlah topik optimal tanpa data pelatihan adalah dengan mengulang-ulang model dengan jumlah topik yang berbeda untuk menemukan jumlah topik dengan kemungkinan log maksimum, mengingat data. Pertimbangkan contoh ini denganR
# 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")
Sebelum mulai membuat model topik dan menganalisis hasilnya, kita perlu memutuskan jumlah topik yang harus digunakan oleh model. Berikut adalah fungsi untuk mengulangi nomor topik yang berbeda, dapatkan kemungkinan log dari model untuk setiap nomor topik dan plot sehingga kami dapat memilih yang terbaik. Jumlah topik terbaik adalah topik dengan nilai kemungkinan log tertinggi untuk mendapatkan contoh data yang dimasukkan ke dalam paket. Di sini saya telah memilih untuk mengevaluasi setiap model mulai dari 2 topik hingga 100 topik (ini akan memakan waktu!).
best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
Sekarang kita dapat mengekstrak nilai kemungkinan log untuk setiap model yang dibuat dan bersiap untuk memplotnya:
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)))
Dan sekarang buat plot untuk melihat pada jumlah topik berapa kemungkinan log tertinggi muncul:
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))
Sepertinya ada 10 hingga 20 topik. Kami dapat memeriksa data untuk menemukan jumlah topik yang tepat dengan kemungkinan log tertinggi seperti:
best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
topics LL
12 13 -8525.234
Jadi hasilnya adalah 13 topik yang paling cocok untuk data ini. Sekarang kita dapat melanjutkan dengan membuat model LDA dengan 13 topik dan menyelidiki model:
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
Dan seterusnya untuk menentukan atribut dari model.
Pendekatan ini didasarkan pada:
Griffiths, TL, dan M. Steyvers 2004. Menemukan topik ilmiah. Prosiding Akademi Ilmu Pengetahuan Nasional Amerika Serikat 101 (Suppl 1): 5228 –5235.
devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k")
+1 jawaban yang bagus.