理解Gensim LDA模型中的参数

14

我正在使用gensim.models.ldamodel.LdaModel进行LDA,但我不理解其中一些参数,文档中也找不到解释。如果有人有使用经验,我希望能够进一步了解这些参数的含义。

  • random_state
  • update_every
  • chunksize
  • passes
  • alpha
  • per_word_topics

我正在处理一个由大约500篇文章组成的语料库,每篇文章大概有3-5页(由于保密原因,我无法分享数据样本)。目前我已经设置为:

  • num_topics = 10
  • random_state = 100
  • update_every = 1
  • chunksize = 50
  • passes = 10
  • alpha = 'auto'
  • per_word_topics = True

但这仅仅是我在一个例子中看到的,并不确定是否适用于我的数据。

1个回答

21

我想知道你是否看过这个页面?

无论如何,让我为您解释一些内容。该方法需要大量数据的支持(在Wikipedia规模的数据源上进行训练效果更佳),因此您使用的文档数量较少,因此结果可能相对粗糙,您需要意识到这一点。这就是为什么您不应该追求大量主题(您选择了10个主题,在您的情况下可以合理地增加到20个)。

至于其他参数:

  • random_state - 这作为一个种子(以便重复训练过程)

  • chunksize - 每次考虑的文档数量(影响内存消耗)

  • update_every - 在每update_every chunksize块中更新模型(本质上,这是为了优化内存消耗)

  • passes - 算法应传递整个语料库的次数

  • alpha - 引用文档:

    可以设置为先前选择的明确数组=prior。它还支持“不对称”和“自动”这些特殊值:前者使用固定的归一化不对称1.0/topicno先验值,后者直接从您的数据中学习不对称先验值。

  • per_word_topics - 将其设置为True允许提取给定单词的最可能主题。训练过程已设置为每个单词都将分配给一个主题。否则,不具有指示性的单词将被省略。phi_value是另一个参数,可控制此过程 - 它是将单词视为具有指示性或非指示性的阈值。

最佳训练过程参数在M. Hoffman et al.,Online Learning for Latent Dirichlet Allocation中描述得非常好。

关于训练过程或模型的内存优化,请参考这篇博客文章


谢谢您的回复,非常有帮助!只是为了确保我理解正确,chunksize和update_every不应该影响LDA的输出或识别主题的能力,而是影响内存消耗?我只是想确保这两个是不同的事情。 - Jane Sully
1
过于稀少的更新会导致模型无法捕捉到数据的细微差别。如果您不远离默认值,数值结果应该是相似的(接近估计)。 - sophros
1
我想对“chunk_size”参数进行补充(至少对于多核版本),这可能会改变结果。请参考以下链接:https://groups.google.com/g/gensim/c/FE7_FYSconA 和 https://markroxor.github.io/gensim/static/notebooks/lda_training_tips.html - chAlexey
random_statepasses之间有什么区别? - Ali A. Jalil
随机状态是训练的“种子”,而“passes”则是对整个语料库的遍历次数。 - Inaam Ilahi
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接