我希望能够使用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的监督学习评分。