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

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

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

Содержание инструкции:


Определение

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

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

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

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

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

Image


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

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

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

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

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

    • Преобразование текста в набор значимых слов
    • Учёт частоты встречаемости слов
  2. Word Embeddings (word2vec)

    • Векторизация слов
    • Учёт семантической близости слов
    • Понимание синонимов и схожих по смыслу выражений
  3. N-граммы

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

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


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

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

    • Заполняются примеры фраз для каждого намерения.
    • Модель NLU обучается на этих данных и учится распознавать намерения.
  2. Распознавание намерений:

    • Когда пользователь отправляет сообщение, модель NLU анализирует текст и определяет наиболее вероятное намерение.
    • Например, для фразы "Какая погода в Москве?" модель определит намерение ask_weather.
  3. Реакция помощника:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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