LDA Topi c Моделирование: темы, предсказанные из огромного корпуса, не имеют смысла - PullRequest
1 голос
/ 16 января 2020

Я использую 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 предсказывает так плохо, почему есть такая ажиотаж и что такое эффективный альтернативный метод?

1 Ответ

1 голос
/ 20 января 2020

Это может быть совершенно действительный вывод модели. Учитывая исходные тексты, которые не являются необходимыми, относящиеся к «воспитанию детей и воспитанию детей», topi c, который был признан наиболее похожим, может быть просто очень похож на статью. Вполне вероятно, что между статьями NY Times и вашей статьей мало общего. Так что слова, делающие топи c отличительными среди тем, типичных для NY Times, могут иметь мало общего с вашей статьей. Фактически, единственные слова, которые являются общими, могут быть довольно типичными для всего, что происходит в вашем случае.

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

Я предлагаю вам либо изменить количество тем и корпуса, либо найти подходящий корпус для обучения LDA on (содержит тексты, относящиеся к документам, которые вы собираетесь классифицировать).

...