Я использую LDA для задачи моделирования Topi c. Как предлагалось на различных форумах в Интернете, я обучил свою модель довольно обширному корпусу: новостному набору новостей NYTimes (файл CSV ~ 200 МБ), в котором есть отчеты по широкому кругу новостных тем. Удивительно, но темы, предсказанные из этого, в основном связаны с политикой США, и когда я проверяю это на новом документе, касающемся «как обучать детей и воспитание детей», он предсказывает наиболее вероятные топи c как это:
['two', 'may', 'make', 'company', 'house', 'items', 'case', 'use']
Пожалуйста, взгляните на мою модель:
def ldamodel_english(filepath, data):
data_words = simple_preprocess(str(data), deacc=True)
# Building the bigram model and removing stopwords
bigram = Phrases(data_words, min_count=5, threshold=100)
bigram_mod = Phraser(bigram)
stop_words_english = stopwords.words('english')
data_nostops = [[word for word in simple_preprocess(str(doc)) if word not in stop_words_english]
for doc in data_words]
data_bigrams = [bigram_mod[doc] for doc in data_nostops]
data_bigrams = [x for x in data_bigrams if x != []]
# Mapping indices to words for computation purpose
id2word = corpora.Dictionary(data_bigrams)
corpus = [id2word.doc2bow(text) for text in data_bigrams]
# Building the LDA model. The parameters 'alpha' and 'eta' handle the number of topics per document and words per topic respectively
lda_model = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=id2word, num_topics=20, random_state=10, iterations=100,
update_every=1, chunksize=1000, passes=8, alpha=0.09, per_word_topics=True, eta=0.8)
print('\nPerplexity Score: ' + str(lda_model.log_perplexity(corpus)) + '\n')
for i, topic in lda_model.show_topics(formatted=True, num_topics=20, num_words=10):
print('TOPIC #' + str(i) + ': ' + topic + '\n')
coherence_model_lda = CoherenceModel(model=lda_model, texts=data_bigrams, dictionary=id2word, coherence='c_v')
print('\nCoherence Score: ', coherence_model_lda.get_coherence())
saved_model_path = os.path.join(filepath, 'ldamodel_english')
lda_model.save(saved_model_path)
return saved_model_path, corpus, id2word
Часть 'data' взята из раздела 'Content' набора данных NYTimes News, и я использовал библиотеку GENSIM для LDA.
У меня вопрос, если хорошо обученная модель LDA предсказывает так плохо, почему есть такая ажиотаж и что такое эффективный альтернативный метод?