Проблема с оценкой H2O word2vec mojo в R - PullRequest
0 голосов
/ 04 июля 2019

Я бы хотел иметь возможность оценивать модели word2vec с помощью файлов mojo. Я могу создавать модели и сохранять их как моджо без проблем. Проблема возникает, когда я пытаюсь оценить модель Mojo. У меня не было проблем с использованием mojo для контролируемой оценки модели обучения.

Я установил один и тот же процесс построения модели с моджо и без. Без моджо у меня нет проблем с оценкой модели word2vec. С mojo я сталкиваюсь с ошибками, даже после того, как текстовый вектор настроен точно так, как это делается в исходном коде H2O. Пример набора данных ниже.

Данные, которые я использую для оценки mojo, основанные на коде с этой веб-страницы: https://github.com/h2oai/h2o-3/blob/43f8ab952a69a8bc9484bd0ffac909b6e3e820ca/h2o-r/tests/testdir_misc/runit_string_manipulations.R

Features <- data.frame(C1 = c("this","is","a","sentence",NA,
                              "so","is","this",NA,
                              "so","why","wont","it","score", NA), stringsAsFactors = FALSE)

Войдя в функцию h2o.mojo_predict_csv() Я обнаружил ошибку в этой строке кода:

res <- system(cmd_str)

С полученной ошибкой:

java.lang.Exception: Unknown model category WordEmbedding
    at hex.genmodel.tools.PredictCsv.run(PredictCsv.java:196)
    at hex.genmodel.tools.PredictCsv.main(PredictCsv.java:47)
Error in h2o::h2o.mojo_predict_csv(input_csv_path = file.path(getwd(),  : 
  SYSTEM COMMAND FAILED (exit status 2)

с cmd_str:

> cmd_str
[1] "java -Xmx1g -XX:ReservedCodeCacheSize=256m -cp C:/Users/aantico/Desktop/Work/H20/RemixAutoML/combined hex.genmodel.tools.PredictCsv --mojo C:\\Users\\aantico\\Desktop\\Work\\H20\\RemixAutoML\\Combined.zip --input C:/Users/aantico/Desktop/Work/H20/RemixAutoML/Features.csv --output C:/Users/aantico/Desktop/Work/H20/RemixAutoML/prediction.csv --decimal"

Я использовал следующий код:

input_csv_path = file.path(getwd(), 'Features.csv')
mojo_zip_path = "C:/Users/aantico/Desktop/Work/H20/RemixAutoML/Combined.zip"
output_csv_path = NULL
genmodel_jar_path = "C:/Users/aantico/Desktop/Work/H20/RemixAutoML/combined"
classpath = NULL
java_options = '-Xmx1g -XX:ReservedCodeCacheSize=256m'
verbose = FALSE

default_java_options <- "-Xmx4g -XX:ReservedCodeCacheSize=256m"
  prediction_output_file <- "prediction.csv"
  if (verbose) {
    cat(sprintf("input_csv:\t%s", input_csv_path), "\n")
  }
  if (!file.exists(input_csv_path)) {
    stop(cat(sprintf("Input csv cannot be found at %s", input_csv_path), 
             "\n"))
  }
  mojo_zip_path <- normalizePath(mojo_zip_path)
  if (verbose) {
    cat(sprintf("mojo_zip:\t%s", mojo_zip_path), "\n")
  }
  if (!file.exists((mojo_zip_path))) {
    stop(cat(sprintf("MOJO zip cannot be found at %s", mojo_zip_path), 
             "\n"))
  }
  parent_dir <- dirname(mojo_zip_path)
  if (is.null(output_csv_path)) {
    output_csv_path <- file.path(parent_dir, prediction_output_file)
  }
  if (is.null(genmodel_jar_path)) {
    genmodel_jar_path <- file.path(parent_dir, "h2o-genmodel.jar")
  }
  if (verbose) {
    cat(sprintf("genmodel_jar:\t%s", genmodel_jar_path), 
        "\n")
  }
  if (!file.exists(genmodel_jar_path)) {
    stop(cat(sprintf("Genmodel jar cannot be found at %s", 
                     genmodel_jar_path), "\n"))
  }
  if (verbose && !is.null(output_csv_path)) {
    cat(sprintf("output_csv:\t%s", output_csv_path), "\n")
  }
  if (is.null(classpath)) {
    classpath <- genmodel_jar_path
  }
  if (verbose) {
    cat(sprintf("classpath:\t%s", classpath), "\n")
  }
  if (is.null(java_options)) {
    java_options <- default_java_options
  }
  if (verbose) {
    cat(sprintf("java_options:\t%s", java_options), "\n")
  }
  cmd <- c("java")
  java_options_list <- strsplit(java_options, " ")
  for (i in 1:length(java_options_list)) {
    cmd <- c(cmd, java_options_list[[i]])
  }
  cmd <- c(cmd, "-cp", classpath, "hex.genmodel.tools.PredictCsv", 
           "--mojo", mojo_zip_path, "--input", input_csv_path, "--output", 
           output_csv_path, "--decimal")
  cmd_str <- paste(cmd, collapse = " ")
  if (verbose) {
    cat(sprintf("java cmd:\t%s", cmd_str), "\n")
  }

  # THIS IS WHERE THE ERROR OCCURS WITH NO ISSUE ON THE CODE ABOVE

  res <- system(cmd_str)
  if (res != 0) {
    msg <- sprintf("SYSTEM COMMAND FAILED (exit status %d)", 
                   res)
    stop(msg)
  }
  result <- read.csv(output_csv_path)

С такой же точной настройкой и использованием стандартного способа оценки моделей H2O (не mojo и pojo) я могу оценивать модели без проблем. Я хотел бы использовать оценку Mojo, потому что это быстрее, чем раскрутка экземпляра H2O. У меня не было проблем с оценкой мохо для обучения под наблюдением.

...