Я успешно подготовил модель LDA в иске, используя API Python:
from pyspark.mllib.clustering import LDA
model=LDA.train(corpus,k=10)
Это работает отлично, но теперь мне нужна матрица документа-темы для модели LDA, но насколько я могу сказать, все, что я могу получить, это слово-тема, используя model.topicsMatrix()
.
Есть ли способ получить матрицу типа документа из модели LDA, а если нет, есть ли альтернативный метод (кроме реализации LDA с нуля) в Spark для запуска модели LDA, которая даст мне результат я нужно?
EDIT:
После небольшого поиска я нашел документацию для DistributedLDAModel в Java api, у которой есть topicDistributions()
, который, я думаю, является именно тем, что мне нужно здесь (но я на 100% уверен, что LDAModel в Pyspark на самом деле является 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'}]
Возможно, это, как правило, правильный подход, но есть ли способ получить фактические результаты?