Gensim - การสร้าง LDA Mallet Model
บทนี้จะอธิบายว่าอะไรคือ Latent Dirichlet Allocation (LDA) Mallet Model และวิธีสร้างแบบเดียวกันใน Gensim
ในส่วนก่อนหน้านี้เราได้ใช้โมเดล LDA และรับหัวข้อจากเอกสารของชุดข้อมูล 20Newsgroup นั่นคืออัลกอริทึม LDA ในเวอร์ชันที่สร้างขึ้นของ Gensim นอกจากนี้ยังมี Gensim เวอร์ชัน Mallet ซึ่งให้คุณภาพของหัวข้อที่ดีกว่า ที่นี่เราจะนำ LDA ของ Mallet ไปใช้กับตัวอย่างก่อนหน้านี้ที่เราได้ดำเนินการไปแล้ว
LDA Mallet Model คืออะไร?
Mallet ซึ่งเป็นชุดเครื่องมือโอเพนซอร์สเขียนโดย Andrew McCullum โดยพื้นฐานแล้วเป็นแพคเกจที่ใช้ Java ซึ่งใช้สำหรับ NLP การจำแนกเอกสารการทำคลัสเตอร์การสร้างแบบจำลองหัวข้อและแอปพลิเคชันการเรียนรู้ของเครื่องอื่น ๆ เป็นข้อความ เครื่องมือนี้มีชุดเครื่องมือ Mallet Topic Modeling ซึ่งมีการใช้งาน LDA ตามลำดับตัวอย่างที่มีประสิทธิภาพและ LDA ตามลำดับชั้น
Mallet2.0 เป็นรีลีสปัจจุบันจาก MALLET ซึ่งเป็นชุดเครื่องมือการสร้างแบบจำลองหัวข้อ java ก่อนที่เราจะเริ่มใช้กับ Gensim สำหรับ LDA เราต้องดาวน์โหลดแพ็คเกจ mallet-2.0.8.zip ในระบบของเราและคลายซิป เมื่อติดตั้งและคลายซิปแล้วให้ตั้งค่าตัวแปรสภาพแวดล้อม% MALLET_HOME% ให้ชี้ไปที่ไดเร็กทอรี MALLET ด้วยตนเองหรือตามรหัสที่เราจะให้ในขณะที่ใช้ LDA กับ Mallet ต่อไป
Gensim Wrapper
Python ให้ Gensim wrapper สำหรับ Latent Dirichlet Allocation (LDA) ไวยากรณ์ของ Wrapper นั้นคือgensim.models.wrappers.LdaMallet. โมดูลนี้การสุ่มตัวอย่าง gibbs แบบยุบจาก MALLET ช่วยให้สามารถประเมินแบบจำลอง LDA จากคลังข้อมูลการฝึกอบรมและการอนุมานของการกระจายหัวข้อในเอกสารใหม่ที่มองไม่เห็นได้เช่นกัน
ตัวอย่างการใช้งาน
เราจะใช้ LDA Mallet กับโมเดล LDA ที่สร้างขึ้นก่อนหน้านี้และจะตรวจสอบความแตกต่างของประสิทธิภาพโดยการคำนวณคะแนน 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