将主题映射回Spark LDA中的文档

时间:2017-07-24 11:27:20

标签: scala apache-spark machine-learning lda

我已将一些Reuter新闻线文章(1986)加载到Spark 2.2中,并希望使用LDA进行一些主题学习

+--------------------+--------------------+----+
|               title|                body|  id|
+--------------------+--------------------+----+
|FED SAYS IT SETS ...|                    |5434|
|MIM TO ACQUIRE ST...|Mount Isa Mines H...|5435|
|MAGNA <MAGAF> CRE...|Magna Internation...|5436|
|J.W. MAYS INC <MA...|Shr 2.27 dlrs vs ...|5437|

我已经设置了一个管道

val pipeline = new Pipeline().setStages(Array(tokenizer, stopWordsRemover, vectorizer, lda))

运行模型

val pipelineModel = pipeline.fit(corpus)

我可以使用

访问LDA(EM)模型
val ldaModel = pipelineModel.stages(3).asInstanceOf[DistributedLDAModel]

我可以使用

查看主题
ldaModel.describeTopics(maxTermsPerTopic = 5).show()

经过一些DF操作后,它给出了主题及其相关的术语和概率

+-------+----------+--------------------+
|topicId|      term|         probability|
+-------+----------+--------------------+
|      0|   company| 0.08715003585328869|
|      0|      corp| 0.03355461912220357|
|      0|     group|0.024083945559541863|
|      0|      unit|0.016712655949244752|
|      0|     stake| 0.01314416068270042|
|      1|      dlrs|   0.072961342546073|
|      1|      debt| 0.02826491264713813|
...

我想将主题分发映射回原始文档。回到Spark 1.6来获取上面文档的主题分布(id = 5435),我会做以下事情。但是不再支持topicDistributions。

 ldaModel.topicDistributions.filter(_._1 == 5435).collect

(Spark ML LDA API)确实列出了两种新方法,但我不清楚如何使用它们

 final val topicConcentration: DoubleParam

和      final val topicDistributionCol:Param [String]

有没有人这样做过?

1 个答案:

答案 0 :(得分:1)

我可能错了,但看起来你只想transform

ldaModel.transform(corpus)