Theo tôi biết bạn chỉ cần cung cấp một số chủ đề và kho văn bản. Không cần chỉ định một bộ chủ đề ứng cử viên, mặc dù có thể sử dụng một chủ đề, như bạn có thể thấy trong ví dụ bắt đầu ở cuối trang 15 của Grun và Hornik (2011) .
Cập nhật ngày 28 tháng 1 14. Bây giờ tôi làm mọi thứ hơi khác với phương pháp bên dưới. Xem ở đây để biết cách tiếp cận hiện tại của tôi: /programming//a/21394092/1036500
Một cách tương đối đơn giản để tìm số lượng chủ đề tối ưu mà không cần dữ liệu đào tạo là lặp qua các mô hình với số lượng chủ đề khác nhau để tìm số lượng chủ đề với khả năng đăng nhập tối đa, được cung cấp dữ liệu. Xem xét ví dụ này vớiR
# 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")
Trước khi đi thẳng vào việc tạo mô hình chủ đề và phân tích đầu ra, chúng ta cần quyết định số lượng chủ đề mà mô hình nên sử dụng. Đây là một hàm để lặp qua các số chủ đề khác nhau, lấy thông tin đăng nhập của mô hình cho từng số chủ đề và vẽ biểu đồ để chúng tôi có thể chọn ra số tốt nhất. Số lượng chủ đề tốt nhất là chủ đề có giá trị khả năng đăng nhập cao nhất để lấy dữ liệu mẫu được tích hợp trong gói. Ở đây tôi đã chọn để đánh giá mọi mô hình bắt đầu với 2 chủ đề mặc dù đến 100 chủ đề (việc này sẽ mất một chút thời gian!).
best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)})
Bây giờ chúng ta có thể trích xuất các giá trị khả năng ghi nhật ký cho từng mô hình đã được tạo và chuẩn bị để vẽ nó:
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)))
Và bây giờ hãy lập một âm mưu để xem số lượng chủ đề có khả năng đăng nhập cao nhất xuất hiện:
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))
Có vẻ như nó ở đâu đó giữa 10 và 20 chủ đề. Chúng tôi có thể kiểm tra dữ liệu để tìm ra số lượng chính xác của các chủ đề với khả năng đăng nhập cao nhất như vậy:
best.model.logLik.df[which.max(best.model.logLik.df$LL),]
# which returns
topics LL
12 13 -8525.234
Vì vậy, kết quả là 13 chủ đề phù hợp nhất cho những dữ liệu này. Bây giờ chúng ta có thể tiếp tục với việc tạo mô hình LDA với 13 chủ đề và nghiên cứu mô hình:
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
Và như vậy để xác định các thuộc tính của mô hình.
Cách tiếp cận này dựa trên:
Griffiths, TL và M. Steyvers 2004. Tìm kiếm các chủ đề khoa học. Kỷ yếu của Viện Hàn lâm Khoa học Quốc gia Hoa Kỳ 101 (Cung 1): 5228 bồi5235.
devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k")
+1 câu trả lời hay.