我已经通过 Python API 在 Spark 中成功训练了 LDA 模型:
from pyspark.mllib.clustering import LDA
model=LDA.train(corpus,k=10)
这工作得很好,但我现在需要document-LDA模型的主题矩阵,但据我所知,我能得到的是word-主题,使用model.topicsMatrix()
.
是否有某种方法可以从 LDA 模型中获取文档主题矩阵,如果没有,Spark 中是否有替代方法(除了从头开始实现 LDA 之外)来运行 LDA 模型,从而为我提供所需的结果?
EDIT:
经过一番挖掘后,我找到了文档分布式LDA模型 https://spark.apache.org/docs/1.4.0/api/java/org/apache/spark/mllib/clustering/DistributedLDAModel.html在Java api中,有一个topicDistributions()
我认为这正是我所需要的(但我 100% 确定 Pyspark 中的 LDAModel 是否实际上是一个 DistributedLDAModel ...)。
无论如何,我都可以像这样间接调用此方法,而不会出现任何明显的失败:
In [127]: model.call('topicDistributions')
Out[127]: MapPartitionsRDD[3156] at mapPartitions at PythonMLLibAPI.scala:1480
但如果我真正查看结果,我得到的只是字符串,告诉我结果实际上是一个 Scala 元组(我认为):
In [128]: model.call('topicDistributions').take(5)
Out[128]:
[{u'__class__': u'scala.Tuple2'},
{u'__class__': u'scala.Tuple2'},
{u'__class__': u'scala.Tuple2'},
{u'__class__': u'scala.Tuple2'},
{u'__class__': u'scala.Tuple2'}]
也许这通常是正确的方法,但是有没有办法得到实际的结果呢?