我已经成功地通过Python API在Spark中训练了一个LDA模型:
from pyspark.mllib.clustering import LDA
model=LDA.train(corpus,k=10)
这段代码本身是完全正常工作的,但我现在需要LDA模型的文档-主题矩阵,但据我所知,我只能使用model.topicsMatrix()
获得单词-主题矩阵。
是否有一些方法可以从LDA模型中获取文档-主题矩阵?如果没有,除了从头开始实现LDA之外,在Spark中是否有其他替代方法可以运行LDA模型并给出我所需的结果?
编辑:
经过一番探索,我在Java api的DistributedLDAModel文档中找到了topicDistributions()
,我认为这正是我需要的(但我不确定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'}]
也许这通常是正确的方法,但是否有获取实际结果的方法?
topicDistributions
函数。 - Quentin Le Sceller