我正在尝试使用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开销限制
所以似乎拆分文件没有帮助。你认为拆分甚至更小的文件会有帮助吗?或者无关紧要?有什么办法可以绕过这个问题吗?任何见解都很有用。提前谢谢。
答案 0 :(得分:0)
我也遇到了与您同样的问题,其中一位上司建议我使用
-Xmx (而不是 -mx )根据您的计算机RAM和交换大小指定最大堆大小。
您也可以减少不。如果使用IOB编码,则是实体类或mergeTag的数量,因为使用的空间会随着实体类的增加而呈指数增加。
java -Xmx ** g -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -prop ner.prop
这对我有用。