だから、nlpで分類タスクに取り組むために、deeplearning4jというJava用の無料のディーププレイングライブラリを実装しようとしています。nlpモデルをdeeplearning4jでロードする際の問題
public static void Learn(String labelledDataFileName) throws Exception {
ParagraphVectors paragraphVectors = new ParagraphVectors();
InMemoryLookupCache cache = new InMemoryLookupCache();
LabelleDataIterator iterator = new LabelleDataIterator(new File(labelledDataFileName));
TokenizerFactory t = new DefaultTokenizerFactory();
t.setTokenPreProcessor(new CommonPreprocessor());
paragraphVectors = new ParagraphVectors.Builder()
.minWordFrequency(1)
.iterations(3)
.learningRate(0.025)
.minLearningRate(0.001)
.layerSize(400)
.batchSize(1000)
.epochs(1)
.iterate(iterator)
.trainWordVectors(true)
.vocabCache(cache)
.tokenizerFactory(t)
.build();
paragraphVectors.fit();
WordVectorSerializer.writeFullModel(paragraphVectors, MODEL_FILE_NAME);
}
ネットで提供されているサンプルとほとんど違いはありません。フィッティング後の訓練されたモデルは、writeFullModelメソッドを使用してテキストファイルに保存されます。次に、このメソッドをロードすることができます
WordVectorSerializer.loadFullModel(MODEL_FILE_NAME);
問題は、モデルが大きくなっても問題になりません。サイズ120Mbのモデルファイルについては、これを手に入れています。
Exception in thread "main" java.lang.IllegalArgumentException: Illegal slice 7151
at org.nd4j.linalg.api.ndarray.BaseNDArray.slice(BaseNDArray.java:2852)
at org.nd4j.linalg.api.ndarray.BaseNDArray.tensorAlongDimension(BaseNDArray.java:753)
at org.nd4j.linalg.api.ndarray.BaseNDArray.vectorAlongDimension(BaseNDArray.java:830)
at org.nd4j.linalg.api.ndarray.BaseNDArray.getRow(BaseNDArray.java:3628)
at org.deeplearning4j.models.embeddings.loader.WordVectorSerializer.loadFullModel(WordVectorSerializer.java:523)
小さなモデルファイルでうまくいきます。 ご協力いただきありがとうございます。
質問がある場合は、Gitterのコミュニティに自由に参加できます:https://gitter.im/deeplearning4j/deeplearning4j – tremstat