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

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

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

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

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

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

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

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

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