在槌中训练主题模型时,可以通过--optimize-interval [INTEGER]
函数在推理过程中学习超参数。关于此功能,我有以下问题:
学习了哪些参数?是同时学习alpha和beta还是仅学习其中的一种,如果可以,则学习其中的一种?
-use-symmetric-alpha
函数的基本原理是什么?槌中的帮助说:“ ...仅优化优先于文档-主题分布的浓度参数...”。但是,文档主题分发的先验是alpha,不是吗?因此,该命令应命名为-use-symmetric-beta
,以提供帮助。还是仅在帮助文本中有错误?此外,据我了解的文献(例如,参见Wallach等人(2009):重新思考LDA:为什么要考虑优先事项),不对称先验仅对文档主题分布有利,对主题词分布没有任何好处。 Alpha是文档主题分发的狄利克雷特先验。在此之后,我不了解-use-symmetric-alpha
函数的含义。
槌槌中是否有可能仅学习文档主题分布的先验?
感谢您的帮助。
答案 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
函数的含义。
我完全同意你的看法。根据我的有限理解,参数
Wallach et al.指出,主题词分布上的不对称先验不能带来任何实际好处。
这就是Mallet仅使用对称beta先验的原因。
不过,如果--use-symmetric-beta
会更有意义。--optimize-interval
大于0,则Beta Dirichlet优先级将进一步optimized。
Wallach et al.回答了一个问题,为什么您应该使用非对称的先验优先于对称的先验。
此外,帮助文本还解释了使用--use-symmetric-alpha
的后果,如下所示:
这可能会减少很小的,估计不好的主题,但可能会使常见的单词分散在多个主题上。
经验教训: 您不能(始终)信任帮助文本。但这会使他们一文不值吗? 绝对不是,但是如果您在理解文档时遇到困难,请搜索代码。 源代码永远不会说谎。