所以我正在尝试为 Java 实现名为 deeplearning4j 的免费深度学习库,以解决 nlp 中的分类任务。
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)
不过,它可以用一个小模型文件很好地加载。任何帮助将不胜感激,非常感谢。