我是哈佛图书馆书名和主题的主题建模。
我使用 Gensim Mallet Wrapper 与 Mallet 的 LDA 进行建模。当我尝试获取 Coherence 和 Perplexity 值以查看模型有多好时,perplexity 无法计算,但出现以下异常。如果我使用 Gensim 的内置 LDA 模型而不是 Mallet,我不会得到同样的错误。我的语料库包含 7M+ 文档,长度不超过 50 个单词,平均 20 个单词。所以文档很短。
以下是我的代码的相关部分:
# TOPIC MODELING
from gensim.models import CoherenceModel
num_topics = 50
# Build Gensim's LDA model
lda_model = gensim.models.ldamodel.LdaModel(corpus=corpus,
id2word=id2word,
num_topics=num_topics,
random_state=100,
update_every=1,
chunksize=100,
passes=10,
alpha='auto',
per_word_topics=True)
# Compute Perplexity
print('\nPerplexity: ', lda_model.log_perplexity(corpus))
# a measure of how good the model is. lower the better.
困惑:-47.91929228302663
# Compute Coherence Score
coherence_model_lda = CoherenceModel(model=lda_model,
texts=data_words_trigrams, dictionary=id2word, coherence='c_v')
coherence_lda = coherence_model_lda.get_coherence()
print('\nCoherence Score: ', coherence_lda)
连贯性分数:0.28852857563541856
LDA 给出的分数没有问题。现在我用 MALLET 模拟同一个词袋
# Building LDA Mallet Model
mallet_path = '~/mallet-2.0.8/bin/mallet' # update this path
ldamallet = gensim.models.wrappers.LdaMallet(mallet_path,
corpus=corpus, num_topics=num_topics, id2word=id2word)
# Convert mallet to gensim type
mallet_model =
gensim.models.wrappers.ldamallet.malletmodel2ldamodel(ldamallet)
# Compute Coherence Score
coherence_model_ldamallet = CoherenceModel(model=mallet_model,
texts=data_words_trigrams, dictionary=id2word, coherence='c_v')
coherence_ldamallet = coherence_model_ldamallet.get_coherence()
print('\nCoherence Score: ', coherence_ldamallet)
连贯性分数:0.5994123896865993
然后我询问 Perplexity 值并获得低于警告和 NaN 值。
# Compute Perplexity
print('\nPerplexity: ', mallet_model.log_perplexity(corpus))
/app/app-py3/lib/python3.5/site-packages/gensim/models/ldamodel.py:1108:RuntimeWarning:在乘法得分中遇到无效值+ = np.sum((self.eta - _lambda)* Elogbeta )
困惑:南
/app/app-py3/lib/python3.5/site-packages/gensim/models/ldamodel.py:1109:RuntimeWarning:减分中遇到无效值+ = np.sum(gammaln(_lambda)-gammaln(self。埃塔))
我意识到这是一个非常 Gensim 特定的问题,需要对这个函数有更深入的了解:gensim.models.wrappers.ldamallet.malletmodel2ldamodel(ldamallet)
因此,我将不胜感激对警告和 Gensim 域的任何评论。