【问题标题】:Spark's OnlineLDAOptimizer causing IndexOutOfBoundsException in JavaSpark 的 OnlineLDAOptimizer 在 Java 中导致 IndexOutOfBoundsException
【发布时间】:2017-11-19 01:04:43
【问题描述】:

我在 Java 版本的 Spark 中使用潜在狄利克雷分配。

以下行可以正常工作:

LDAModel ldaModel = new LDA()//
                        .setK( NUM_TOPICS )//
                        .setMaxIterations( MAX_ITERATIONS )//
                        .run( corpus );

这使用(我相信)默认的 EM 优化器。

但是,当我尝试使用随机变分优化器时,如下:

OnlineLDAOptimizer optimizer = new OnlineLDAOptimizer()//
                                   .setMiniBatchFraction( 2.0 / MAX_ITERATIONS );
LDAModel ldaModel = new LDA()//
                    .setK( NUM_TOPICS )//
                    .setOptimizer( optimizer )//
                    .setMaxIterations( MAX_ITERATIONS )//
                    .run( corpus );

我得到以下信息:

org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 11.0 failed 1 times, most recent failure: Lost task 1.0 in stage 11.0 (TID 50, localhost): java.lang.IndexOutOfBoundsException: (0,2) not in [-3,3) x [-2,2)
at breeze.linalg.DenseMatrix.apply(DenseMatrix.scala:84)
at breeze.linalg.Matrix$class.apply(Matrix.scala:39)
...

有没有人成功地让在线优化器在 Java 版本的 Spark 中工作?据我所知,这是这里唯一的区别。

【问题讨论】:

    标签: java apache-spark apache-spark-mllib


    【解决方案1】:

    我遇到了类似的问题,结果证明我在为语料库创建 SparseVectors 时犯了一个错误。

    我没有提供所有项的数量作为第一个参数,而是提供了索引和值数组的长度。

    这导致IndexOutOfBoundException

    Vectors.sparse(indices.length, indices, values);

    虽然这对我有用

    Vectors.sparse(numberOfTermsInCorpus, indices, values);

    该异常仅在使用OnlineLDAOptimizer 时发生。使用标准 EM 优化器时,我的错误并未影响模型的创建。

    【讨论】:

    • 只是一个注释,这并不是一个真正的错误。这是设计使然
    • 绝对@Jake,你是对的。我修改了措辞。
    【解决方案2】:

    我想,问题出在

    .setMiniBatchFraction( 2.0 / MAX_ITERATIONS );
    

    你试过了吗

    .setMiniBatchFraction(math.min(1.0, mbf)))
    

    与mbf是

        val mbf = {
      // add (1.0 / actualCorpusSize) to MiniBatchFraction be more robust on tiny datasets.
      val corpusSize = corpus.count()
      2.0 / maxIterations + 1.0 / corpusSize
    }
    

    【讨论】:

    • 这并不能解决问题。此更改旨在解决什么问题(以防我遗漏了什么?)。另请注意,这与 Spark 的 Java 版本有关,而不是 Scala 版本。
    猜你喜欢
    • 2019-10-23
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 2013-08-04
    • 2015-11-28
    相关资源
    最近更新 更多