Плато в потере во время тренировки NER с spaCy - PullRequest
0 голосов
/ 14 февраля 2019

Я тренирую (с нуля) новый набор сущностей и делаю в точности так, как описано в spaCy tutorial , однако моя потеря - это плато, и большое количество эпох не помогает.

Мои данные:

9 различных организаций, 15000 обучающих данных (предложений).Потеря после 20 эпох:

Loaded model 'en'
Losses {'ner': 25461.3508122763}
Losses {'ner': 17003.450728844182}
Losses {'ner': 15725.198527784352}
Losses {'ner': 15315.754479839785}
Losses {'ner': 14980.468680851985}
Losses {'ner': 14716.52629194191}
Losses {'ner': 14346.623731715972}
Losses {'ner': 14463.972966984807}
Losses {'ner': 14195.106732198006}
Losses {'ner': 14058.390174787504}
Losses {'ner': 13875.850727875884}
Losses {'ner': 13859.096326599261}
Losses {'ner': 13614.887464660655}
Losses {'ner': 13512.779816124807}
Losses {'ner': 13388.69595626908}
Losses {'ner': 13496.388241585315}
Losses {'ner': 13530.602194116611}
Losses {'ner': 13245.709490846923}
Losses {'ner': 13219.483523900466}
Losses {'ner': 13189.088232180386}

Вопрос 1:

Каков наилучший способ организации обучающих данных, если в одном предложении есть несколько сущностей?Должен ли я объединить все сущности в списке или лучше тренироваться с одной сущностью?

Например:

("Horses and dogs are too tall and they pretend to care about your feelings", {'entities': [(0, 6, 'ANIMAL'), (11, 15, 'ANIMAL')]})

или лучше разделить:

("Horses and dogs are too tall and they pretend to care about your feelings", {'entities': [(0, 6, 'ANIMAL')]}),

("Horses and dogs are too tall and they pretend to care about your feelings", {'entities': [(11, 15, 'ANIMAL')]})

Вопрос 2:

Должен ли я также включать пустые предложения (без сущностей)?

("The new electric cars is great!", {'entities': []})

Очевидно, модель предсказывает не так уж плохо (f1 ~0.7), однако мне интересно, каковы наилучшие практики для тонкой настройки модели (кроме использования Prodigy поверх этой обученной модели).

1 Ответ

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

spaCy и Prodigy ожидают разные формы данных обучения: spaCy ожидает «золотую» аннотацию, в которой каждый объект помечен.Этот формат аннотации описан в spaCy docs .Если вы просто тренируете модель NER, вы можете просто опустить зависимости и ключи POS из словаря.Обучение таким образом имеет смысл: во время прогнозирования модель должна будет создавать метки сущностей для каждого слова, которое она видит.

В отличие от этого, Prodigy может принимать помеченные примеры, которые имеют только один промежуток с предложенной меткой объекта, плюс человеческое решение о том, является ли этот диапазон экземпляром метки объекта или нет.Это немного сложнее для обучения, так как модель просто не будет знать, являются ли другие слова в предложении сущностью или нет.

Я догадываюсь, что модель будет работать лучше, если вы объедините всесущности в предложении в одном учебном примере (вопрос 1).Это дает модели больше информации о предложении и позволяет ей изучать отношения между различными объектами в тексте.(Вспомните, например, фразу «она посетила X и Y». Если X - это место, Y - почти наверняка, место. Если X - это человек, Y также, вероятно, будет).Хотя это было бы довольно просто и интересно проверить эмпирически.

Что касается вопроса 2, то включение предложений без сущностей должно быть очень полезным для модели.

Примечание: когда я тренируюсь на моделях NER, производительность обычно достигает 20 эпох, и F1 с 0,7 не так уж и плох, так что то, что вы находите, звучит правильно.

...