Можно ли установить начальные назначения тем для scikit-learn LDA?

#machine-learning #scikit-learn #lda #latent-semantic-analysis

#машинное обучение #scikit-learn #lda #скрытый-семантический-анализ

Вопрос:

Вместо установки topic_word_prior в качестве параметра я хотел бы инициализировать темы в соответствии с заранее определенным распределением по словам. Как бы я установил это начальное распределение тем в реализации sklearn? Если это невозможно, есть ли лучшая реализация для рассмотрения?

Комментарии:

1. Я также хотел бы отметить, что для этого вам следует проверить pickle . Он сохраняет модель в виде файла для обеспечения доступности: docs.python.org/3/library/pickle.html

Ответ №1:

Если у вас есть предопределенное распределение слов в предварительно обученной модели, вы можете просто передать bow_corpus через это распределение как функцию. Генераторы LDA и LDAMallet могут быть обучены один раз, после чего вы можете передать новый набор данных для распределения без изменения тем.

Шаги:

  1. Импортируйте свои данные
  2. Очистите свои данные: уберите знаки препинания, цифры, лемматизируйте, удалите стоп-слова и stem
  3. Создайте словарь
     dictionary = gensim.corpora.Dictionary(processed_docs[:])
    dictionary.filter_extremes(no_below=15, no_above=0.5, keep_n=100000)
     
  4. Определите корпус bow
     bow_corpus = [dictionary.doc2bow(doc) for doc in processed_docs]
     
  5. Обучите свою модель — пропустите, если она уже обучена
     ldamallet = gensim.models.wrappers.LdaMallet(mallet_path, 
                corpus=bow_corpus, num_topics=15, id2word=dictionary)
     
  6. Импортируйте новые данные и выполните шаги 1-4
  7. Передайте ваши новые данные через вашу модель следующим образом:
       ldamallet[bow_corpus_new[:len(bow_corpus_new)]]
     
  8. Теперь ваши новые данные распределены, и вы можете поместить их в формат CSV

Комментарии:

1. Просто чтобы убедиться, что я вас правильно понял, вы предлагаете 1) сгенерировать кучу образцов (пакет документов word) с использованием предопределенного дистрибутива, затем 2) обучить LDA на предопределенном корпусе и, наконец, 3) использовать эту модель в качестве отправной точки для модели, обученной нафактические данные?

2. @ComplexGates Я добавил краткое описание процедуры, надеюсь, это помогло прояснить ситуацию 🙂