我正在定制数据集上训练斯坦福NER CRF模型,但现在用于训练模型的迭代次数已经变为 333次迭代 - 即。而这个培训过程现在已经持续了好几个小时。 以下是终端中打印的信息 -
Iter 335 evals 400 <D> [M 1.000E0] 2.880E3 38054.87s |5.680E1| {6.652E-6} 4.488E-4 -
Iter 336 evals 401 <D> [M 1.000E0] 2.880E3 38153.66s |1.243E2| {1.456E-5} 4.415E-4 -
-
下面给出了正在使用的属性文件 - 有什么方法可以将迭代次数限制为20。
location of the training file
trainFile = TRAIN5000.tsv
#location where you would like to save (serialize to) your
#classifier; adding .gz at the end automatically gzips the file,
#making it faster and smaller
serializeTo = ner-model_TRAIN5000.ser.gz
#structure of your training file; this tells the classifier
#that the word is in column 0 and the correct answer is in
#column 1
map = word=0,answer=1
#these are the features we'd like to train with
#some are discussed below, the rest can be
#understood by looking at NERFeatureFactory
useClassFeature=true
useWord=true
useNGrams=true
#no ngrams will be included that do not contain either the
#beginning or end of the word
noMidNGrams=true
useDisjunctive=true
maxNGramLeng=6
usePrev=true
useNext=true
useSequences=true
usePrevSequences=true
maxLeft=1
#the next 4 deal with word shape features
useTypeSeqs=true
useTypeSeqs2=true
useTypeySequences=true
wordShape=chris2useLC
saveFeatureIndexToDisk = true
printFeatures=true
flag useObservedSequencesOnly=true
featureDiffThresh=0.05
答案 0 :(得分:1)
我尝试通过Stanford CoreNLP CRF classifier
在IOB标记的标记化文本上训练生物医学(BioNER)模型,如https://nlp.stanford.edu/software/crf-faq.html所述。
我的语料库 - 来自下载的资源 - 非常大(约1.5M行; 6个功能:GENE; ...)。由于培训似乎无限期地进行,我绘制了价值观的比例以了解进展情况:
Grepping Java源代码,我发现默认TOL
(tolerance
;用来决定何时终止训练会话)的值是1E-6(0.000001),在{{1 }}
看看那个情节,我原来的训练课程永远不会完成。 [该图还显示设置较大的.../CoreNLP/src/edu/stanford/nlp/optimization/QNMinimizer.java
值,例如TOL
会触发提前终止培训,因为tolerance=0.05
值会被&#34;噪音&#34;触发。这发生在培训课程开始时。我在TOL
文件中使用tolerance=0.05
条目确认了这一点;但是,.prop
,TOL
等的0.01
值是&#34;好的。&#34;]
添加&#34; 0.005
&#34;除非我在我的maxIterations=20
属性文件中添加并更改了tolerance=
值,否则@StanfordNLPHelp(此线程中的其他位置)所描述的属性文件似乎被忽略; e.g。
bioner.prop
在这种情况下,分类器快速训练模型(tolerance=0.005
maxIterations=20 ## optional
)。 [当我将bioner.ser.gz
行添加到我的maxIterations
文件时,未添加.prop
行,模型就一直在运行&#34;永远,&#34;和以前一样。]
可在此处找到可包含在tolerance
文件中的参数列表:
https://nlp.stanford.edu/nlp/javadoc/javanlp-3.5.0/edu/stanford/nlp/ie/NERFeatureFactory.html
答案 1 :(得分:0)
简短答案:使用tolerance
(默认为1e-4)。还有一个参数maxIterations
被忽略。
答案 2 :(得分:0)
在道具文件中使用maxQNItr=21
。它将最多运行20次迭代。从David's answer
答案 3 :(得分:-1)
将maxIterations=20
添加到属性文件中。