Как обучать совершенно новые сущности вместо предварительно обученных сущностей с использованием модели Spacy NER?

Как мне выполнить переносное обучение, то есть взять предварительно обученную модель Spacy NER и заставить ее изучать новые сущности, специфичные для моего варианта использования?

Для этого у меня есть 100 новых обучающих образцов с аннотациями. Новая переобученная модель должна предсказывать только новые сущности, а не какие-либо существующие сущности в предварительно обученной пространственной модели. Простое добавление / обновление новых сущностей в существующие модели и игнорирование старых сущностей во время прогнозирования не имеет смысла.

Этот официальный пример описывает, как добавлять новые объекты в существующие предварительно обученные сущности, но это не то, что я хочу. У меня также очень мало примеров, т.е. 100, чтобы полностью построить новую модель NER с нуля.

Изменить: я хочу идентифицировать все номера счетов в неструктурированном документе.

Пример («Я хочу изменить адрес, соответствующий моей учетной записи 12345. Пожалуйста, дайте мне знать, как это сделать.» [34, 39, 'accountnumber'])


person GeorgeOfTheRF    schedule 20.01.2020    source источник
comment
Нужна дополнительная информация, чтобы ответить на вопрос - с какими типами организаций вы работаете? Названия мест, имена людей и т. Д.? Вы можете привести примеры новых сущностей и обучающих данных для них?   -  person Adnan S    schedule 20.01.2020
comment
Спасибо. Добавлено в пост   -  person GeorgeOfTheRF    schedule 20.01.2020


Ответы (2)


Вы упоминаете, что хотите предсказывать только новые сущности, а не старые. Таким образом, нет причин начинать с предварительно обученной модели NER. Функции, изученные для других типов сущностей (которые вам не нужны), в любом случае не будут использоваться / передаваться в ваш новый тип сущности. Так что вам просто нужно начать обучение модели с нуля.

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

person Sofie VL    schedule 21.01.2020
comment
+1. Вы хотите сказать это, т.е. собрать новые примеры и применить шаг сопоставления на основе правил, чтобы пометить объекты в новых примерах вместо ручного аннотирования? Если да, не могу ли я просто применить модель, обученную на 100 примерах, и применить ее к недавно собранным примерам, чтобы создать больше обучающих примеров, вместо использования сопоставления на основе правил? - person GeorgeOfTheRF; 23.01.2020
comment
Как вы думаете, почему существующая предварительно обученная модель не будет полезна для определения номера счета, то есть просто путем повторного обучения выходного слоя только с номером счета? Разве не в этом вся идея трансферного обучения? - person GeorgeOfTheRF; 23.01.2020
comment
О, конечно, если у вас есть ресурсы, чтобы делать больше ручных аннотаций, это было бы лучше, чем правила + курирование! - person Sofie VL; 23.01.2020
comment
Ok. Каковы плюсы и минусы использования сопоставления на основе правил по сравнению с автоматическим аннотированием новых выборок с использованием модели, обученной на существующих 100 примерах? Я пытаюсь понять, когда мне следует использовать сопоставитель - person GeorgeOfTheRF; 23.01.2020
comment
Я лично рекомендую использовать сопоставитель, если вы чувствуете, что в вашем наборе данных мало лексических / синтаксических вариаций. Если бы вы могли захватить 80% ваших золотых ящиков с помощью нескольких правил, возможно, стоит использовать сопоставитель для первого быстрого поиска, а затем сделать ручную аннотацию. - person Sofie VL; 23.01.2020

Для вашего варианта использования вы добавляете новый тип сущности, поэтому не должно быть путаницы с существующими типами сущностей. Если вы назовете свою новую сущность «номер счета», вы сможете использовать связанный сценарий обучения для обучения модели.

На этапе извлечения используйте код в документации, но просто отфильтруйте "accountnumber" в результатах (т.е. поле ent.label_) и игнорировать другие существующие объекты.

person Adnan S    schedule 20.01.2020
comment
Модель, построенная описанным способом, будет слабее, чем модель, обученная только для определения номера счета. Также вероятность предсказания не имеет смысла, и я хочу использовать вероятность дальше. - person GeorgeOfTheRF; 20.01.2020
comment
На основании чего вы говорите, что модель будет слабее? Ваш новый тип объекта не перекрывается с существующими объектами. SpaCy использует синтаксический анализ зависимостей и другой лингвистический анализ для поиска сущностей. Если вы не дублируете примеры, все будет в порядке. Вы пробовали это и обнаружили, что не хватает производительности? - person Adnan S; 20.01.2020
comment
Spacy строит остаточную CNN, чтобы делать более точные прогнозы. Исходя из того, что вы говорите, последний слой, то есть цель, содержит, скажем, 1000 объектов, но я хочу только account_type в последнем слое. Поскольку модель, обученная прогнозированию только account_type, будет более точной, чем модель, обученная прогнозированию aacount_type и 999 других классов. - person GeorgeOfTheRF; 21.01.2020
comment
Единственный способ сказать - это попробовать, но я рассматриваю NER как двухэтапную проблему. Первая часть состоит в том, чтобы отличить интересующий вас объект от остального текста (например, глаголов, предлогов и т. Д.). Второй шаг - определить, что это за сущность. На первом этапе я вижу ценность предварительно обученной модели. Если бы у вас был больший набор данных, можно было бы обучить модель с нуля. - person Adnan S; 21.01.2020