Ограничение количества итераций в Стэнфордском NER

Я тренирую модель Stanford 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

3 ответа

Краткий ответ: используйте tolerance (по умолчанию 1e-4). Есть еще один параметр maxIterations который игнорируется.

Я экспериментировал с обучением биомедицинской (BioNER) модели через Stanford CoreNLP CRF classifier на IOB-тэгированном, токенизированном тексте, как описано на https://nlp.stanford.edu/software/crf-faq.html.

Мой корпус - из загруженных источников - был очень большим (~1,5 миллиона строк; 6 функций: GENE; ...). Поскольку обучение, казалось, продолжалось бесконечно, я составил соотношение ценностей, чтобы получить представление о прогрессе:

график соотношения обучающих значений CRF на итерацию

Grepping исходный код Java, я обнаружил, что по умолчанию TOL (tolerance; используется, чтобы решить, когда прекратить тренировку) значение было 1E-6 (0,000001), указанное в .../CoreNLP/src/edu/stanford/nlp/optimization/QNMinimizer.java,

Глядя на этот сюжет, моя первоначальная тренировка никогда бы не закончилась [Этот сюжет также показывает, что установка большего TOL значение, например tolerance=0.05, приведет к преждевременному прекращению обучения, так как TOL значение срабатывает от "шума", который возникает в начале тренировки. Я подтвердил это tolerance=0.05 запись в моем .prop файл; тем не мение, TOL значения 0.01, 0.005 и т. д. были "ОК".]

Добавление "maxIterations=20"к файлу свойств, как описано @StanfordNLPHelp (в другом месте в этой теме), казалось, игнорируется, если я также не добавил и не изменил tolerance= значение, по моему bioner.prop файл свойств; например

tolerance=0.005
maxIterations=20    ## optional

в этом случае классификатор быстро обучил модель (bioner.ser.gz). [Когда я добавил maxIterations линия к моему .prop файл, без добавления tolerance линия, модель продолжала работать "вечно", как и раньше.]

Список параметров, которые могут быть включены в .prop файл можно найти здесь:

https://nlp.stanford.edu/nlp/javadoc/javanlp-3.5.0/edu/stanford/nlp/ie/NERFeatureFactory.html

Использование maxQNItr=21 в вашем файле проп. Это будет работать до 20 итераций. Получил помощь от ответа Дэвида

Добавлять maxIterations=20 в файл свойств.

Другие вопросы по тегам