【发布时间】:2016-03-30 00:15:44
【问题描述】:
我正在尝试在大于 20GB 的大型数据集上训练 DynamicLMClassifier.createNGramProcess(categories,nGram)。我目前正在将整个培训文件作为字符串提供给培训方法,出于显而易见的原因,我得到了java.lang.OutOfMemoryError: Java heap space
虽然可能增加 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 个子集的循环中提供分类器.handle()。从理论上讲,我认为这应该是可能的,因为模型只需要记住具有各自计数的 ngram 元组来计算 MLE。
【问题讨论】:
标签: java nlp language-model lingpipe