Spark中LDA模型的在线学习

9
有没有一种方法可以以在线学习的方式训练LDA模型,即加载先前训练的模型,并使用新文档进行更新?

4
Stack Overflow通常鼓励添加自己的代码以尝试解决问题,有时这比设置悬赏更有帮助。 - Vitalii Kotliarenko
2个回答

4
回答自己:目前还不可能。
事实上,Spark对于LDA模型训练有两种实现方式之一是OnlineLDAOptimizer。该方法是专门设计用来以mini-batch的方式增量更新模型的。

这个Optimizer实现了在线变分贝叶斯LDA算法,它在每次迭代中处理语料库的一个子集,并且自适应地更新词-主题分布。

原始的在线LDA论文:Hoffman, Blei and Bach, "Online Learning for Latent Dirichlet Allocation." NIPS, 2010

不幸的是,当前的mllib API不允许加载先前训练好的LDA模型,并将批处理添加到其中。
一些mllib模型支持一个initialModel作为增量更新的起点(参见KMeansGMM),但LDA目前不支持。我在JIRA上提交了一个问题:SPARK-20082。请点赞 ;-)
顺便说一下,还有一个流式LDA的JIRA:SPARK-8696

3
我不认为这样的事情存在。LDA是一种概率参数估计算法(这里有一个非常简化的过程解释 LDA explained),添加一个或几个文档将改变所有先前计算出的概率,因此必须重新计算模型。
我不知道你的用例是什么,但是如果你的模型在合理的时间内收敛,并且在每次重新计算时丢弃一些最旧的文档以加快估计速度,那么可以考虑通过批量更新来进行更新。

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