木槌超参数优化

时间:2018-08-30 14:22:33

标签: mallet

在槌中训练主题模型时,可以通过--optimize-interval [INTEGER]函数在推理过程中学习超参数。关于此功能,我有以下问题:

  1. 学习了哪些参数?是同时学习alpha和beta还是仅学习其中的一种,如果可以,则学习其中的一种?

  2. -use-symmetric-alpha函数的基本原理是什么?槌中的帮助说:“ ...仅优化优先于文档-主题分布的浓度参数...”。但是,文档主题分发的先验是alpha,不是吗?因此,该命令应命名为-use-symmetric-beta,以提供帮助。还是仅在帮助文本中有错误?此外,据我了解的文献(例如,参见Wallach等人(2009):重新思考LDA:为什么要考虑优先事项),不对称先验仅对文档主题分布有利,对主题词分布没有任何好处。 Alpha是文档主题分发的狄利克雷特先验。在此之后,我不了解-use-symmetric-alpha函数的含义。

  3. 槌槌中是否有可能仅学习文档主题分布的先验?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我也为这个参数和误导性的帮助文本而苦恼。 因此,我只是对其进行了测试,比较了不同的日志输出,并最终搜索了源代码,这使我对您的问题有以下答案:

学习哪些参数?是同时学习alpha和beta还是仅学习其中的一种?如果是,那么学习哪一种呢?

这取决于。使用default settings时,由于--optimize-interval为0,因此无法学习任何参数。这意味着alpha(⚠️实际上是所有alpha先验的总和)保持不变,即alpha_k = 5.0 / num-topics。 Beta默认为0.01。 结果,alpha和beta都是对称的Dirichlet先验。 (尽管正确记录了alpha参数,但是当您习惯于gensim在其中指定alpha而不是alphaSum时,它仍然会引起误解。)

如果您为参数--optimize-interval提供的值大于0(并注意--num-iterations(默认值:1000)和--optimize-burn-in(默认值:200)) ,您可以同时为Alpha和Beta启用超参数优化。 结果,alpha和beta都是从数据中学到的优化的Dirichlet先验。 但是,将alpha理解为不对称先验,而beta始终是对称先验(即使已优化)。

如果您还设置了--use-symmetric-alpha True,则只会优化beta先验条件。 您最终得到对称的alpha先验(通过参数--alpha传递)和 a 对称的β先验,它们是根据通过--beta传递的初始对称先验从数据中学到的。

--use-symmetric-alpha函数背后的原理是什么?

说实话,我不知道。我只观察到上述行为。 我错误地认为,如果设置了--optimize-interval,则将为beta学习非对称先验。 here并非如此。

槌槌中的帮助说:“ ...仅优化浓度 优先于文档主题分布的参数...”。但是 文档主题分发的优先级是alpha,不是吗?

您是对的。 Alpha是文档主题分布的先验,主题词分布的beta是先验。

因此,应在帮助后将命令命名为--use-symmetric-beta。还是帮助文本中只有一个错误?

实际上,它是帮助文本中的mistake。 不存在不存在的选项--use-symmetric-beta,因为 beta总是对称的

据我了解的文献(例如,参见Wallach等人(2009):重新思考LDA:为什么要优先考虑)不对称先验仅对文档主题分布有利,而对主题词没有任何好处分配。 Alpha是文档主题分发的Dirichlet先驱。在此之后,我不了解--use-symmetric-alpha函数的含义。

我完全同意你的看法。根据我的有限理解,参数--use-symmetric-beta会更有意义。 Wallach et al.指出,主题词分布上的不对称先验不能带来任何实际好处。 这就是Mallet仅使用对称beta先验的原因。 不过,如果--optimize-interval大于0,则Beta Dirichlet优先级将进一步optimizedWallach et al.回答了一个问题,为什么您应该使用非对称的先验优先于对称的先验。

此外,帮助文本还解释了使用--use-symmetric-alpha的后果,如下所示:

这可能会减少很小的,估计不好的主题,但可能会使常见的单词分散在多个主题上。

经验教训: 您不能(始终)信任帮助文本。但这会使他们一文不值吗? 绝对不是,但是如果您在理解文档时遇到困难,请搜索代码。 源代码永远不会说谎。