Я бы хотел иметь возможность оценивать модели 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. У меня не было проблем с оценкой мохо для обучения под наблюдением.