【问题标题】:Is it possible to set the initial topic assignments for scikit-learn LDA?是否可以为 scikit-learn LDA 设置初始主题分配?
【发布时间】:2019-09-09 05:29:32
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

如果您在预训练模型中有预定义的单词分布,您可以将 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 文件中

【讨论】:

  • 只是为了验证我对您的理解是否正确,您建议 1) 使用预定义的分布生成一堆样本(词袋)文档,然后 2) 在预定义的分布上训练 LDA语料库,最后 3) 使用该模型作为在实际数据上训练的模型的起点?
  • @ComplexGates 我添加了一个简短的程序分解,希望它有助于澄清:)
猜你喜欢
  • 2016-02-27
  • 2019-01-23
  • 2017-10-27
  • 2019-02-05
  • 2017-11-16
  • 2013-06-09
  • 2016-12-29
  • 1970-01-01
  • 2017-02-19
相关资源
最近更新 更多