С CRF++ у меня работает MIRA, а CRF-L1 и CRF-L2 — нет.

Это может не иметь значения, но я использую дистрибутив Windows CRF++ 0.58.

Итак, я успешно использовал молоток для обучения модели с помощью CRF, а затем протестировал ее. Когда я пытаюсь использовать одни и те же обучающие и тестовые файлы с CRF++ (и после создания файла шаблона), я получаю

The line search routine mcsrch failed: error code:0

ошибка, когда я использую либо

-a CRF-L1

или по умолчанию

-a CRF-L2

Когда я использую

-a MIRA

хотя обучение работает без ошибок и то же самое с тестом.

Формат тестовых и обучающих данных может быть одинаковым как для mallet, так и для crf++, так что это не проблема. Мой файл шаблона так же прост, как

#Mixed
M00:%x[0,0]
M01:%x[0,1]
M02:%x[0,2]
......
M12:%x[0,12]

Мой последний столбец равен 0 или 1 в моих тренировочных данных, что является значением для классификации. Ни в одной из моих функций нет пробелов, я использую символы подчеркивания, когда это необходимо. Я упускаю здесь что-то простое, что может привести к сбою регуляризации L1 и L2?


person demongolem    schedule 26.04.2013    source источник
comment
Ах, радости оптимизации LBFGS. Я могу только сказать, что сочувствую, потому что я так часто видел загадочные сообщения о прекращении поиска по строке (из разных реализаций), что просто отказался от алгоритма.   -  person Fred Foo    schedule 26.04.2013


Ответы (2)


Я знал, что это какая-то глупость...

Чтобы использовать функции, которые использую я, вам нужно использовать префикс U (как в Unigram). Так вроде U00:%x[0,0] нормально. Вы не можете просто назвать свои функции чем угодно.

Я также обнаружил, что если я урежу свои тестовые данные до одного предложения, я получу то же сообщение об ошибке. Когда я восстановил свои тестовые данные до их исходного размера примерно в 2600 предложений, алгоритмы регуляризации теперь работают. Переобучение является распространенной причиной этого сообщения об ошибке в различных приложениях nlp и ml, но в моем случае это не было настоящей проблемой.

person demongolem    schedule 26.04.2013
comment
Сколько функций у вас было изначально? Я понимаю, что функциональность CRF++ ограничена общим количеством функций, которые она может обрабатывать. Причина моего комментария в том, что я столкнулся с аналогичной ошибкой, и мне было любопытно, верны ли мои рассуждения о том, что я столкнулся с ошибкой. Всего у меня около 407837 функций. - person leba-lev; 09.08.2013

Это также может произойти в крайнем случае набора данных только с одним CLASS (из-за ошибки в процедуре создания обучающего набора).

person user_1177868    schedule 27.11.2014