Python-crfsuite маркировка в фиксированном порядке - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь создать модель CRF, которая разбивает японские предложения на слова.На данный момент меня не волнуют идеальные результаты, так как это всего лишь тест.Обучение проходит хорошо, но когда оно заканчивается, оно всегда дает одно и то же предположение для каждого предложения, которое я пытаюсь пометить.

"""Labels: X: Character is mid word, S: Character starts a word, E:Character ends a word, O: One character word"""
    Sentence:広辞苑や大辞泉には次のようにある。
    Prediction:['S', 'X', 'E', 'S', 'E', 'S', 'E', 'S', 'E', 'S', 'E', 'S', 'E', 'S', 'E', 'S', 'E']
    Truth:['S', 'X', 'E', 'O', 'S', 'X', 'E', 'O', 'O', 'O', 'O', 'S', 'E', 'O', 'S', 'E', 'O']
    Sentence:他にも、言語にはさまざまな分類がある。
    Prediction:['S', 'X', 'E', 'S', 'E', 'S', 'E', 'S', 'E', 'S', 'E', 'S', 'E', 'S', 'E', 'S', 'E', 'S', 'E']
    Truth:['O', 'O', 'O', 'O', 'S', 'E', 'O', 'O', 'S', 'X', 'X', 'X', 'E', 'S', 'E', 'O', 'S', 'E', 'O']

При просмотре информации о переходе для модели:

{('E', 'E'): -3.820618,
 ('E', 'O'): 3.414133,
 ('E', 'S'): 2.817927,
 ('E', 'X'): -3.056175,
 ('O', 'E'): -4.249522,
 ('O', 'O'): 2.583123,
 ('O', 'S'): 2.601341,
 ('O', 'X'): -4.322003,
 ('S', 'E'): 7.05034,
 ('S', 'O'): -4.817578,
 ('S', 'S'): -4.400028,
 ('S', 'X'): 6.104851,
 ('X', 'E'): 4.985887,
 ('X', 'O'): -5.141898,
 ('X', 'S'): -4.499069,
 ('X', 'X'): 4.749289}

Это выглядит хорошо, поскольку все переходы с отрицательными значениями невозможны, например, E -> X, переходя от конца слова к середине следующего.S -> E gets имеет самое высокое значение, и, как видно выше, модель просто попадает в шаблон маркировки S, затем E несколько раз, пока предложение не заканчивается.Я следовал этой демонстрации при попытке этого, хотя эта демонстрация предназначена для отделения латиницы.Мои функции аналогично просто n-грамм:

['bias',
 'char=ま',
 '-2-gram=さま',
 '-3-gram=はさま',
 '-4-gram=にはさま',
 '-5-gram=語にはさま',
 '-6-gram=言語にはさま',
 '2-gram=まざ',
 '3-gram=まざま',
 '4-gram=まざまな',
 '5-gram=まざまな分',
 '6-gram=まざまな分類']

Я пытался изменить метки только на S и X для запуска и других, но это просто заставляет модель повторять S, X, S, X доэто заканчивается символов.Я поднялся на 6 грамм в обоих направлениях, что заняло намного больше времени, но ничего не изменило.Пробовал тренироваться для большего количества итераций и немного изменить константы L1 и L2.Я подготовил до 100 000 предложений, что примерно настолько, насколько я могу, поскольку для этого требуется почти все 16 ГБ памяти.Мои функции структурированы неправильно?Как мне заставить модель перестать гадать по шаблону, это даже то, что происходит?Буду признателен за помощь, и дайте мне знать, если мне нужно добавить дополнительную информацию к вопросу.

1 Ответ

0 голосов
/ 04 февраля 2019

Оказывается, я пропустил шаг.Я передавал необработанные предложения тегеру, а не передавал функции, потому что CRF, по-видимому, может принимать строки символов, как если бы это был список почти бесполезных записей, он просто по умолчанию угадывал переход с наивысшей оценкой, а не выдавал ошибку.Я не уверен, поможет ли это кому-либо еще, учитывая, что это было глупой ошибкой, но я оставлю здесь ответ, пока не решу, хочу ли я удалить вопрос.

...