Сопоставление темы с документами в Spark LDA

Я загрузил в 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]

Кто-нибудь это сделал?


person Eoin Lane    schedule 24.07.2017    source источник
comment
Встречаю тот же вопрос. Следующий ответ не работает. Вы получили решение?   -  person Muz    schedule 15.10.2018


Ответы (1)


Я могу ошибаться, но похоже, что вы просто хотите transform:

ldaModel.transform(corpus)
person user8357511    schedule 24.07.2017
comment
Ваше решение работало, как указано здесь: spark .apache.org / docs / 2.1.0 /, спасибо! - person Hossein Sarshar; 29.05.2018