Gensim - Membuat Model LDA Mallet
Bab ini akan menjelaskan apa yang dimaksud dengan Model Mallet Latent Dirichlet Allocation (LDA) dan cara membuatnya di Gensim.
Pada bagian sebelumnya kita telah mengimplementasikan model LDA dan mendapatkan topik dari dokumen dataset 20Newsgroup. Itu adalah versi bawaan dari algoritma LDA Gensim. Ada juga Gensim versi Mallet, yang memberikan kualitas topik yang lebih baik. Di sini, kita akan menerapkan LDA Mallet pada contoh sebelumnya yang telah kita terapkan.
Apa itu Model LDA Mallet?
Mallet, toolkit open source, ditulis oleh Andrew McCullum. Ini pada dasarnya adalah paket berbasis Java yang digunakan untuk NLP, klasifikasi dokumen, pengelompokan, pemodelan topik, dan banyak aplikasi pembelajaran mesin lainnya ke teks. Ini memberi kita toolkit Pemodelan Topik Mallet yang berisi implementasi LDA berbasis pengambilan sampel yang efisien serta LDA Hierarki.
Mallet2.0 adalah rilis terbaru dari MALLET, toolkit pemodelan topik java. Sebelum kita mulai menggunakannya dengan Gensim untuk LDA, kita harus mengunduh paket mallet-2.0.8.zip di sistem kita dan mengekstraknya. Setelah diinstal dan di-unzip, atur variabel lingkungan% MALLET_HOME% ke titik ke direktori MALLET baik secara manual atau dengan kode yang akan kami sediakan, saat mengimplementasikan LDA dengan Mallet selanjutnya.
Pembungkus Gensim
Python menyediakan pembungkus Gensim untuk Latent Dirichlet Allocation (LDA). Sintaks pembungkus itu adalahgensim.models.wrappers.LdaMallet. Modul ini, pengambilan sampel gibbs yang diciutkan dari MALLET, memungkinkan estimasi model LDA dari korpus pelatihan dan inferensi distribusi topik pada dokumen baru yang tidak terlihat juga.
Contoh Implementasi
Kami akan menggunakan LDA Mallet pada model LDA yang dibangun sebelumnya dan akan memeriksa perbedaan kinerja dengan menghitung skor Koherensi.
Menyediakan Path ke File Mallet
Sebelum menerapkan model LDA Mallet pada corpus kita yang dibangun pada contoh sebelumnya, kita harus memperbarui variabel lingkungan dan menyediakan jalur file Mallet juga. Itu dapat dilakukan dengan bantuan kode berikut -
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.
Setelah kami menyediakan path ke file Mallet, sekarang kami dapat menggunakannya di korpus. Itu bisa dilakukan dengan bantuanldamallet.show_topics() berfungsi sebagai berikut -
ldamallet = gensim.models.wrappers.LdaMallet(
mallet_path, corpus=corpus, num_topics=20, id2word=id2word
)
pprint(ldamallet.show_topics(formatted=False))
Keluaran
[
(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)])
]
Mengevaluasi Kinerja
Sekarang kita juga dapat mengevaluasi kinerjanya dengan menghitung skor koherensi sebagai berikut -
ldamallet = gensim.models.wrappers.LdaMallet(
mallet_path, corpus=corpus, num_topics=20, id2word=id2word
)
pprint(ldamallet.show_topics(formatted=False))
Keluaran
Coherence Score: 0.5842762900901401