我有兴趣使用Spark MLlib应用LDA主题建模 . 我已经检查了here中的代码和解释,但是我找不到如何使用模型然后在一个新的看不见的文档中找到主题分布 .
从Spark 1.5开始, DistributedLDAModel 尚未实现此功能 . 您需要做的是使用 toLocal 方法将模型转换为 LocalLDAModel ,然后调用 topicDistributions(documents: RDD[(Long, Vector]) 方法,其中 documents 是新的(即非训练外)文档,如下所示:
DistributedLDAModel
toLocal
LocalLDAModel
topicDistributions(documents: RDD[(Long, Vector])
documents
newDocuments: RDD[(Long, Vector)] = ... val topicDistributions = distLDA.toLocal.topicDistributions(newDocuments)
这将不如this paper建议的EM算法准确,但它会起作用 . 或者,您可以使用新的在线变分EM训练算法,该算法已经产生 LocalLDAModel . 除了更快之外,这种新算法也是优选的,因为它与用于拟合 DistributedLDAModels 的较旧的EM算法不同,是在文档的主题混合权重之前优化Dirichlet的参数(alpha) . 根据Wallach, et. al.,alphas的优化对于获得好的主题非常重要 .
DistributedLDAModels
1 回答
从Spark 1.5开始,
DistributedLDAModel
尚未实现此功能 . 您需要做的是使用toLocal
方法将模型转换为LocalLDAModel
,然后调用topicDistributions(documents: RDD[(Long, Vector])
方法,其中documents
是新的(即非训练外)文档,如下所示:这将不如this paper建议的EM算法准确,但它会起作用 . 或者,您可以使用新的在线变分EM训练算法,该算法已经产生
LocalLDAModel
. 除了更快之外,这种新算法也是优选的,因为它与用于拟合DistributedLDAModels
的较旧的EM算法不同,是在文档的主题混合权重之前优化Dirichlet的参数(alpha) . 根据Wallach, et. al.,alphas的优化对于获得好的主题非常重要 .