【问题标题】:Importing Glove to h2o with word2vec function throwing NullPointerException使用抛出 NullPointerException 的 word2vec 函数将 Glove 导入 h2o
【发布时间】:2017-10-12 22:48:02
【问题描述】:

我正在尝试使用 word2vec 函数通过 R 将 Glove 导入 h2o 集群。 关于这个Does or will H2O provide any pretrained vectors for use with h2o word2vec? 我下载了预训练的 glove.840B.300d.txt 文件并尝试将其导入到 h2o 但解析出现问题。 然后我将 Glove 读到 R,删除了被识别为 NA 的一行并将其保存为 csv。在 h2o 中解析 csv 文件进展顺利,但我无法用它创建 word2vec 模型,因此它抛出了java.lang.NullPointerException

我有h2o_3.15.0.99999 版本。

我的代码:

h2o.init()
glove<-h2o.importFile("glove.840B.300d.csv",header = F)
model<-h2o.word2vec(pre_trained = glove,vec_size = 300)

完整输出:

|==========================================================================| 100%

java.lang.NullPointerException
java.lang.NullPointerException
at water.AutoBuffer.tcpOpen(AutoBuffer.java:488)
at water.AutoBuffer.sendPartial(AutoBuffer.java:679)
at water.AutoBuffer.putA4f(AutoBuffer.java:1383)
at hex.word2vec.Word2VecModel$Word2VecOutput$Icer.write90(Word2VecModel$Word2VecOutput$Icer.java)
at hex.word2vec.Word2VecModel$Word2VecOutput$Icer.write(Word2VecModel$Word2VecOutput$Icer.java)
at water.Iced.write(Iced.java:61)
at water.AutoBuffer.put(AutoBuffer.java:771)
at hex.Model$Icer.write86(Model$Icer.java)
at hex.word2vec.Word2VecModel$Icer.write85(Word2VecModel$Icer.java)
at hex.word2vec.Word2VecModel$Icer.write(Word2VecModel$Icer.java)
at water.Iced.write(Iced.java:61)
at water.Iced.asBytes(Iced.java:42)
at water.Value.<init>(Value.java:348)
at water.TAtomic.atomic(TAtomic.java:22)
at water.Atomic.compute2(Atomic.java:56)
at water.Atomic.fork(Atomic.java:39)
at water.Atomic.invoke(Atomic.java:31)
at water.Lockable.unlock(Lockable.java:181)
at water.Lockable.unlock(Lockable.java:176)
at hex.word2vec.Word2Vec$Word2VecDriver.computeImpl(Word2Vec.java:72)
at hex.ModelBuilder$Driver.compute2(ModelBuilder.java:205)
at water.H2O$H2OCountedCompleter.compute(H2O.java:1263)
at jsr166y.CountedCompleter.exec(CountedCompleter.java:468)
at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263)
at jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
at jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1477)
at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)

【问题讨论】:

    标签: r word2vec h2o


    【解决方案1】:

    感谢报告,目前的实现受限于 JVM 的数组最大长度。这个模型似乎太大了,超出了 JVM 的限制。

    我们将不得不在 H2O 中修复它。

    【讨论】:

    • 谢谢! Google word2vec 预训练模型以二进制文件的形式提供,您是否也有处理此类文件的计划?
    • 这当然是可能的,但我们没有此功能的任何时间表。如果您可以在我们的 jira 中记录功能请求,那就太好了:jira.h2o.ai
    【解决方案2】:

    鉴于您超出了模型的最大数组大小,作为一种解决方法,您可以将其修剪一下。我假设在手套文件中词汇是按频率排序的。换句话说,我假设最常用的词排在最前面,而最后的词通常晦涩难懂且用处不大。

    例如此代码将只使用前 50% 的单词。

    h2o.init()
    glove <- h2o.importFile("glove.840B.300d.csv",header = F)
    parts <- h2o.split(glove, [0.5])
    modelCommon <- h2o.word2vec(pre_trained = parts[[1]],vec_size = 300)
    

    根据您接下来要做什么,您可以为后半部分数据制作第二个模型:

    modelObscure <- h2o.word2vec(pre_trained = parts[[2]],vec_size = 300)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-11
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      相关资源
      最近更新 更多