Что такое намерения#
- Определение
- Обучение намерениям
- Как работают намерения?
- Формат записи намерения в файлах проекта
- Советы по работе с намерениями
Определение#
Намерение или Интент (от англ. "intent" — намерение) — это основная цель или задача, выраженное в тексте сообщения от пользователя. Намерения помогают помощнику классифицировать запросы и точно понимать, что именно пользователь хочет сделать или узнать.
За распознавание намерений отвечает модель NLU (Natural Language Understanding). Эта модель позволяет помощнику понимать и анализировать естественный язык пользователей.
Рассмотрим пример:
Вот несколько разных способов, которыми пользователь может поздороваться:
- Доброе утро!
- Привет!
- Здравствуй!
- Добрый вечер!
Все эти фразы относятся к одному намерению — «приветствие». Чтобы помощник мог распознавать намерение пользователя поздороваться, независимо от конкретной формулировки, в системе создаётся набор тренировочных фраз, охватывающий различные варианты приветствий. Этот набор помогает помощнику научиться обобщать и корректно определять намерение даже в новых, ранее не встречавшихся фразах.
Обучение намерениям#
Обучение намерениям — это процесс, в ходе которого модель NLU учится распознавать цели и задачи пользователя на основе добавленных тренировочных фраз.
В основе NLU лежит сложная нейронная сеть, которая обучается классифицировать фразы пользователей по намерениям. Для работы этой сети входные фразы преобразуются в векторы (массивы вещественных чисел). Эти векторы называются признаками (futures).
При построении векторов признаков используются три основных технологии:
-
Bag-of-Words (мешок слов)
-
Преобразование текста в набор значимых слов
-
Учёт частоты встречаемости слов
-
Word Embeddings (word2vec)
-
Векторизация слов
- Учёт семантической близости слов
-
Понимание синонимов и схожих по смыслу выражений
-
N-граммы
-
Последовательности из N букв
- Обработка отдельных букв (N=1)
- Анализ пар последовательных букв (N=2)
- Коррекция опечаток и ошибок
В конфигурационном файле config.yml можно настроить использование предобученных векторов слов для конкретного языка. Это значительно улучшает способность модели понимать синонимы и близкие по смыслу слова, даже если они не встречались в тренировочных фразах.
Как работают намерения?#
-
Обучение модели:
-
Заполняются примеры фраз для каждого намерения.
-
Модель NLU обучается на этих данных и учится распознавать намерения.
-
Распознавание намерений:
-
Когда пользователь отправляет сообщение, модель NLU анализирует текст и определяет наиболее вероятное намерение.
-
Например, для фразы "Какая погода в Москве?" модель определит намерение
ask_weather
. -
Реакция помощника:
-
На основе распознанного намерения помощник выбирает, как реагировать. Например, для намерения
ask_weather
помощник может вызвать API погоды и отправить ответ.
Формат записи намерения в файлах проекта#
Намерения записываются:
- В файле
nlu.yml
. Этот файл содержит примеры тренировочных фраз для каждого намерения. Именно здесь указываются примеры того, что пользователь может сказать, и какие намерения эти фразы представляют.
Пример записи:
nlu:
- intent: greet # Уникальное имя намерения (например, `greet`, `goodbye`, `ask_weather`)
examples: | # Список примеров фраз, которые могут быть связаны с этим намерением.
- Привет!
- Здравствуйте!
- Добрый день!
- intent: order_pizza
examples: |
- Хочу заказать пиццу
- Мне нужна пицца
- Дайте пиццу, пожалуйста
- В файле
domain.yml
. В этом файле перечисляются все намерения, которые бот должен распознавать. Он также содержит ответы, действия и сущности, связанные с намерениями.
Пример записи:
intents:
- greet
- order_pizza
responses:
utter_greet:
- text: 'Привет! Как я могу вам помочь?'
utter_ask_pizza_type:
- text: 'Какую пиццу вы хотите заказать?'
- В файле
stories.yml
. В этом файле описываются истории взаимодействия пользователя с ботом, где указывается, как бот должен реагировать на определенные намерения.
Пример записи:
stories:
- story: greet and order pizza
steps:
- intent: greet
- action: utter_greet
- intent: order_pizza
- action: utter_ask_pizza_type
- В файле
rules.yml
. Этот файл содержит правила, которые определяют, как бот должен реагировать на определенные намерения в конкретных ситуациях.
Пример записи:
Советы по работе с намерениями#
- Создавайте разнообразные обучающие примеры:
Чем больше примеров фраз вы предоставите, тем лучше модель будет распознавать намерения. Примеры для каждого намерения должны включать не только ключевые слова, но и различный контекст. Например, для намерения «оплатить картой» можно использовать фразы: «как оплатить», «хочу оплатить картой», «можно ли оплатить», «хотел бы оплатить картой», «оплату картой принимаете», «вы карту принимаете».
- Используйте уникальные намерения:
Каждое намерение должно быть чётко определено и иметь ясную цель. Намерения должны быть легко различимы. Например, если в одном намерении «Да» будут примеры «да» и «конечно», а в другом намерении «согласие» — «да, согласен» и «конечно, буду», то это может запутать помощника. В таких случаях лучше объединить эти два намерения в одно.
- Регулярно обновляйте данные:
Добавляйте новые примеры фраз и намерения по мере развития бота.
- Используйте синонимы и вариации:
Учитывайте разные формулировки, которые могут использовать пользователи