Перейти к основному содержимому

Понимание естественного языка (NLU)

подсказка
NLU (Natural Language Understanding) — задача обработки естественного языка, связанная с пониманием смысла высказываний.

Это одна из ключевых функций, которой должны обладать чат-боты, чтобы правильно интерпретировать запросы и реагировать на них в соответствии с ожиданиями клиентов.

При помощи алгоритмов NLU боты решают две основные задачи: определение коммуникативного намерения (интента) говорящего и распознавание упоминаемых сущностей.

Возможности NLU

NLU-ядро имеет следующие возможности:

  • Распознавание интентов пользователей. Интент — ключевая единица NLU-ядра, объединяющая в себе набор фраз, намерение пользователя и другую метаинформацию.
  • Системные и пользовательские сущности. Сущность — единица NLU-ядра. Представляет собой последовательность слов, объединенных некоторым смыслом или правилом. Например: имена, дата и время, местоположение и пр.
  • Клиентские сущности — сущности, которые может персонализировать сам клиент во время диалога с ботом. При этом содержание сущности будет доступно только для самого клиента. Клиентские сущности используются для решения задач, в которых необходима персонализация для распознавания интентов.
  • Паттерны — формальные правила, описывающие ключевые слова и выражения. С помощью паттернов происходит отнесение реплики человека к одному из существующих в системе стейтов, чтобы затем выполнить соответствующие стейту реакции.
  • Слот-филлинг (slot filling) — процесс дозапроса информации для выполнения запроса клиента. Полученные данные в ходе дозапроса доступны для использования в сценарии.
  • Разметка логов (Data Labeling) — инструмент, позволяющий выявлять тематику сообщений из загруженных данных, на которые будет реагировать бот.
  • Расширенные настройки NLU. Вы можете задать новые параметры для настройки NLU, уникальные для отдельного проекта.
  • NLP Direct API предоставляет возможности управления NLU.

Языки NLU

Поддерживаемые языки

При создании проекта обязательный параметр Язык NLU определяет язык, который бот сможет понимать. Для каждого из доступных языков в платформе подключены:

  • библиотека для токенизации и морфологического анализа;
  • встроенные алгоритмы распознавания интентов;
  • набор стандартных сущностей.
предупреждение
Для всех языков, кроме русского, английского и китайского, поддерживается только алгоритм классификатора STS.
ЯзыкПримечания
РусскийПоддерживается исправление орфографии и перефразирование тренировочных фраз.
АнглийскийПоддерживается перефразирование тренировочных фраз.
Греческий
Датский
Испанский
Итальянский
КазахскийЕсли дата, время или числа указаны прописью, вы можете распознать их с помощью системных сущностей 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 поддерживает совместное использование интентов и паттернов в одном сценарии. Правила активации стейтов при помощи этих механизмов имеют разный приоритет.

Кроме того, порядок активации стейтов при совместном использовании интентов и паттернов можно задать самостоятельно. Для этого можно использовать: