我已经将一些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|
我已经 Build 了一条管道
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
和最后的val topicDistributionCol:Param [String]
有没有人这样做过?
1 回答
我可能错了,但看起来你只想
transform
: