Я устанавливаю модель LDA в Spark mllib, используя OnlineLDAOptimizer. Требуется ~ 200 секунд, чтобы соответствовать 10 темам на 9M-документах (твиты).Почему сообщение о недоумении журнала модели LDA настолько медленное в Spark mllib?
val numTopics=10
val lda = new LDA()
.setOptimizer(new OnlineLDAOptimizer().setMiniBatchFraction(math.min(1.0, mbf)))
.setK(numTopics)
.setMaxIterations(2)
.setDocConcentration(-1) // use default symmetric document-topic prior
.setTopicConcentration(-1) // use default symmetric topic-word prior
val startTime = System.nanoTime()
val ldaModel = lda.run(countVectors)
/**
* Print results
*/
// Print training time
println(s"Finished training LDA model. Summary:")
println(s"Training time (sec)\t$elapsed")
println(s"==========")
numTopics: Int = 10
lda: org.apache.spark.mllib.clustering.LDA = [email protected]
startTime: Long = 11889875112618
ldaModel: org.apache.spark.mllib.clustering.LDAModel = [email protected]
Finished training LDA model. Summary:
Training time (sec) 202.640775542
Однако, когда я прошу журнала растерянность этой модели (похоже, мне нужно, чтобы бросить его обратно LocalLDAModel первым), это занимает очень много времени, чтобы оценить. Зачем? (Я пытаюсь получить лог-недоумение, поэтому я могу оптимизировать k, количество тем).
ldaModel.asInstanceOf[LocalLDAModel].logPerplexity(countVectors)
res95: Double = 7.006006572908673
Took 1212 seconds.