Я пробираюсь через модели 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](https://i.stack.imgur.com/mwenL.png)
Однако все работает оченьиначе для реализации Маллета:
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](https://i.stack.imgur.com/oG1PT.png)
Теперь мне кажется, что я здесь допускаю элементарную ошибку - возможно, не указав соответствующий параметр модели правильным образом. Тем не менее, я озадачен тем, что это может быть. Буду благодарен за любой совет!