Выделение сущностей
Сущности (Entities)
Основными моделями понимания естественного языка являются модели извлечения слотов (сущностей) и распознавание намерений пользователя. Для этого создаются обучающие выборки с примерами, размеченными классами намерения и выделенными сущностями. Для обучения модели также необходимо создавать конфигурационный файл с выбором и параметрами модели.
Если намерение несет в себе общий смысл высказывания пользователя, иногда вам нужна дополнительная информация. Рассмотрим следующие высказывания:
- Я хочу купить синюю рубашку
- Я хочу купить красную короткую
В обоих случаях намерение состоит в том, чтобы что-то купить. Цвет является полезной информацией, но мы не хотим иметь разные намерения для каждого цвета.
Цвет — это дополнительная информация для извлечения, и это идеальный кандидат для сущности.
Сущности — это элементы, которые вы хотите извлечь из высказывания пользователя. Например, даты, места, время, описания, имена, предметы или цифры.
Фильтрация нежелательных сущностей
Иногда NLU может поймать сущность, которую вы не ожидаете в своих историях, и это может повлиять на прогнозы и управление диалогами в целом. Можно добавить следующий компонент в конвейер NLU, чтобы иметь больший контроль над полезной нагрузкой.
В приведенном ниже примере:
- Если намерение распознается, полезная нагрузка будет только удерживать сущности и избавляться от любых других.
buy_shirt
color
size
Если намерение распознано, любая извлеченная сущность будет проигнорирована и удалена из полезной нагрузки. chitchat.greet
Обработка сущностей через интерфейс Wisebot
Чтобы добавить сущность:
- Перейдите на сайт wisebot.digtlab.ru и в меню слева убедитесь, что делаете настройки для нужного бота. Должно отображаться его имя (выбираем Bot1).
- В разделе NLU перейдите в поле – «Пользователь говорит…».
- Введите тренировочную фразу, например, девочка.
- Нажмите на кнопку ENTER, чтобы добавить или отредактировать пример. Слово девочка добавилась в намерения.
- Присвоенное намерение не подходит, для изменения нажимаем на «nlu_fallback.». Появится поле «Фильтровать или создать».
- Пишем новое намерение «гендер». Нажимаем «Создать новое намерение».
- Слово девочка перешло в намерение «гендер». Нажимаем “сохранить” (save).
- Выделяем слово девочка в тренировочной фразе и добавляем сущность. Вводим gender, далее нажимаем Enter.
- Видим успешное изменение сущности.
Можем наблюдать успешное добавление в общий список сущностей.
Для выделения сущности из предложения необходимо выделить требуемое слово и добавить сущность (entity), как показано выше.
Параметры сущностей
При описании сущности можно использовать расширенный синтаксис в фигурных (а не круглых) скобках:
где доступны следующие свойства:
Свойство value удобно использовать для отождествления одинаковых значений сущности, написанный различным образом. Если требуется только свойство value, можно по-прежнему использовать круглые скобки в формате [текст](ENTITY_NAME:value)
(пробелов внутри круглых скобок быть не должно). Например:
В результате, в фразе "Хочу две пиццы" будет выделена сущность NUMBER с value=2, которую дальше можно использовать по значению, забыв про словоформу "две". Желательно подобные фразы с разметкой добавить также в соответствующее намерение:
RASA будет учиться извлекать сущность NUMBER на обоих намерениях. При наличии опечаток или неучтённых словоформ, извлечённая (правильно) сущность может и не иметь свойства value.
Свойство "role" позволяет уточнять роль, которую сущность играет в тексте. Например, пусть есть намерение со следующим примером (должно быть в одну строчку):
Тогда в аналогичной фразе NLU RASA вернёт две сущности с именем CITY. Первую value=Днепра с пометкой role=from, а вторую value=Париж - с пометкой role=to.
Свойство group позволяет указывать номер группы цепочки сущностей (также должно быть в одну строчку):
При использовании ролей и групп, их необходимо описывать при объявлении сущности: