Можно ли установить начальные темы для LDA scikit-learn? - PullRequest
0 голосов
/ 18 апреля 2019

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

1 Ответ

1 голос
/ 24 апреля 2019

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

Шаги:

  1. Импорт ваших данных
  2. Очистите ваши данные: знаки препинания, цифры, лемматизируйте, удалите стоп-слова и основа
  3. Создать словарь

    dictionary = gensim.corpora.Dictionary(processed_docs[:])
    dictionary.filter_extremes(no_below=15, no_above=0.5, keep_n=100000)
    
  4. Определить корпус лука

    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

...