训练NER模型避免内存错误

Mpi*_*ris 5 stanford-nlp

我正在尝试使用stanford-nlp库训练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
Run Code Online (Sandbox Code Playgroud)

每个句子都按照文档中的建议用空行拆分.所以当我运行命令时mx25g:

java -mx25g -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -prop config.prop
Run Code Online (Sandbox Code Playgroud)

我收到了错误:

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

在库的FAQ页面中,建议在发生内存错误时将文件拆分为多个文件.

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

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

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

Sau*_*rma 0

我也面临着和你一样的问题,我的一位前辈建议我使用 -Xmx而不是-mx来根据你的机器 RAM 和交换大小指定最大堆大小。
您还可以减少编号。如果使用 IOB 编码,则使用实体类或 mergeTags,因为使用的空间随着实体类的增加呈指数增加。

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

这对我有用。