我希望运用Spark MLlib中的LDA主题建模技术。我已经查看了这里的代码和说明,但是我无法找到如何使用模型找出新未见过的文档的主题分布。
截至Spark 1.5版,DistributedLDAModel
并没有实现这个功能。您需要做的是使用toLocal
方法将模型转换为LocalLDAModel
,然后调用topicDistributions(documents: RDD[(Long, Vector)])
方法,其中documents
是新的(即非训练)文档,类似于以下内容:
newDocuments: RDD[(Long, Vector)] = ...
val topicDistributions = distLDA.toLocal.topicDistributions(newDocuments)
这个方法不如这篇文章中建议的EM算法准确,但是它可以工作。或者,你可以使用新的在线变分EM训练算法,它已经生成了LocalLDAModel
。除了更快之外,这种新算法还更可取,因为它优化文档主题混合权重的狄利克雷先验参数(alpha),而不像旧的EM算法用于拟合DistributedLDAModels
时,只优化其他参数。根据Wallach等人的说法,优化alphas对于获得好的主题非常重要。