是否可以为scikit-learn LDA设置初始主题分配?

时间:2019-04-18 20:39:23

标签: machine-learning scikit-learn lda latent-semantic-analysis

我不想将topic_word_prior设置为参数,而是希望根据单词的预定义分布来初始化主题。如何在sklearn的实现中设置此初始主题分布?如果不可能,是否有更好的实现方案可供考虑?

1 个答案:

答案 0 :(得分:1)

如果您在预训练模型中具有预定义的单词分布,则可以通过功能将bow_corpus通过该分布。 Gensims LDA和LDAMallet都可以接受一次培训,然后您可以传递新的数据集进行分配,而无需更改主题。

步骤:

  1. 导入您的数据
  2. 清理您的数据:nix标点,数字,去词义化,删除停用词和词干
  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