【发布时间】:2017-07-29 11:06:09
【问题描述】:
有没有办法以在线学习的方式训练 LDA 模型,即。加载以前的训练模型,并用新文档更新它?
【问题讨论】:
-
stackoverflow 通常鼓励添加一些您自己的代码来尝试解决问题。有时它比赏金更有帮助。
标签: apache-spark machine-learning apache-spark-mllib lda apache-spark-ml
有没有办法以在线学习的方式训练 LDA 模型,即。加载以前的训练模型,并用新文档更新它?
【问题讨论】:
标签: apache-spark machine-learning apache-spark-mllib lda apache-spark-ml
回答我自己:目前不可能。
其实Spark有2个LDA模型训练的实现,一个是OnlineLDAOptimizer。这种方法专门设计用于使用小批量文档增量更新模型。
优化器实现了在线变分贝叶斯 LDA 算法,该算法在每次迭代时处理语料库的一个子集,并自适应地更新术语-主题分布。
原始在线 LDA 论文:Hoffman, Blei and Bach, "Online Learning for Latent Dirichlet Allocation." NIPS, 2010。
很遗憾,当前的 mllib API 不允许加载先前训练的 LDA 模型,并为其添加批处理。
一些 mllib 模型支持 initialModel 作为增量更新的起点(请参阅 KMeans 或 GMM),但 LDA 目前不支持。我为它填写了一个 JIRA:SPARK-20082。请点赞 ;-)
为了记录,还有一个用于流式 LDA 的 JIRA SPARK-8696
【讨论】:
我不认为这样的事情会存在。 LDA 是概率参数估计算法(此处是对过程的非常简化的解释LDA explained),添加一个或几个文档会改变所有先前计算的概率,因此从字面上重新计算模型。
我不了解您的用例,但如果您的模型在合理的时间内收敛并在每次重新计算时丢弃一些最旧的文档以加快估计速度,您可以考虑批量更新。
【讨论】: