Parameter input untuk menggunakan alokasi Dirichlet laten

17

Saat menggunakan pemodelan topik (Alokasi Dirichlet Laten), jumlah topik adalah parameter input yang perlu ditentukan pengguna.

Menurut saya, kita juga harus menyediakan kumpulan kumpulan topik kandidat yang harus diambil sampel oleh Dirichlet? Apakah pemahaman saya benar? Dalam praktiknya, bagaimana cara mengatur kumpulan topik kandidat semacam ini?

pengguna3125
sumber

Jawaban:

21

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

masukkan deskripsi gambar di sini

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.

Ben
sumber
Saya memperbarui kode untuk ini dan menyimpannya sebagai intisari. memiliki metode plot yang mencetak secara default. devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k") +1 jawaban yang bagus.
Tyler Rinker
Dengan meningkatkan k dalam LDA Anda memperluas ruang parameter dan model dengan k yang lebih kecil pada dasarnya bersarang di dalam model dengan k yang lebih tinggi. Jadi LL harus semakin meningkat dengan k. Apa yang terjadi pada benjolan kecil di sekitar k = 13 mungkin karena algoritma VEM tidak konvergen ke global maksimum untuk model kompleks. Anda akan lebih beruntung dengan AIC atau BIC.
VitoshKa
Hai @ Ben, jawaban yang sangat berguna. Saya punya satu pertanyaan tentang hal itu, ketika Anda mengevaluasi model dengan 2-100 topik: best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)}). Mengapa Anda hanya memilih data mentah 21:30?
Economist_Ayahuasca
Karena beberapa tahun yang lalu saya memposting jawaban itu, saya tidak ingat persis. Tapi mungkin hanya untuk mempersingkat waktu perhitungan!
Ben
1
Sekarang ada pkg yang bagus untuk menghitung jumlah topik optimal: cran.r-project.org/web/packages/ldatuning
Ben