训练NER模型以避免内存错误

时间:2017-06-16 09:36:02

标签: stanford-nlp

我正在尝试使用stanford-nlp library训练NER模型。我有一个所需格式的文件,大小为6GB。配置文件:

usePrevSequences=true
useClassFeature=true
useTypeSeqs2=true
useSequences=true
wordShape=chris2useLC
useTypeySequences=true
useDisjunctive=true
noMidNGrams=true
serializeTo=ner-model50.ser.gz
maxNGramLeng=6
useNGrams=true
usePrev=true
useNext=true
maxLeft=1
trainFile=trainData
map=word=0,answer=1
useWord=true
useTypeSeqs=true

每个句子都按照文档中的建议用空行拆分。所以当我用mx25g

运行命令时
java -mx25g -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -prop config.prop

我收到了错误:

  

线程中的异常" main" java.lang.OutOfMemoryError:Java堆空间

从库的FAQ page建议在发生内存错误时将文件拆分为多个文件。

为此,您需要使用trainFileList选项而不是trainFile选项更改配置文件。现在我有多个文件,每个文件大约250MB。运行相同的命令时出现以下错误:

  

线程中的异常" main" java.lang.OutOfMemoryError:超出GC开销限制

所以似乎拆分文件没有帮助。你认为拆分甚至更小的文件会有帮助吗?或者无关紧要?有什么办法可以绕过这个问题吗?任何见解都很有用。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我也遇到了与您同样的问题,其中一位上司建议我使用 -Xmx (而不是 -mx )根据您的计算机RAM和交换大小指定最大堆大小。
您也可以减少不。如果使用IOB编码,则是实体类或mergeTag的数量,因为使用的空间会随着实体类的增加而呈指数增加。

  

java -Xmx ** g -cp stanford-ner.jar   edu.stanford.nlp.ie.crf.CRFClassifier -prop ner.prop

这对我有用。