เท่าที่ฉันรู้คุณเพียงแค่ต้องจัดหาหัวข้อและคลังข้อมูลจำนวนมาก ไม่จำเป็นต้องระบุหัวข้อชุดผู้สมัครแม้คนหนึ่งจะสามารถนำมาใช้เป็นคุณสามารถเห็นในตัวอย่างเริ่มต้นที่ด้านล่างของหน้า 15 ของGrun และ 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 คำตอบที่ดี