2014-06-26 8 views
7

संपादित करें: मुझे यहां एक दिलचस्प समस्या मिली है। This link दिखाता है कि जीन्सिम प्रशिक्षण और अनुमान दोनों चरणों में यादृच्छिकता का उपयोग करता है। तो यहां यह सुझाव दिया गया है कि हर बार एक ही परिणाम प्राप्त करने के लिए एक निश्चित बीज निर्धारित करें। हालांकि मैं हर विषय के लिए एक ही संभावना क्यों प्राप्त कर रहा हूं?एलडीए जेन्सिम कार्यान्वयन, दो अलग-अलग दस्तावेज़ों के बीच दूरी

मैं क्या करना चाहता हूं कि प्रत्येक ट्विटर उपयोगकर्ता के विषयों को ढूंढें और विषयों में समानता के आधार पर ट्विटर उपयोगकर्ताओं के बीच समानता की गणना करें। क्या Gensim में प्रत्येक उपयोगकर्ता के लिए एक ही विषय की गणना करने की कोई संभावना है या क्या मुझे विषयों के एक शब्दकोश की गणना करना है और प्रत्येक उपयोगकर्ता विषय क्लस्टर करना है?

सामान्य रूप से, जेन्सिम में विषय-मॉडल निष्कर्षण के आधार पर दो ट्विटर उपयोगकर्ताओं की तुलना करने का सबसे अच्छा तरीका कौन सा है?

def preprocess(id): #Returns user word list (or list of user tweet) 

     user_list = user_corpus(id, 'user_'+str(id)+'.txt') 
     documents = [] 
     for line in open('user_'+str(id)+'.txt'): 
       documents.append(line) 
     #remove stop words 
     lines = [line.rstrip() for line in open('stoplist.txt')] 
     stoplist= set(lines) 
     texts = [[word for word in document.lower().split() if word not in stoplist] 
        for document in documents] 
     # remove words that appear only once 
     all_tokens = sum(texts, []) 
     tokens_once = set(word for word in set(all_tokens) if all_tokens.count(word) < 3) 
     texts = [[word for word in text if word not in tokens_once] 
        for text in texts] 
     words = [] 
     for text in texts: 
      for word in text: 
       words.append(word) 

     return words 


    words1 = preprocess(14937173) 
    words2 = preprocess(15386966) 
    #Load the trained model 
    lda = ldamodel.LdaModel.load('tmp/fashion1.lda') 
    dictionary = corpora.Dictionary.load('tmp/fashion1.dict') #Load the trained dict 

    corpus = [dictionary.doc2bow(words1)] 
    tfidf = models.TfidfModel(corpus) 
    corpus_tfidf = tfidf[corpus] 
    corpus_lda = lda[corpus_tfidf] 

    list1 = [] 
    for item in corpus_lda: 
     list1.append(item) 

    print lda.show_topic(0) 
    corpus2 = [dictionary.doc2bow(words2)] 
    tfidf2 = models.TfidfModel(corpus2) 
    corpus_tfidf2 = tfidf2[corpus2] 
    corpus_lda2 = lda[corpus_tfidf2] 

    list2 = [] 
    for it in corpus_lda2: 
     list2.append(it) 

    print corpus_lda.show_topic(0) 

वापस लौटाए गए उपयोगकर्ता कोष के लिए विषय संभावनाओं (जब एक कोष के रूप में उपयोगकर्ता शब्दों की एक सूची का उपयोग):

[(0, 0.10000000000000002), (1, 0.10000000000000002), (2, 0.10000000000000002), 
    (3, 0.10000000000000002), (4, 0.10000000000000002), (5, 0.10000000000000002), 
    (6, 0.10000000000000002), (7, 0.10000000000000002), (8, 0.10000000000000002), 
    (9, 0.10000000000000002)] 

मामले में जहाँ मैं उपयोगकर्ता ट्वीट्स की एक सूची का उपयोग मेरे कोड इस प्रकार है , मैं प्रत्येक ट्वीट के लिए गणना की गई विषयों को वापस प्राप्त करता हूं।

प्रश्न 2: क्या निम्नलिखित समझ में आता है: कई ट्विटर उपयोगकर्ताओं के साथ एलडीए मॉडल प्रशिक्षण और एलडीए मॉडल का उपयोग करके प्रत्येक उपयोगकर्ता (प्रत्येक उपयोगकर्ता कॉर्पस के साथ) विषय की गणना करना?

प्रदान किए गए उदाहरण में, list[0] समान संभावनाओं के साथ विषय वितरण देता है 0.1। मूल रूप से, पाठ की प्रत्येक पंक्ति एक अलग ट्वीट से मेल खाती है। यदि मैं corpus = [dictionary.doc2bow(text) for text in texts] के साथ कॉर्पस की गणना करता हूं तो यह मुझे प्रत्येक ट्वीट के लिए अलग-अलग संभावनाएं देगा। दूसरी तरफ, यदि मैं उदाहरण के समान corpus = [dictionary.doc2bow(words)] का उपयोग करता हूं, तो मेरे पास केवल सभी उपयोगकर्ता शब्द कॉर्पस के रूप में होंगे। दूसरे मामले में, जेनसिम सभी विषयों के लिए समान संभावनाएं देता है। इस प्रकार, दोनों उपयोगकर्ताओं के लिए मुझे एक ही विषय वितरण मिल रहा है।

क्या उपयोगकर्ता टेक्स्ट कॉर्पस शब्दों की एक सूची या वाक्यों की सूची (ट्वीट्स की एक सूची) होना चाहिए?

पेज 264 में twitterRank approach में क्यूई हे और जियानशु वेंग के कार्यान्वयन के संबंध में यह कहता है कि: हम व्यक्तिगत ट्विचरर द्वारा एक बड़े दस्तावेज़ में प्रकाशित ट्वीट्स को एकत्रित करते हैं। इस प्रकार, प्रत्येक दस्तावेज़ एक twitterrer के अनुरूप है। ठीक है, मैं उलझन में हूं, अगर दस्तावेज़ सभी उपयोगकर्ता ट्वीट्स होगा तो कॉर्पस में क्या होना चाहिए ??

उत्तर

2

Fere Res निम्नलिखित सुझाव here देखें। print(vec_lda) आप प्राप्त करेंगे: सबसे पहले आप अज्ञात दस्तावेज़ के निकाले वेक्टर, जो के रूप

vec_bow = dictionary.doc2bow(doc.lower().split()) 
vec_lda = lda[vec_bow] 

यहाँ गणना की जाती है के उपयोग के साथ सभी उपयोगकर्ताओं से lda मॉडल की गणना करने के लिए और फिर आप निम्नलिखित प्रिंट तो है एलडीए मॉडल विषयों के लिए अदृश्य दस्तावेज़ का वितरण।

+0

क्या शब्दों पर वितरण प्राप्त करने के लिए टॉपिव्स पर वितरण को छोड़कर कोई सकारात्मकता है ?? –

1

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

आप टीएफआईडीएफ के शीर्ष पर एलएसआई का उपयोग कर सकते हैं, लेकिन एलडीए नहीं। यदि आप एलडीए पर टीएफआईडीएफ का उपयोग करते हैं, तो यह प्रत्येक विषय को लगभग उसी तरह उत्पन्न करेगा, आप इसे प्रिंट और जांच सकते हैं।

https://radimrehurek.com/gensim/tut2.html भी देखें।

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