अव्यक्त डिरिचलेट आवंटन से प्राप्त विषयों का उपयोग करते हुए दस्तावेजों की क्लस्टरिंग


9

मैं एक परियोजना के लिए अव्यक्त डिरिचलेट आवंटन का उपयोग करना चाहता हूं और मैं gensim पुस्तकालय के साथ पायथन का उपयोग कर रहा हूं। विषयों को खोजने के बाद, मैं एक एल्गोरिथ्म का उपयोग करके दस्तावेजों को क्लस्टर करना चाहूंगा जैसे कि के-मीन्स (आदर्श रूप से मैं क्लस्टर्स को ओवरलैप करने के लिए एक अच्छा उपयोग करना चाहूंगा ताकि किसी भी सिफारिश का स्वागत किया जाए)। मैं विषयों को प्राप्त करने में कामयाब रहा, लेकिन वे इस रूप में हैं:

0.041 * मंत्री + 0.041 * कुंजी + 0.041 * क्षण + 0.041 * विवादास्पद + 0.041 * प्रधान

एक क्लस्टरिंग एल्गोरिथ्म को लागू करने के लिए, और अगर मैं गलत हूं तो मुझे सही करें, मेरा मानना ​​है कि मुझे प्रत्येक शब्द को एक संख्या के रूप में या तो tfidf या word2vec का उपयोग करके पता लगाना चाहिए।

क्या आपके पास कोई विचार है कि मैं उदाहरण के लिए एक सूची से पाठ्य सूचना को कैसे "स्ट्रिप" कर सकता हूं, ताकि ऐसा करने के लिए और फिर उन्हें उचित गुणा करने के लिए वापस जगह मिल सके?

उदाहरण के लिए, जिस तरह से मैं इसे देखता हूं, यदि शब्द मंत्री के पास 0.042 का वजनदार वजन है और इसी तरह किसी अन्य शब्द के लिए मुझे इस विषय में कुछ गणना करनी चाहिए:

०.०४१ * ०.४२ + ... + ०.०४१ * tfidf (प्राइम) और एक परिणाम प्राप्त करें जो बाद में परिणाम क्लस्टर करने के लिए उपयोग किया जाएगा।

आपके समय के लिए शुक्रिया।


1
जैसा कि ट्यूटोरियल में समझाया गया है , आप वैक्टर के रूप में दस्तावेजों को व्यक्त कर सकते हैं। उन वैक्टरों को क्लस्टर करें।
एम्रे १३'१४

मुझे पता है कि मैं अपने संग्रह पर एलडीए लागू करने के बाद बनाए गए विषयों के अनुसार साथी को जानता हूं। प्रत्येक विषय के साथ प्रत्येक दस्तावेज़ की तुलना करने और प्रत्येक डॉक्टर के लिए संवाददाता विषय या विषयों को खोजने के लिए प्रत्येक विषय को वेक्टर के रूप में दर्शाया जाना चाहिए।
स्वान87

आपको वेक्टर के रूप में प्रत्येक शब्द का प्रतिनिधित्व नहीं करना है। आपने कॉर्पस में आपके द्वारा सीखा गया एलडीए परिवर्तन लागू करके पूरे दस्तावेज़ के लिए नया प्रतिनिधित्व प्राप्त किया है । LSI के साथ एक उदाहरण के लिए, इस लिंक को देखें: radimrehurek.com/gensim/tut2.html प्रमुख भाग वह है जहाँ वे LSI [doc_bow] के साथ संपूर्ण कॉर्प के लिए सीखे LSI परिवर्तन को लागू
करेंगे

जवाबों:


4

यह मानते हुए कि LDA ने विषयों की एक सूची तैयार की है और प्रत्येक दस्तावेज़ के लिए प्रत्येक विषय के लिए एक अंक दिया है, आप दस्तावेज़ का प्रतिनिधित्व कर सकते हैं और यह एक सर्वश्रेष्ठ वेक्टर स्कोर करता है:

Document | Prime | Minister | Controversial | TopicN | ...
   1       0.041    0.042      0.041          ...
   2       0.052    0.011      0.042          ...

प्रत्येक दस्तावेज़ के लिए स्कोर प्राप्त करने के लिए, आप दस्तावेज़ को चला सकते हैं। एक प्रशिक्षित एलडीए मॉडल के माध्यम से, शब्दों के एक बैग के रूप में। Gensim प्रलेखन से:

>>> lda = LdaModel(corpus, num_topics=100)  # train model
>>> print(lda[doc_bow]) # get topic probability distribution for a document

फिर, आप इस मैट्रिक्स पर k- साधन चला सकते हैं और यह समूह दस्तावेज़ों को एक साथ समान होना चाहिए। K- साधन डिफ़ॉल्ट रूप से एक कठिन क्लस्टरिंग एल्गोरिथ्म है जिसका अर्थ है कि यह प्रत्येक दस्तावेज़ को एक क्लस्टर में वर्गीकृत करता है। आप नरम क्लस्टरिंग तंत्र का उपयोग कर सकते हैं जो आपको एक संभावना स्कोर देगा कि एक दस्तावेज़ एक क्लस्टर के भीतर फिट बैठता है - इसे फ़ज़ी के-साधन कहा जाता हैhttps://gist.github.com/mblondel/1451300 एक पायथन जिस्ट दिखा रहा है कि आप इसे कैसे सीख सकते हैं।

ps: मैं 2 से अधिक लिंक पोस्ट नहीं कर सकता


मैंने ऐसा करने की कोशिश की "n" के लिए कोई भी दस्तावेज़ यह नहीं कहता कि विषय कहाँ हैं। हालाँकि दस्तावेज़ों की संख्या x के लिए, सभी t विषयों की संभावना केवल कुछ (t- नहीं) विषयों को नहीं दिखाती है, जहाँ 1 <= no <t दिखाई देता है। जब मैं छोटे दस्तावेज़ आकार पर प्रयोग चलाता हूं तो ऐसा नहीं होता है। क्या ऐसा इसलिए है क्योंकि यह 0 है अगर संभावना 0 मुद्रित नहीं है?
मनीष रंजन

0

पिछले उत्तर के पूरक आपको बेहतर नहीं होना चाहिए कि वे सीधे lda विषय-डॉक्टर वितरण से प्राप्त संरचना डेटा पर सीधे किमी न चलाएं, इसके बजाय उन्हें ilr या clr जैसे यूक्लिडियन स्थान पर प्रोजेक्ट करने के लिए कुछ संरचनागत डेटा परिवर्तन का उपयोग करें।

( उदाहरण )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.