2016-02-01 14 views
9

मैं अव्यक्त Dirichlet आवंटन (sklearn कार्यान्वयन) का इस्तेमाल किया के बारे में 500 वैज्ञानिक लेख-सार विश्लेषण करने के लिए और मैं सबसे महत्वपूर्ण शब्द (जर्मन भाषा में) वाले विषय मिल गया। मेरी समस्या सबसे महत्वपूर्ण शब्दों से जुड़े इन मूल्यों की व्याख्या करना है। मुझे लगता है कि प्रति विषय सभी शब्दों के लिए संभावनाएं प्राप्त होती हैं जो 1 तक जोड़ती हैं, जो मामला नहीं है।एलडीए घटकों (sklearn का उपयोग कर) की व्याख्या कैसे करें?

मैं इन मूल्यों की व्याख्या कैसे कर सकता हूं? उदाहरण के लिए, मैं यह बताना चाहता हूं कि विषय # 20 में अन्य विषयों की तुलना में बहुत अधिक मूल्य वाले शब्द क्यों हैं। Bayesian संभावना के साथ उनकी पूर्ण ऊंचाई क्या है? क्या कॉर्पस में विषय अधिक आम है? मैं अभी तक एलडीए के पीछे गणित के साथ सिद्धांतों के मूल्यों को एक साथ लाने में सक्षम नहीं हूं।

from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.decomposition import LatentDirichletAllocation 

tf_vectorizer = CountVectorizer(max_df=0.95, min_df=1, top_words=stop_ger, 
           analyzer='word', 
           tokenizer = stemmer_sklearn.stem_ger()) 

tf = tf_vectorizer.fit_transform(texts) 

n_topics = 10 
lda = LatentDirichletAllocation(n_topics=n_topics, max_iter=5, 
           learning_method='online',     
           learning_offset=50., random_state=0) 

lda.fit(tf) 

def print_top_words(model, feature_names, n_top_words): 
    for topic_id, topic in enumerate(model.components_): 
     print('\nTopic Nr.%d:' % int(topic_id + 1)) 
     print(''.join([feature_names[i] + ' ' + str(round(topic[i], 2)) 
       +' | ' for i in topic.argsort()[:-n_top_words - 1:-1]])) 

n_top_words = 4 
tf_feature_names = tf_vectorizer.get_feature_names() 
print_top_words(lda, tf_feature_names, n_top_words) 

Topic Nr.1: demenzforsch 1.31 | fotus 1.21 | umwelteinfluss 1.16 | forschungsergebnis 1.04 | 
Topic Nr.2: fur 1.47 | zwisch 0.94 | uber 0.81 | kontext 0.8 | 
... 
Topic Nr.20: werd 405.12 | fur 399.62 | sozial 212.31 | beitrag 177.95 | 
+1

क्या आप इस बारे में किसी भी निष्कर्ष तक पहुंचे? मुझे एक ही समस्या का सामना करना पड़ रहा है। क्या आपने स्कोर विधि की कोशिश की है? मेरे कोड पर यह एक NaN लौटाता है ... –

+1

बस पाया गया [यह जारी] [https://github.com/scikit-learn/scikit-learn/issues/6353) scikit-learn github पर, यह कार्यान्वयन अभी भी प्रतीत होता है उपयोगी होने के लिए बहुत सारी बग है। इसके बजाय [gensim] (https://radimrehurek.com/gensim/) का उपयोग करना बेहतर है। –

+0

गिहब लिंक साझा करने के लिए धन्यवाद! – LSz

उत्तर

0
प्रलेखन

components_ परिवर्तन संबंधी विषय शब्द वितरण के लिए मानकों से

। चूंकि पूर्ण विषय शब्द वितरण के लिए सशर्त एक Dirichlet है, घटक_ [i, जे] को छद्म स्थान के रूप में देखा जा सकता है जो शब्द जे को विषय I को सौंपा गया था। इसे सामान्यीकरण के बाद प्रत्येक विषय के शब्दों पर वितरण के रूप में भी देखा जा सकता है: model.components_/ model.components_.sum(axis=1)[:, np.newaxis]

तो यदि आप इस विषय में प्रत्येक शब्द के महत्व का मूल्यांकन करने के लिए घटक पर सामान्यीकृत करते हैं तो मूल्य वितरण के रूप में देखा जा सकता है। AFAIU आप कॉर्पस में दो विषयों के महत्व की तुलना करने के लिए छद्म-गणना का उपयोग नहीं कर सकते क्योंकि वे शब्द-विषय वितरण पर लागू एक चिकनाई कारक हैं।

संबंधित मुद्दे