Почему Маллет LDA дает плохие результаты, тогда как версия Gensim не дает? - PullRequest
1 голос
/ 03 ноября 2019

Я пробираюсь через модели LDA для анализа текста;Я слышал, что реализация Mallet - лучшая. Тем не менее, кажется, что результаты очень плохие, когда я сравниваю их с версией Gensim, так что я думаю, что могу сделать что-то не так. Может ли кто-нибудь объяснить несоответствие?

import gensim
from gensim.corpora.dictionary import Dictionary
import gensim.corpora as corpora
from gensim.utils import simple_preprocess
from gensim.models import CoherenceModel
import pyLDAvis
import pyLDAvis.gensim  


## Generate a toy corpus:

dog = list(np.repeat('dog', 500)) + list(np.repeat('cat', 20)) + list(np.repeat('bird', 20))
cat = list(np.repeat('dog', 20)) + list(np.repeat('cat', 500)) + list(np.repeat('bird', 20))
bird = list(np.repeat('dog', 20)) + list(np.repeat('cat', 20)) + list(np.repeat('bird', 500))

texts = [dog, cat, bird]

id2word = corpora.Dictionary(texts)

corpus = [id2word.doc2bow(i) for i in texts]

### Gensim model

lda_model = gensim.models.ldamodel.LdaModel(corpus = corpus,
                                        id2word=id2word,
                                           num_topics=3, 
                                           random_state=100,
                                           update_every=1,
                                           chunksize=100,
                                           passes=10,
                                           alpha='auto',
                                           per_word_topics=True)

pyLDAvis.enable_notebook()
vis = pyLDAvis.gensim.prepare(lda_model, corpus, id2word)


vis = pyLDAvis.prepared_data_to_html(vis)

with open("LDA_output.html", "w") as file:
    file.write(vis)

Это дает следующие правдоподобные выводы тем:

Gensim topic inference

Однако все работает оченьиначе для реализации Маллета:

mallet_path = '/mallet-2.0.8/bin/mallet'

ldamallet = gensim.models.wrappers.LdaMallet(mallet_path, corpus=corpus, num_topics=3, iterations=1000, workers = 4, id2word=id2word)

model = gensim.models.wrappers.ldamallet.malletmodel2ldamodel(ldamallet)

pyLDAvis.enable_notebook()
vis = pyLDAvis.gensim.prepare(model, corpus, id2word)

vis = pyLDAvis.prepared_data_to_html(vis)

with open("LDA_output.html", "w") as file:
    file.write(vis)

Здесь очень мало различий между темами, которые выводит модель.

Mallet version

Теперь мне кажется, что я здесь допускаю элементарную ошибку - возможно, не указав соответствующий параметр модели правильным образом. Тем не менее, я озадачен тем, что это может быть. Буду благодарен за любой совет!

...