Возможности обученных NER-моделей

Добрый день, уважаемые коллеги! Хочу поблагодарить вас за огромную проделанную работу отличного качества - это хорошо видно, сколько вложено терпения и любви к делу.

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

Вопрос 1
http://docs.deeppavlov.ai/en/master/components/ner.html
Вверху страницы есть табличка. Хочется увидеть для уже обученных моделей, которые можно взять и использовать, какие языки поддерживаются и какие NER-сущности для каждого языка определяются. Пока, путем интуиции и лазания по гигхабу и чтения исходников удалось понять, что для русского языка поддерживается 3 типа сущностей: ПЕРСОНА, ЛОКАЦИЯ, ОРГАНИЗАЦИЯ. Я прав? А для других обученных моделей-языков?

Вопрос 2
В ходе тестирования русской NER-модели тут увидел, что для текста "Поставь задачу на Колю Рыжонкина. Поставь задачу на Дмитрия. Поставь задачу на Сашу. Поставь задачу на Хрена с Горы. Поставь задачу на Антона Герасимюка. Поставь задачу на Александра Сербула. Поставь задачу на Сергея Рыжикова " модель определяет ИМЕНА и ФАМИЛИИ очень хорошо, но если подать на вход их в нижнем регистре, как это часто бывает при использовании чатботов или голосовом управлении, качество значительно снижается. Я правильно понимаю, чтобы для того, чтобы NER для имен в нижнем регистре работал, нужно будет подготовить датасет нам с именами в нижнем регистре и переобучить модель?

Вопрос 3
Показался интересным компонент “Slot filling”. Но по документации немного неясно, какие типы NER-сущностей поддерживаются и для какого языка (думаю полезной бы была табличка вверху страницы документации). Интересен кейс, когда можно на вход подавать распознанные NER компонентом русские имена и фамилии и получать их в нормальной форме (в портале имена и фамилии хранятся в нормальной форме). Насколько я понял, для этого нужно будет переобучить сейчас модель на русском датасете из вопроса 1. Или решить задачу в лоб через поиск уже нормализованных имен и фамилий в профиле портала в распознанных моделью сущностях ПЕРСОНА.

Вопрос 4
Очень интересно, может посоветуете, научиться определять интервалы для текстов типа “Добавь событие в календарь на следующий четверг с 5 утра до 6 вечера” => сначала через NER (сущности типа дни недели, даты, начало-конец интервала), а потом через Slot filling для получения интервала дат.

Спасибо!

3 Likes
  1. На данный момент обученные модели есть только для русского и английского языков. Поддерживаемые сущности вынесем в первую секцию. Обучить на своём языке можно при наличии данных. Формат и метод обучения написан в README.
  2. Большие буквы - очень сильная фича, без неё качество падает на пару пунктов. Однако, можно обучить модель на принудительно приведённом к нижнему регистру тексте, как вы и сказали. Для этого нужно убрать капитализационные фичи из конфига и подавать в char_splitter x_lower вместо x_tokens. Если хотите обучить - есть конфиг ner_rus_lower в ветке feat/lower-ner
  3. Сущности в slot_filling на данный момент поддерживаются только сущности из DSTC2. Нормализация производится по словарю и нечеткому поиску. Чтобы нормализовать слова нужно собрать свой словарь, идентичный slot_vals.json. Нормированная форма - список ненормированных форм. NER можно использвать предобученный.
  4. На данный момент датасетов на которых можно обучиться на даты в открытом доступе нет
3 Likes

Спасибо за развернутый ответ! Я правильно понял, что NER сущности тут обучены из открытого английского датасета, а именно русского датасета пока нет в открытом доступе?