【问题标题】:Understanding parameters in Gensim LDA Model了解 Gensim LDA 模型中的参数
【发布时间】:2018-11-21 03:59:03
【问题描述】:

我正在使用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

但这仅基于我看到的一个示例,我不确定这对我的数据有多大的概括性。

【问题讨论】:

    标签: python parameters gensim lda


    【解决方案1】:

    不知道你有没有看到this page

    不管怎样,让我为你解释一些事情。该方法使用的文档数量很少(在维基百科大小的数据源上训练时效果更好)。因此,结果将相当粗糙,您必须意识到这一点。这就是为什么您不应该针对大量主题(您选择了 10 个,在您的情况下可能明智地增加到 20 个)。

    至于其他参数:

    • random_state - 这用作种子(以防您想完全重复训练过程)

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

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

    • passes - 算法应该通过多少次整个语料库

    • alpha - 引用文档:

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

    • per_word_topics - 将此设置为True 允许提取给定单词的最可能的主题。训练过程以这样一种方式设置,即每个单词都将分配给一个主题。否则,将省略非指示性的词。 phi_value 是引导这个过程的另一个参数 - 它是一个词是否被视为指示性的阈值。

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

    有关训练过程或模型的内存优化,请参阅this blog post

    【讨论】:

    • 感谢您的回复——非常有帮助!只是为了确保我理解正确,chunksize 和 update_every 不应该影响 LDA 的输出或识别主题的能力,而是影响内存消耗?我只是想确保它们是两个不同的东西。
    • 如果更新过于稀少,模型可能无法充分捕捉数据的细微差别。如果您不偏离默认值太远,则数值上的结果应该是相似的(接近的近似值)。
    • 我没有发现 per_word_topic = True 和 per_word_topic = False 之间有太大区别。
    • @NiteshJindal - 就像机器学习中的几乎所有内容一样 - 这一切都取决于您的数据集。
    • 我很想加上可能会改变结果的“chunk_size”参数(至少对于多核版本)。看看这个groups.google.com/g/gensim/c/FE7_FYSconA 和这个markroxor.github.io/gensim/static/notebooks/…
    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2020-06-21
    • 2019-03-31
    相关资源
    最近更新 更多