Обучение классификатора Stanford NER возвращает «Убито» в терминале, в чем причина и как ее решить?

Для моей диссертации моя цель - сравнить различные модели NER. В настоящее время я хотел бы начать со Стэнфордского NER из-за его популярности. Набор данных, с которым я работаю, содержит ~ 16 тыс. размеченных документов (4 класса). Из этих 16 000 документов я хотел бы использовать 13 000 в своем обучающем наборе. В сумме эти 13 тысяч документов составляют 144 МБ. Я пытаюсь решить эту проблему локально, мой компьютер содержит 32 ГБ оперативной памяти.

Проблема, с которой я столкнулся, заключается в том, что я хотел бы обучить Stanford NER на помеченных данных, но я продолжаю сталкиваться с проблемой, что мой терминал возвращает «Убито» (см. Мои последние два эксперимента ниже). Я не могу найти ничего о причине проблемы, но я думаю, что это может быть проблема с памятью.

Я провел довольно много экспериментов, в том числе:

  • Добавление/удаление использования NGram для уменьшения количества функций (https://nlp.stanford.edu/software/crf-faq.html#d)
  • Случайное удаление немаркированных строк работало, но делало немаркированные данные очень разреженными и удаляло последовательные шаблоны. Поэтому я хотел бы предотвратить это. (https://nlp.stanford.edu/software/crf-faq.html#d)
  • Добавление минимального пространства в куче (обучить модель NER, избегая ошибки нехватки памяти)
  • Добавление среды CLASS_PATH 25000M(B)
  • Добавление квазиньютоновского оптимизатора Orthant-Wise с ограниченной памятью (http://www.davidsbatista.net/blog/2018/01/23/StanfordNER/)
  • Уменьшен допуск, здесь я показываю, что работаю с 0,001, но также работал с 0,1, например. (http://www.davidsbatista.net/blog/2018/01/23/StanfordNER/)
  • Экспериментируя с меньшим количеством документов, я заметил, что при работе, например. всего 10-15% от всего набора данных (1,6к - 2к документов), он способен сходиться и сохранять результаты как надо.

Ниже я показал два последних проведенных мной эксперимента:

  • Эксперимент 1: использование не 13 тыс. документов, а только 9,6 тыс. (обозначается train-size-0,6 во второй строке). Здесь классификатор обучил несколько итераций, а затем умер.
  • Эксперимент 2: использование не 13 тыс. документов, а только 9,6 тыс. (обозначается train-size-0,6 во второй строке). Здесь классификатор даже не смог обучить ни одной итерации.

У вас есть идеи? Как вы думаете, проблема в количестве функций? Относится ли это к «асимптотическому порядку» (который я в настоящее время не совсем понимаю. Что они имеют в виду, например, под состоянием и порядком? Источник: https://nlp.stanford.edu/software/crf-faq.html#mem)?

Эксперимент 1 и эксперимент 2

-----------------------------Experiment 1-----------------------------


Picked up _JAVA_OPTIONS: -Xmx25000m

Invoked on Sun Feb 21 08:57:10 CET 2021 with arguments: -prop property_files/settings.prop -serializeTo models/stanford-ner-model-tolerance-0.001-train-size-0.6.ser.gz -tolerance 0.001

useTypeSeqs2=true
priorLambda=10
maxLeft=1
serializeTo=models/stanford-ner-model-tolerance-0.001-train-size-0.6.ser.gz
wordShape=chris2useLC
trainFileList=train/
useDisjunctive=true
useOWLQN=True
useClassFeature=true
useNGrams=false
useNext=true
usePrev=true
useTypeySequences=true
usePrevSequences=true
qnSize=10
useTypeSeqs=true
maxQNItr=50
useSequences=true
map=word=0,answer=1
tolerance=0.001
useWord=true
numFeatures = 8422664
Time to convert docs to feature indices: 160.0 seconds
Current memory used: 5668m
numClasses: 4 [0=O,1=CITY,2=ADDRESS,3=ZIPCODE]
numDocuments: 10195
numDatums: 12379560
numFeatures: 8422664
Time to convert docs to data/labels: 137.6 seconds
Current memory used: 9115m
Running gradient on 4 threads
numWeights: 76739612
QNMinimizer called on double function of 76739612 variables, using M = 10.
               An explanation of the output:
Iter           The number of iterations
evals          The number of function evaluations
SCALING        <D> Diagonal scaling was used; <I> Scaled Identity
LINESEARCH     [## M steplength]  Minpack linesearch
                   1-Function value was too high
                   2-Value ok, gradient positive, positive curvature
                   3-Value ok, gradient negative, positive curvature
                   4-Value ok, gradient negative, negative curvature
               [.. B]  Backtracking
VALUE          The current function value
TIME           Total elapsed time
|GNORM|        The current norm of the gradient
{RELNORM}      The ratio of the current to initial gradient norms
AVEIMPROVE     The average improvement / current value
EVALSCORE      The last available eval score

Iter ## evals ## <SCALING> [LINESEARCH] VALUE TIME |GNORM| {RELNORM} AVEIMPROVE EVALSCORE

Iter 1 evals 1 <D> [.....B 1.000E-6] 3.998E8 124.70s |2.683E5| {1.544E-2} 0.000E0 -
Iter 2 evals 2 <D> [B 1.000E-1] 3.998E8 147.99s |2.683E5| {1.544E-2} 8.480E-6 -
Iter 3 evals 3 <D> [.....B 1.000E-5] 3.991E8 287.10s |2.683E5| {1.544E-2} 5.631E-4 -
Iter 4 evals 4 <D> [.....B 1.000E-5] 3.984E8 444.43s |2.683E5| {1.544E-2} 8.517E-4 -
Iter 5 evals 5 <D> [.....B 1.000E-5] 3.974E8 725.12s |2.683E5| {1.543E-2} 1.192E-3 -
Killed






-----------------------------Experiment 2-----------------------------

Picked up _JAVA_OPTIONS: -Xmx25000m

Invoked on Sun Feb 21 09:18:10 CET 2021 with arguments: -prop property_files/settings.prop -serializeTo models/stanford-ner-model-tolerance-0.001-train-size-0.8.ser.gz -tolerance 0.001

useTypeSeqs2=true
priorLambda=10
maxLeft=1
serializeTo=models/stanford-ner-model-tolerance-0.001-train-size-0.8.ser.gz
wordShape=chris2useLC
trainFileList=train/
useDisjunctive=true
useOWLQN=True
useClassFeature=true
useNGrams=false
useNext=true
usePrev=true
useTypeySequences=true
usePrevSequences=true
qnSize=10
useTypeSeqs=true
maxQNItr=50
useSequences=true
map=word=0,answer=1
tolerance=0.001
useWord=true
numFeatures = 11199846
Time to convert docs to feature indices: 247.0 seconds
Current memory used: 7897m
numClasses: 5 [0=O,1=CITY,2=ADDRESS,3=ZIPCODE,4=-ADDRESS]
numDocuments: 13593
numDatums: 18113834
numFeatures: 11199846
Time to convert docs to data/labels: 225.0 seconds
Current memory used: 10901m
Running gradient on 4 threads
numWeights: 152610450

QNMinimizer called on double function of 152610450 variables, using M = 10.
Killed 

person user15252663    schedule 21.02.2021    source источник