Вопрос:

pyLDAvis: ошибка проверки при попытке визуализации тем

python nlp lda topic-modeling

728 просмотра

2 ответа

326 Репутация автора

Я попытался создать темы, используя gensim для 300000 записей. При попытке визуализировать темы я получаю ошибку проверки. Я могу напечатать темы после обучения модели, но это не помогает при использовании pyLDAvis

# Running and Training LDA model on the document term matrix.
ldamodel1 = Lda(doc_term_matrix1, num_topics=10, id2word = dictionary1, passes=50, workers = 4)

(ldamodel1.print_topics(num_topics=10, num_words = 10))
 #pyLDAvis
d = gensim.corpora.Dictionary.load('dictionary1.dict')
c = gensim.corpora.MmCorpus('corpus.mm')
lda = gensim.models.LdaModel.load('topic.model')

#error on executing this line
data = pyLDAvis.gensim.prepare(lda, c, d)

Я получил ошибку ниже при попытке после запуска выше pyLDAvis

---------------------------------------------------------------------------
ValidationError                           Traceback (most recent call last)
<ipython-input-53-33fd88b65056> in <module>()
----> 1 data = pyLDAvis.gensim.prepare(lda, c, d)
      2 data

C:\ProgramData\Anaconda3\lib\site-packages\pyLDAvis\gensim.py in prepare(topic_model, corpus, dictionary, doc_topic_dist, **kwargs)
    110     """
    111     opts = fp.merge(_extract_data(topic_model, corpus, dictionary, doc_topic_dist), kwargs)
--> 112     return vis_prepare(**opts)

C:\ProgramData\Anaconda3\lib\site-packages\pyLDAvis\_prepare.py in prepare(topic_term_dists, doc_topic_dists, doc_lengths, vocab, term_frequency, R, lambda_step, mds, n_jobs, plot_opts, sort_topics)
    372    doc_lengths      = _series_with_name(doc_lengths, 'doc_length')
    373    vocab            = _series_with_name(vocab, 'vocab')
--> 374    _input_validate(topic_term_dists, doc_topic_dists, doc_lengths, vocab, term_frequency)
    375    R = min(R, len(vocab))
    376 

C:\ProgramData\Anaconda3\lib\site-packages\pyLDAvis\_prepare.py in _input_validate(*args)
     63    res = _input_check(*args)
     64    if res:
---> 65       raise ValidationError('\n' + '\n'.join([' * ' + s for s in res]))
     66 
     67 

ValidationError: 
 * Not all rows (distributions) in topic_term_dists sum to 1.
Автор: Hackerds Источник Размещён: 27.12.2017 09:10

Ответы (2)


0 плюса

21 Репутация автора

Это происходит потому, что программа pyLDAvis ожидает, что все разделы документа в модели появятся в корпусе хотя бы один раз. Это может произойти, когда вы делаете некоторую предварительную обработку после создания вашего корпуса / текста и перед созданием вашей модели.

Слово во внутреннем словаре модели, которое не используется в предоставленном вами словаре, приведет к сбою, потому что теперь вероятность немного меньше единицы.

Вы можете исправить это, либо добавив пропущенные слова в словарь корпуса (или добавив слова в корпус и составив из него словарь), либо добавьте эту строку в код site-packages \ pyLDAvis \ gensim.py перед "assert" topic_term_dists.shape [0] == doc_topic_dists.shape [1] "(должно быть ~ строка 67)

topic_term_dists = topic_term_dists / topic_term_dists.sum(axis=1)[:, None]

Предполагая, что ваш код работал до этого момента, это должно перенормировать распределение тем без пропущенных элементов dict. Но обратите внимание, что было бы лучше включить все термины в корпус.

Автор: AzureX Размещён: 04.09.2018 10:14

0 плюса

161 Репутация автора

Это произошло в моей HDPModel после того, как я отфильтровал свой словарь - у меня осталось много документов нулевой длины, что привело к этой ошибке. Я удалил их, прежде чем сохранить свой MmCorpus на диск, через corpora.MmCorpus.serialize(args.save_folder + '/gensim.mm', (x for x in corpus if len(x) > 0))который я решил проблему при запуске HDP позже. corpusэто генератор для моих текстовых документов.

Автор: user108569 Размещён: 24.05.2019 11:15
Вопросы из категории :
32x32