Я подгоняю модель LDA в Spark mllib, используя OnlineLDAOptimizer. Требуется всего ~ 200 секунд, чтобы разместить 10 тем в 9 миллионах документов (твитов).
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 = org.apache.spark.mllib.clustering.LDA@72678a91
startTime: Long = 11889875112618
ldaModel: org.apache.spark.mllib.clustering.LDAModel = org.apache.spark.mllib.clustering.LocalLDAModel@351e2b4c
Finished training LDA model. Summary:
Training time (sec) 202.640775542
Однако, когда я запрашиваю журнал недоумения этой модели (похоже, мне нужно сначала привести его обратно к LocalLDAModel), для оценки требуется очень много времени. Почему? (Я пытаюсь избавиться от недоумения в журнале, чтобы оптимизировать k, количество тем).
ldaModel.asInstanceOf[LocalLDAModel].logPerplexity(countVectors)
res95: Double = 7.006006572908673
Took 1212 seconds.