Я загрузил в Spark 2.2 ряд новостных статей Reuter (1986) и хочу изучить некоторые темы с помощью 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
и последний val topicDistributionCol: Param [String]
Кто-нибудь это сделал?