簡體   English   中英

使用拋出NullPointerException的word2vec函數將手套導入h2o

[英]Importing Glove to h2o with word2vec function throwing NullPointerException

我正在嘗試使用word2vec函數通過R將Glove導入h2o集群。 關於此問題H2O是否或將提供任何預訓練的矢量以便與word2vec一起使用? 我下載了經過預訓練的Gloves.840B.300d.txt文件,並嘗試將其導入到h2o中,但是解析存在問題。 然后,我將Glove閱讀為R,刪除了被識別為NA的一行並將其另存為csv。 有了csv文件,在h2o中的解析進行得很順利,但是我無法用它創建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)

感謝您的報告,當前的實現受到JVM數組最大長度的限制。 該模型似乎太大,超出了JVM的限制。

我們將不得不在H2O中修復它。

鑒於您超出了模型的最大數組大小,作為一種解決方法,您可以對其進行一些調整。 我假設在手套文件中按頻率對詞匯進行排序。 換句話說,我假設最常出現的單詞排在最前面,而最后的單詞通常是晦澀難懂的,不太有用。

例如,此代碼僅使用單詞的前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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM