अव्यक्त डिरिचलेट आवंटन का उपयोग करने के लिए इनपुट पैरामीटर


17

विषय मॉडलिंग (अव्यक्त डिरिचलेट आवंटन) का उपयोग करते समय, विषयों की संख्या एक इनपुट पैरामीटर है जिसे उपयोगकर्ता को निर्दिष्ट करने की आवश्यकता होती है।

मुझे लगता है कि हम भी उम्मीदवार विषय का एक संग्रह प्रदान करना चाहिए कि Dirichlet प्रक्रिया के खिलाफ नमूना है? क्या मेरी समझ सही है? व्यवहार में, इस प्रकार के उम्मीदवार विषय को कैसे सेट करें?

जवाबों:


21

जहां तक ​​मुझे पता है कि आपको बस कई विषयों और कॉर्पस की आपूर्ति करने की आवश्यकता है। एक उम्मीदवार विषय सेट को निर्दिष्ट करने की आवश्यकता नहीं है, हालांकि एक का उपयोग किया जा सकता है, जैसा कि आप ग्रुन और हॉर्निक (2011) के पृष्ठ 15 के नीचे शुरू होने वाले उदाहरण में देख सकते हैं ।

अपडेट किया गया 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 विषय इन आंकड़ों के लिए सबसे उपयुक्त हैं। अब हम 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

और इसलिए मॉडल की विशेषताओं को निर्धारित करने के लिए।

यह दृष्टिकोण इस पर आधारित है:

ग्रिफ़िथ, टीएल और एम। स्टीवर्स 2004. वैज्ञानिक विषयों की खोज। संयुक्त राज्य अमेरिका के नेशनल एकेडमी ऑफ साइंसेज की कार्यवाही 101 (सप्ल 1): 5228-5235।


मैंने इसके लिए कोड अपडेट किया और एक जिस्ट के रूप में सेव किया। प्लॉट विधि है जो डिफ़ॉल्ट रूप से प्रिंट करती है। devtools::source_url("https://gist.githubusercontent.com/trinker/9aba07ddb07ad5a0c411/raw/c44f31042fc0bae2551452ce1f191d70796a75f9/optimal_k") +1 अच्छा जवाब।
टायलर रिंकर

LDA में k बढ़ाने से आप पैरामीटर स्पेस का विस्तार कर रहे हैं और छोटे k के साथ मॉडल आवश्यक रूप से उच्च k के साथ मॉडल के अंदर नेस्टेड हैं। तो एल कभी के साथ बढ़ती जा रही है। आप k = 13 के आसपास एक छोटी सी टक्कर से होते हैं, शायद VEM एल्गोरिथ्म के कारण जटिल मॉडल के लिए वैश्विक अधिकतम में परिवर्तित नहीं होता है। आपके पास एआईसी या बीआईसी के साथ अधिक भाग्य होगा।
विट्ठकॉ

हाय @Ben, वास्तव में उपयोगी जवाब। मेरे पास इसके बारे में एक प्रश्न है, जब आप 2-100 विषयों के साथ मॉडल का मूल्यांकन कर रहे हैं best.model <- lapply(seq(2,100, by=1), function(k){LDA(AssociatedPress[21:30,], k)}):। आप डेटा के केवल 21:30 रॉ का चयन क्यों करते हैं?
अर्थशास्त्री_आयुष्का

चूंकि यह कुछ साल पहले था कि मैंने वह जवाब पोस्ट किया था, इसलिए मैं बिल्कुल याद नहीं कर सकता। लेकिन शायद बस गणना समय कम रखने के लिए!
बेन

1
अब विषयों की इष्टतम संख्या की गणना के लिए यह अच्छा pkg है: cran.r-project.org/web/packages/ldatuning
Ben
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.