Gensim-LDA 말렛 모델 생성
이 장에서는 LDA (Latent Dirichlet Allocation) 말렛 모델이 무엇이며 Gensim에서이를 생성하는 방법에 대해 설명합니다.
이전 섹션에서 우리는 LDA 모델을 구현하고 20Newsgroup 데이터 세트의 문서에서 주제를 가져 왔습니다. 그것은 Gensim의 LDA 알고리즘의 내장 버전이었습니다. 더 나은 품질의 주제를 제공하는 Gensim의 Mallet 버전도 있습니다. 여기서는 이미 구현 한 이전 예제에 Mallet의 LDA를 적용 할 것입니다.
LDA 말렛 모델이란?
오픈 소스 툴킷 인 Mallet은 Andrew McCullum이 작성했습니다. 기본적으로 NLP, 문서 분류, 클러스터링, 주제 모델링 및 기타 많은 기계 학습 응용 프로그램에서 텍스트로 사용되는 Java 기반 패키지입니다. LDA 및 계층 적 LDA의 효율적인 샘플링 기반 구현을 포함하는 Mallet Topic Modeling 툴킷을 제공합니다.
Mallet2.0은 Java 토픽 모델링 툴킷 인 MALLET의 현재 릴리스입니다. Gensim for LDA와 함께 사용하기 전에 시스템에 mallet-2.0.8.zip 패키지를 다운로드하고 압축을 풀어야합니다. 설치하고 압축을 푼 후에는 환경 변수 % MALLET_HOME %을 MALLET 디렉토리를 가리키는 지점으로 수동 또는 우리가 제공 할 코드로 설정하고, 다음에 Mallet으로 LDA를 구현합니다.
Gensim 래퍼
Python은 LDA (Latent Dirichlet Allocation)를위한 Gensim 래퍼를 제공합니다. 해당 래퍼의 구문은 다음과 같습니다.gensim.models.wrappers.LdaMallet. MALLET의 축소 된 깁스 샘플링 인이 모듈을 사용하면 학습 코퍼스에서 LDA 모델을 추정하고 보이지 않는 새 문서에 대한 주제 배포를 추론 할 수 있습니다.
구현 예
이전에 구축 된 LDA 모델에서 LDA Mallet을 사용하고 Coherence 점수를 계산하여 성능 차이를 확인할 것입니다.
Mallet 파일 경로 제공
이전 예제에서 빌드 된 말뭉치에 Mallet LDA 모델을 적용하기 전에 환경 변수를 업데이트하고 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.
Mallet 파일의 경로를 제공했으면 이제 말뭉치에서 사용할 수 있습니다. 다음의 도움으로 수행 할 수 있습니다.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