Spark 1.4 Mllib LDA topicDistributions () возвращает неправильное количество документов

У меня есть модель LDA, работающая с размером корпуса из 12 054 документов с размером словаря 9 681 слово и 60 кластерами. Я пытаюсь получить распространение темы по документам, вызывая .topicDistributions () или .javaTopicDistributions (). Оба эти метода возвращают список распределений тем по документам. Насколько я понимаю, количество строк должно быть количеством документов, а количество столбцов должно быть количеством тем. Но когда я подсчитываю rdd после вызова topicDistributions (), я получаю 11 665 (меньше, чем количество документов, переданных модели)? Каждый документ имеет правильное количество тем (60). Почему это?

Вот демонстрация: http://spark.apache.org/docs/latest/mllib-clustering.html

и документация: https://spark.apache.org/docs/1.4.0/api/java/org/apache/spark/mllib/clustering/DistributedLDAModel.html

Вот код:

enter code here

//parse tf vectors from corpus

JavaRDD<Vector> parsedData = data.map(
    new Function<String, Vector>() {
        public Vector call(String s) {
            s = s.substring(1, s.length()-1);
            String[] sarray = s.trim().split(",");
            double[] values = new double[sarray.length];
            for (int i = 0; i < sarray.length; i++)
            {
                values[i] = Double.parseDouble(sarray[i]);
            }
            return Vectors.dense(values);
          }

);

System.out.println(parsedData.count()) //prints 12,054

// Index documents with unique IDs

JavaPairRDD<Long, Vector> corpus =  JavaPairRDD.fromJavaRDD(parsedData.zipWithIndex().map(
     new Function<Tuple2<Vector, Long>, Tuple2<Long, Vector>>() {
       public Tuple2<Long, Vector> call(Tuple2<Vector, Long> doc_id) {
         return doc_id.swap();
       }
     }
));

System.out.println(corpus.count()) //prints 12,054

LDA lda = new LDA()
LDAModel ldaModel = lda.setK(k.intValue()).run(corpus);

RDD<scala.Tuple2<Object,Vector>> topic_dist_over_docs = ((DistributedLDAModel) ldaModel).topicDistributions();
System.out.println(topic_dist_over_docs.count()) //prints 11,655 ???

JavaPairRDD<Long,Vector> topic_dist_over_docs2 = ((DistributedLDAModel) ldaModel).javaTopicDistributions();
System.out.println(topic_dist_over_docs2.count()) //also prints 11,655 ???

person smannan    schedule 14.08.2015    source источник


Ответы (1)


Похоже, в Spark 1.4 есть ошибка с topicDistributions. После обновления до экспериментальной версии Spark 1.5 мне удалось решить эту проблему.

person smannan    schedule 21.08.2015