私はDynamicLMClassifier.createNGramProcess(categories,nGram)
を20GBを超える大きなデータセットに訓練しようとしています。私は現在トレーニングファイル全体をストリングとしてトレーニングメソッドに渡しています。明らかに私はAを得ていますjava.lang.OutOfMemoryError: Java heap space
lingpipeによるインクリメンタル言語モデルトレーニング
興味深いトレーニングをサポートするためにJVMヒープサイズを増やすことは可能かもしれませんが増分法を見つける。
トレーニング・コードは次のようになります
char[] csBuf = new char[numChars];
for (int i = 0; i < categories.length; ++i) {
String category = categories[i];
File trainingFile = new File(new File(dataDir,category),
category + ".txt");
FileInputStream fileIn
= new FileInputStream(trainingFile);
InputStreamReader reader
= new InputStreamReader(fileIn,Strings.UTF8);
reader.read(csBuf);
String text = new String(csBuf,0,numChars);
Classification c = new Classification(category);
Classified<CharSequence> classified
= new Classified<CharSequence>(text,c);
classifier.handle(classified);
reader.close();
}
理想的な解決策は、トレーニングセットのN個のサブセットのループで)(classifier.handleを供給することであろう。理論的には、モデルはMLEを計算するためにそれぞれのカウントでnグラムのタプルを覚えておく必要があるだけなので、これは可能であるべきだと思います。
なので、基本的に 'categoryifier.handle(類別)'を同じカテゴリでも別の文字列で呼び出すだけでいいですか? – gidim
各トレーニング項目に対して新しい 'classified'インスタンスを作成する必要があります。その後、それらをトレーナーに漸進的に供給することができ、ガベージコレクションが行われ、すべてがメモリに収まる必要はありません。 –