在R

时间:2019-07-04 20:03:14

标签: r word2vec mojo

我希望能够使用mojo文件对word2vec模型进行评分。我可以构建模型并将其另存为mojo,而不会出现问题。当我尝试对mojo模型评分时,问题就来了。使用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实例更快。我没有为Mojo的监督学习评分。

0 个答案:

没有答案