Я занимаюсь моделированием названий и тем книги Гарвардской библиотеки.
Я использую Gensim Mallet Wrapper для моделирования с LDA Маллета.
Когда я пытаюсь получить значения Coherence и Perplexity, чтобы увидеть, насколько хороша модель, растерянность не рассчитывается, за исключением следующих случаев.
Я не получаю ту же ошибку, если я использую встроенную модель LDA от Gensim вместо Mallet.
В моем корпусе хранится более 7 миллионов документов длиной до 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
Затем я запрашиваю значения недоумения и получаю предупреждения ниже и значение NaN.
# Compute Perplexity
print('\nPerplexity: ', mallet_model.log_perplexity(corpus))
/ приложение / приложение-PY3 / Библиотека / python3.5 / сайт-пакеты / gensim / модели / ldamodel.py: 1108:
RuntimeWarning: недопустимое значение в кратном счете + =
np.sum ((self.eta - _lambda) * Elogbeta)
недоумение: nan
/ приложение / приложение-PY3 / Библиотека / python3.5 / сайт-пакеты / gensim / модели / ldamodel.py: 1109:
RuntimeWarning: недопустимое значение в баллах вычитания + =
np.sum (gammaln (_lambda) - gammaln (self.eta))
Я понимаю, что это очень специфический вопрос Генсима и требует более глубокого знания этой функции:
gensim.models.wrappers.ldamallet.malletmodel2ldamodel (ldamallet)
Следовательно, я был бы признателен за любые комментарии по поводу предупреждений и домена Gensim.