【发布时间】:2017-01-31 06:43:19
【问题描述】:
我尝试使用 conll 2012 试验数据 (http://conll.cemantix.org/2012/data.html) 训练统计共指解析系统。 我想训练它来获取医学数据。但我从 conll 2012 试验数据开始,以了解统计共指管道。 我只拿了两个小于 2MB 的“.conll”文件(eng_0012.conll,eng_0014.conll)。这两个文件共包含 8 个培训文档。
我按照以下链接构建模型。
http://stanfordnlp.github.io/CoreNLP/coref.html
(java -Xmx60g -cp stanford-corenlp-3.7.0.jar:stanford-english-corenlp-models-3.7.0.jar:* edu.stanford.nlp.coref.statistical.StatisticalCorefTrainer -props)
这里提到的堆大小为 60g。我使用了 60g 堆大小和 15g 交换内存和 16 核处理器。
但是我在构建模型时遇到了“java.lang.OutOfMemoryError: Java heap space”异常。
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:261)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
at java.util.ArrayList.add(ArrayList.java:458)
at edu.stanford.nlp.coref.statistical.Clusterer.getFeatures(Clusterer.java:661)
at edu.stanford.nlp.coref.statistical.Clusterer.access$700(Clusterer.java:27)
at edu.stanford.nlp.coref.statistical.Clusterer$State.getActions(Clusterer.java:460)
at edu.stanford.nlp.coref.statistical.Clusterer.runPolicy(Clusterer.java:225)
at edu.stanford.nlp.coref.statistical.Clusterer.doTraining(Clusterer.java:167)
at edu.stanford.nlp.coref.statistical.StatisticalCorefTrainer.doTraining(StatisticalCorefTrainer.java:127)
at edu.stanford.nlp.coref.statistical.StatisticalCorefTrainer.main(StatisticalCorefTrainer.java:146)
当我在“edu/stanford/nlp/coref/statistical/Clusterer.java”类的“doTraining”方法中将培训文档从 8 个减少到 4 个时,它运行成功。
int count = 1;
for (ClustererDoc trainDoc : trainDocs) {
if (count == 5) {
break;
}
count++;
examples.add(runPolicy(trainDoc, Math.pow(EXPERT_DECAY(iteration +1))));
}
我不明白为什么即使在为非常少量的数据(小于 2 MB)进行了所需的配置后,我仍然会出现内存不足异常
有没有办法优化内存使用?
当我浏览源代码时,我发现了一些文件,如 demoyms.txt、gender.data.gz、inanimate.unigrams.txt、state-abbrevations.txt 等。 我是否需要创建任何指定医疗实体的文件来训练医疗领域以获得更好的准确性?
【问题讨论】:
标签: java nlp stanford-nlp