Gensim - LDA Mallet Modeli Oluşturma

Bu bölüm Latent Dirichlet Tahsis (LDA) Mallet Modelinin ne olduğunu ve Gensim'de nasıl oluşturulacağını açıklayacaktır.

Önceki bölümde LDA modelini uyguladık ve konuları 20Newsgroup veri setinin belgelerinden aldık. Bu, Gensim'in LDA algoritmasının yerleşik versiyonuydu. Gensim'in daha kaliteli konu sağlayan bir Mallet versiyonu da vardır. Burada, Mallet'in LDA'sını daha önce uyguladığımız önceki örneğe uygulayacağız.

LDA Mallet Modeli nedir?

Açık kaynak kodlu bir araç olan Mallet, Andrew McCullum tarafından yazılmıştır. Temelde NLP, belge sınıflandırma, kümeleme, konu modelleme ve diğer birçok makine öğrenimi uygulamalarının metne dönüştürülmesi için kullanılan Java tabanlı bir pakettir. Bize, Hiyerarşik LDA'nın yanı sıra LDA'nın verimli, örnekleme tabanlı uygulamalarını içeren Mallet Konu Modelleme araç setini sağlar.

Mallet2.0, java konu modelleme araç takımı olan MALLET'in güncel sürümüdür. LDA için Gensim ile kullanmaya başlamadan önce mallet-2.0.8.zip paketini sistemimize indirip açmalıyız. Kurulduktan ve fermuarını açtıktan sonra,% MALLET_HOME% ortam değişkenini manuel olarak veya LDA'yı Mallet ile uygularken sağlayacağımız kodla MALLET dizinini işaret edecek şekilde ayarlayın.

Gensim Sarıcı

Python, Latent Dirichlet Tahsisi (LDA) için Gensim sarıcı sağlar. Bu sarmalayıcının sözdizimigensim.models.wrappers.LdaMallet. MALLET'ten daraltılmış gibbs örneklemesi olan bu modül, bir eğitim külliyatından LDA model tahminine ve yeni, görünmeyen belgelerde konu dağılımının çıkarılmasına olanak tanır.

Uygulama Örneği

Önceden oluşturulmuş LDA modelinde LDA Mallet kullanacağız ve Coherence skorunu hesaplayarak performans farkını kontrol edeceğiz.

Mallet Dosyasına Giden Yol Sağlama

Mallet LDA modelini önceki örnekte oluşturulmuş derlememize uygulamadan önce, ortam değişkenlerini güncellememiz ve Mallet dosyasının yolunu da sağlamamız gerekir. Aşağıdaki kod yardımı ile yapılabilir -

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.

Mallet dosyasının yolunu sağladıktan sonra, artık onu külliyatta kullanabiliriz. Yardımı ile yapılabilirldamallet.show_topics() aşağıdaki gibi işlev -

ldamallet = gensim.models.wrappers.LdaMallet(
   mallet_path, corpus=corpus, num_topics=20, id2word=id2word
)
pprint(ldamallet.show_topics(formatted=False))

Çıktı

[
   (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)])
]

Performansı Değerlendirme

Artık tutarlılık puanını aşağıdaki gibi hesaplayarak performansını da değerlendirebiliriz -

ldamallet = gensim.models.wrappers.LdaMallet(
   mallet_path, corpus=corpus, num_topics=20, id2word=id2word
)
pprint(ldamallet.show_topics(formatted=False))

Çıktı

Coherence Score: 0.5842762900901401