Перейти к содержанию

Что такое намерения#


Определение#

Намерение или Интент (от англ. "intent" — намерение) — это основная цель или задача, выраженное в тексте сообщения от пользователя. Намерения помогают помощнику классифицировать запросы и точно понимать, что именно пользователь хочет сделать или узнать.

За распознавание намерений отвечает модель NLU (Natural Language Understanding). Эта модель позволяет помощнику понимать и анализировать естественный язык пользователей.

Рассмотрим пример:

Вот несколько разных способов, которыми пользователь может поздороваться:

  • Доброе утро!
  • Привет!
  • Здравствуй!
  • Добрый вечер!

Все эти фразы относятся к одному намерению — «приветствие». Чтобы помощник мог распознавать намерение пользователя поздороваться, независимо от конкретной формулировки, в системе создаётся набор тренировочных фраз, охватывающий различные варианты приветствий. Этот набор помогает помощнику научиться обобщать и корректно определять намерение даже в новых, ранее не встречавшихся фразах.

Пример


Обучение намерениям#

Обучение намерениям — это процесс, в ходе которого модель NLU учится распознавать цели и задачи пользователя на основе добавленных тренировочных фраз.

В основе NLU лежит сложная нейронная сеть, которая обучается классифицировать фразы пользователей по намерениям. Для работы этой сети входные фразы преобразуются в векторы (массивы вещественных чисел). Эти векторы называются признаками (futures).

При построении векторов признаков используются три основных технологии:

  1. Bag-of-Words (мешок слов)

  2. Преобразование текста в набор значимых слов

  3. Учёт частоты встречаемости слов

  4. Word Embeddings (word2vec)

  5. Векторизация слов

  6. Учёт семантической близости слов
  7. Понимание синонимов и схожих по смыслу выражений

  8. N-граммы

  9. Последовательности из N букв

  10. Обработка отдельных букв (N=1)
  11. Анализ пар последовательных букв (N=2)
  12. Коррекция опечаток и ошибок

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


Как работают намерения?#

  1. Обучение модели:

  2. Заполняются примеры фраз для каждого намерения.

  3. Модель NLU обучается на этих данных и учится распознавать намерения.

  4. Распознавание намерений:

  5. Когда пользователь отправляет сообщение, модель NLU анализирует текст и определяет наиболее вероятное намерение.

  6. Например, для фразы "Какая погода в Москве?" модель определит намерение ask_weather.

  7. Реакция помощника:

  8. На основе распознанного намерения помощник выбирает, как реагировать. Например, для намерения ask_weather помощник может вызвать API погоды и отправить ответ.


Формат записи намерения в файлах проекта#

Намерения записываются:

  1. В файле nlu.yml. Этот файл содержит примеры тренировочных фраз для каждого намерения. Именно здесь указываются примеры того, что пользователь может сказать, и какие намерения эти фразы представляют.

Пример записи:

nlu:
  - intent: greet # Уникальное имя намерения (например, `greet`, `goodbye`, `ask_weather`)
    examples: | # Список примеров фраз, которые могут быть связаны с этим намерением.
      - Привет!
      - Здравствуйте!
      - Добрый день!
  - intent: order_pizza
    examples: |
      - Хочу заказать пиццу
      - Мне нужна пицца
      - Дайте пиццу, пожалуйста
  1. В файле domain.yml. В этом файле перечисляются все намерения, которые бот должен распознавать. Он также содержит ответы, действия и сущности, связанные с намерениями.

Пример записи:

intents:
  - greet
  - order_pizza
responses:
  utter_greet:
    - text: 'Привет! Как я могу вам помочь?'
  utter_ask_pizza_type:
    - text: 'Какую пиццу вы хотите заказать?'
  1. В файле stories.yml. В этом файле описываются истории взаимодействия пользователя с ботом, где указывается, как бот должен реагировать на определенные намерения.

Пример записи:

stories:
  - story: greet and order pizza
    steps:
      - intent: greet
      - action: utter_greet
      - intent: order_pizza
      - action: utter_ask_pizza_type
  1. В файле rules.yml. Этот файл содержит правила, которые определяют, как бот должен реагировать на определенные намерения в конкретных ситуациях.

Пример записи:

rules:
  - rule: Greet the user
    steps:
      - intent: greet
      - action: utter_greet

Советы по работе с намерениями#

  • Создавайте разнообразные обучающие примеры:

Чем больше примеров фраз вы предоставите, тем лучше модель будет распознавать намерения. Примеры для каждого намерения должны включать не только ключевые слова, но и различный контекст. Например, для намерения «оплатить картой» можно использовать фразы: «как оплатить», «хочу оплатить картой», «можно ли оплатить», «хотел бы оплатить картой», «оплату картой принимаете», «вы карту принимаете».

  • Используйте уникальные намерения:

Каждое намерение должно быть чётко определено и иметь ясную цель. Намерения должны быть легко различимы. Например, если в одном намерении «Да» будут примеры «да» и «конечно», а в другом намерении «согласие» — «да, согласен» и «конечно, буду», то это может запутать помощника. В таких случаях лучше объединить эти два намерения в одно.

  • Регулярно обновляйте данные:

Добавляйте новые примеры фраз и намерения по мере развития бота.

  • Используйте синонимы и вариации:

Учитывайте разные формулировки, которые могут использовать пользователи