Понимание естественного языка (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
.