【问题标题】:Spark MLlib LDA, how to infer the topics distribution of a new unseen document?Spark MLlib LDA,如何推断新文档的主题分布?
【发布时间】:2017-02-02 08:01:28
【问题描述】:

我对使用 Spark MLlib 应用 LDA 主题建模很感兴趣。我已经检查了here 中的代码和解释,但我找不到如何使用模型然后在一个新的看不见的文档中找到主题分布。

【问题讨论】:

    标签: apache-spark lda apache-spark-mllib topic-modeling


    【解决方案1】:

    从 Spark 1.5 开始,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 的优化对于获得好的主题非常重要。

    【讨论】:

    • 谢谢。答案非常有用!如果可能,您能否详细说明如何将 topicDistributions 的输出提取到更具代表性的结果?
    • 我已经实现了这个并展示了如何打印 topicDistributions here
    • 1.6 有什么变化吗?
    • distLDA.toLocal.XXX 是否适用于 python,或者只是 scala?是只有 topicDistributions 有效还是所有其他功能也有效?
    • @alex9311 尽管您的代码可能证明我错了,但 apache docs v 2.1.0 实际上说 localLDAModel 中缺少 topicDistribution,这使您的代码非常有趣!我无法解释。 “本地 LDA 模型。此模型仅存储推断的主题。”和“分布式 LDA 模型。该模型存储推断的主题、完整的训练数据集和主题分布。”
    猜你喜欢
    • 2016-09-03
    • 2016-02-03
    • 1970-01-01
    • 2014-07-02
    • 2017-12-29
    • 2015-11-08
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多