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.
因此,也许您实际上在两种方式中都获得了相同的分布,但它已经被置换了。
我正在尝试训练一个主题模型来对一堆文档进行聚类和主题化。 我的训练代码如下所示,迭代次数默认设置为 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.
因此,也许您实际上在两种方式中都获得了相同的分布,但它已经被置换了。