Понимание естественного языка (NLU)
Это одна из ключевых функций, которой должны обладать чат-боты, чтобы правильно интерпретировать запросы и реагировать на них в соответствии с ожиданиями клиентов.
При помощи алгоритмов NLU боты решают две основные задачи: определение коммуникативного намерения (интента) говорящего и распознавание упоминаемых сущностей.
Возможности NLU
NLU-ядро имеет следующие возможности:
- Распознавание интентов пользователей. Интент — ключевая единица NLU-ядра, объединяющая в себе набор фраз, намерение пользователя и другую метаинформацию.
- Системные и пользовательские сущности. Сущность — единица NLU-ядра. Представляет собой последовательность слов, объединенных некоторым смыслом или правилом. Например: имена, дата и время, местоположение и пр.
- Клиентские сущности — сущности, которые может персонализировать сам клиент во время диалога с ботом. При этом содержание сущности будет доступно только для самого клиента. Клиентские сущности используются для решения задач, в которых необходима персонализация для распознавания интентов.
- Паттерны — формальные правила, описывающие ключевые слова и выражения. С помощью паттернов происходит отнесение реплики человека к одному из существующих в системе стейтов, чтобы затем выполнить соответствующие стейту реакции.
- Слот-филлинг (slot filling) — процесс дозапроса информации для выполнения запроса клиента. Полученные данные в ходе дозапроса доступны для использования в сценарии.
- Разметка логов (Data Labeling) — инструмент, позволяющий выявлять тематику сообщений из загруженных данных, на которые будет реагировать бот.
- Расширенные настройки NLU. Вы можете задать новые параметры для настройки NLU, уникальные для отдельного проекта.
- NLP Direct API предоставляет возможности управления NLU.
Языки NLU
Поддерживаемые языки
При создании проекта обязательный параметр Язык NLU определяет язык, который бот сможет понимать. Для каждого из доступных языков в платформе подключены:
- библиотека для токенизации и морфологического анализа;
- встроенные алгоритмы распознавания интентов;
- набор стандартных сущностей.
| Язык | Примечания |
|---|---|
| Русский | Поддерживается исправление орфографии и перефразирование тренировочных фраз. |
| Английский | Поддерживается перефразирование тренировочных фраз. |
| Греческий | |
| Датский | |
| Испанский | |
| Итальянский | |
| Казахский | Если дата, время или числа указаны прописью, вы можете распознать их с помощью системных сущностей zb.datetime и zb.number. |
| Китайский | Не поддерживаются: • нечеткий поиск и нормализация сущностей NLU; • расширенные элементы паттернов ~ и $morph. |
| Литовский | Не поддерживается распознавание времени и чисел прописью. |
| Немецкий | |
| Нидерландский | |
| Польский | |
| Португальский | |
| Румынский | |
| Украинский | Поддерживается исправление орфографии. |
| Французский | |
| Японский | Не поддерживается распознавание времени и чисел прописью. |
Другие языки
Если в вашем проекте требуется поддержка языка, который не предусмотрен в JAICP, в платформе реализована возможность подключить к проекту внешний NLU-сервис с поддержкой любого языка.
Вы можете самостоятельно разработать такой сервис или воспользоваться сторонним. Внешний NLU-сервис должен быть выполнен в соответствии со спецификацией Model API.
Сценарий
Параметры NLU-ядра
Параметры NLU-ядра по умолчанию указаны в chatbot.yaml:
language: ru
botEngine: v2
nlp:
intentNoMatchThresholds:
phrases: 0.2
patterns: 0.2
Здесь:
-
language— язык классификатора. -
intentNoMatchThresholdsзадает минимальную похожесть запроса на тренировочные фразы и паттерны интента. Значениеphrasesиpatternsпо умолчанию —0.2. Если классификатор не может отнести запрос ни к одному из классов, срабатывает событиеnoMatch.подсказкаВы также можете указать пороговое значение для паттернов из тегов
qиq!с помощью параметраpatternNoMatchThreshold.
Совместное использование интентов и паттернов
JAICP поддерживает совместное использование интентов и паттернов в одном сценарии. Правила активации стейтов при помощи этих механизмов имеют разный приоритет.
Кроме того, порядок активации стейтов при совместном использовании интентов и паттернов можно задать самостоятельно. Для этого можно использовать:
- обработчик
selectNLUResult; - поле
$context.nBest.