जेनसिम - एलडीए मैलेट मॉडल बनाना
यह अध्याय बताएगा कि एक लेटेंट डिरिचलेट आवंटन (एलडीए) मैलेट मॉडल क्या है और गेंसिम में इसे कैसे बनाया जाए।
पिछले भाग में हमने LDA मॉडल लागू किया है और 20Newsgroup डेटासेट के दस्तावेजों से विषय प्राप्त करते हैं। यह Gensim एलडीए एल्गोरिथ्म का इनबिल्ट वर्जन था। Gensim का एक Mallet संस्करण भी है, जो विषयों की बेहतर गुणवत्ता प्रदान करता है। यहां, हम पहले से लागू किए गए उदाहरण पर मैलेट के एलडीए को लागू करने जा रहे हैं।
LDA Mallet Model क्या है?
मैलेट, एक खुला स्रोत टूलकिट, एंड्रयू मैककुलम द्वारा लिखा गया था। यह मूल रूप से जावा आधारित पैकेज है जिसका उपयोग एनएलपी, दस्तावेज़ वर्गीकरण, क्लस्टरिंग, विषय मॉडलिंग और पाठ के लिए कई अन्य मशीन लर्निंग अनुप्रयोगों के लिए किया जाता है। यह हमें मैलेट टॉपिक मॉडलिंग टूलकिट प्रदान करता है जिसमें एलडीए के साथ-साथ पदानुक्रमित एलडीए के कुशल, नमूना-आधारित कार्यान्वयन शामिल हैं।
Mallet2.0 MALLET से वर्तमान रिलीज़ है, जावा विषय मॉडलिंग टूलकिट है। इससे पहले कि हम एलडीए के लिए गेंसिम के साथ इसका उपयोग शुरू करें, हमें अपने सिस्टम पर mallet-2.0.8.zip पैकेज डाउनलोड करना होगा और इसे अनइंस्टॉल करना होगा। एक बार स्थापित और अनजिप हो जाने पर, पर्यावरण चर% MALLET_HOME% को MALLET निर्देशिका को इंगित करने के लिए मैन्युअल रूप से या हमारे द्वारा प्रदान किए जा रहे कोड द्वारा, जबकि बगल में Mallet के साथ LDA लागू करते हैं।
जेनसिम आवरण
पायथन लेंटेंट डिरिचलेट आवंटन (एलडीए) के लिए जेनसिम आवरण प्रदान करता है। उस आवरण का वाक्य विन्यास हैgensim.models.wrappers.LdaMallet। यह मॉड्यूल, MALLET से गिब्ब्स के नमूने का टूटना, एक प्रशिक्षण कॉर्पस से एलडीए मॉडल का अनुमान लगाने और नए, अनदेखी दस्तावेजों के साथ-साथ विषय वितरण के संबंध में अनुमति देता है।
कार्यान्वयन उदाहरण
हम पहले से बने एलडीए मॉडल पर एलडीए मैलेट का उपयोग करेंगे और कोहेरेंस स्कोर की गणना करके प्रदर्शन में अंतर की जांच करेंगे।
मैलेट फ़ाइल को पथ प्रदान करना
पिछले उदाहरण में निर्मित हमारे कॉर्पस पर मैलेट एलडीए मॉडल को लागू करने से पहले, हमें पर्यावरण चर को अपडेट करना होगा और साथ ही मैलेट फ़ाइल को पथ प्रदान करना होगा। यह निम्नलिखित कोड की मदद से किया जा सकता है -
import os
from gensim.models.wrappers import LdaMallet
os.environ.update({'MALLET_HOME':r'C:/mallet-2.0.8/'})
#You should update this path as per the path of Mallet directory on your system.
mallet_path = r'C:/mallet-2.0.8/bin/mallet'
#You should update this path as per the path of Mallet directory on your system.
एक बार जब हमने मैलेट फ़ाइल को पथ प्रदान किया, तो अब हम इसे कॉर्पस पर उपयोग कर सकते हैं। की सहायता से किया जा सकता हैldamallet.show_topics() कार्य निम्नानुसार है -
ldamallet = gensim.models.wrappers.LdaMallet(
mallet_path, corpus=corpus, num_topics=20, id2word=id2word
)
pprint(ldamallet.show_topics(formatted=False))
उत्पादन
[
(4,
[('gun', 0.024546225966016102),
('law', 0.02181426826996709),
('state', 0.017633545129043606),
('people', 0.017612848479831116),
('case', 0.011341763768445888),
('crime', 0.010596684396796159),
('weapon', 0.00985160502514643),
('person', 0.008671896020034356),
('firearm', 0.00838214293105946),
('police', 0.008257963035784506)]),
(9,
[('make', 0.02147966482730431),
('people', 0.021377478029838543),
('work', 0.018557122419783363),
('money', 0.016676885346413244),
('year', 0.015982015123646026),
('job', 0.012221540976905783),
('pay', 0.010239117106069897),
('time', 0.008910688739014919),
('school', 0.0079092581238504),
('support', 0.007357449417535254)]),
(14,
[('power', 0.018428398507941996),
('line', 0.013784244460364121),
('high', 0.01183271164249895),
('work', 0.011560979224821522),
('ground', 0.010770484918850819),
('current', 0.010745781971789235),
('wire', 0.008399002000938712),
('low', 0.008053160742076529),
('water', 0.006966231071366814),
('run', 0.006892122230182061)]),
(0,
[('people', 0.025218349201353372),
('kill', 0.01500904870564167),
('child', 0.013612400660948935),
('armenian', 0.010307655991816822),
('woman', 0.010287984892595798),
('start', 0.01003226060272248),
('day', 0.00967818081674404),
('happen', 0.009383114328428673),
('leave', 0.009383114328428673),
('fire', 0.009009363443229208)]),
(1,
[('file', 0.030686386604212003),
('program', 0.02227713642901929),
('window', 0.01945561169918489),
('set', 0.015914874783314277),
('line', 0.013831003577619592),
('display', 0.013794120901412606),
('application', 0.012576992586582082),
('entry', 0.009275993066056873),
('change', 0.00872275292295209),
('color', 0.008612104894331132)]),
(12,
[('line', 0.07153810971508515),
('buy', 0.02975597944523662),
('organization', 0.026877236406682988),
('host', 0.025451316957679788),
('price', 0.025182275552207485),
('sell', 0.02461728860071565),
('mail', 0.02192687454599263),
('good', 0.018967419085797303),
('sale', 0.017998870026097017),
('send', 0.013694207538540181)]),
(11,
[('thing', 0.04901329901329901),
('good', 0.0376018876018876),
('make', 0.03393393393393394),
('time', 0.03326898326898327),
('bad', 0.02664092664092664),
('happen', 0.017696267696267698),
('hear', 0.015615615615615615),
('problem', 0.015465465465465466),
('back', 0.015143715143715144),
('lot', 0.01495066495066495)]),
(18,
[('space', 0.020626317374284855),
('launch', 0.00965716006366413),
('system', 0.008560244332602057),
('project', 0.008173097603991913),
('time', 0.008108573149223556),
('cost', 0.007764442723792318),
('year', 0.0076784101174345075),
('earth', 0.007484836753129436),
('base', 0.0067535595990880545),
('large', 0.006689035144319697)]),
(5,
[('government', 0.01918437232469453),
('people', 0.01461203206475212),
('state', 0.011207097828624796),
('country', 0.010214802708381975),
('israeli', 0.010039691804809714),
('war', 0.009436532025838587),
('force', 0.00858043427504086),
('attack', 0.008424780138532182),
('land', 0.0076659662230523775),
('world', 0.0075103120865437)]),
(2,
[('car', 0.041091194044470564),
('bike', 0.015598981291017729),
('ride', 0.011019688510138114),
('drive', 0.010627877363110981),
('engine', 0.009403467528651191),
('speed', 0.008081104907434616),
('turn', 0.007738270153785875),
('back', 0.007738270153785875),
('front', 0.007468899990204721),
('big', 0.007370947203447938)])
]
प्रदर्शन का मूल्यांकन
अब हम इसके प्रदर्शन का मूल्यांकन इस प्रकार कर सकते हैं कि सुसंगतता की गणना निम्न प्रकार से की गई है -
ldamallet = gensim.models.wrappers.LdaMallet(
mallet_path, corpus=corpus, num_topics=20, id2word=id2word
)
pprint(ldamallet.show_topics(formatted=False))
उत्पादन
Coherence Score: 0.5842762900901401