spark DistributedLDAModel 和 LocalLDAModel

spark DistributedLDAModel and LocalLDAModel

我正在尝试训练一个主题模型来对一堆文档进行聚类和主题化。 我的训练代码如下所示,迭代次数默认设置为 20。优化器将默认为 EM。

val ldaModel = new LDA().
            setK(500).setOptimizer("em").run(corpus)))

然后我在我的培训文档中选择了一个文档来检查它的主题,使用

val topicsA = ldaModel.topicDistributions.filter(x=>x._1 == 100)

其次,我找到了这个文档的单词 vec,并使用 LocalLDAModel 来预测它的主题。

val topicsB = ldaModel.toLocal.topicDistribution(wordsVec)

但是我得到了 topicsA 和 topicsB 的 2 个完全不同的主题分布..

我有点迷路了,有什么建议吗?

还有一件事,如何在 EM 和 Online 之间选择优化器?似乎如果您需要在训练模型后稍后添加更多小批量数据,在线是更好且节省内存的选择?

谢谢!

这里只是抛出一个猜测,但有没有可能toLocal没有保留主题id?在 DistributedLDAModel.topicsMatrix 它警告

No guarantees are given about the ordering of the topics.

因此,也许您实际上在两种方式中都获得了相同的分布,但它已经被置换了。