Как добавить структуру в намерения чат-бота с помощью Rasa

Представьте простую структуру данных на уровне NLU с намерениями извлечения

Введение

Фреймворки чат-ботов продолжают двигаться в общем направлении с распространением следующих элементов:

  • Слияние намерений и сущностей
  • Сущности, определяемые контекстом в примерах пользовательского высказывания.
  • Структуры данных внутри сущностей (роли и шаблоны и т. Д.)
  • Вложенные объекты (суб-объекты, суб-субъекты и т. Д.)
  • Категории намерений

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

Итак, с помощью Rasa вы можете определять подкатегории в намерениях с помощью того, что Rasa называет намерениями поиска.

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

В этой истории вы найдете несколько простых примеров того, как реализовать эту функцию с практическими примерами.

Следует отметить несколько ограничений, касающихся этой функции.

И ближе к концу статьи есть комментарии о том, как можно реализовать эту функцию.





Намерения по извлечению

Эта функция в Rasa NLU напоминает мне параметр иерархии категорий в IBM Watson NLU API.

В Watson NLU, если задано значение true, пояснения возвращаются для каждой категоризации; как вы можете видеть на изображении.

Watson может вернуться к пятиуровневой таксономии контента.

Здесь на изображении возвращаются три верхние категории; если доступно.

Можно добавить объяснение, которое можно включать и выключать.

Категории вернули значения по умолчанию, равные трем, но это можно установить.

При добавлении намерений извлечения ваши данные обучения NLU могут выглядеть следующим образом:

- intent: balance/savings
  examples: |
    - What is the balance in my savings account?
    - Give me my savings balance?
    - I need to know the balance of savings.
    - What is my savings balance?
    - Savings Balance
    - balance for savings
- intent: balance/checking
  examples: |
    - What is the balance in my checking account?
    - Give me my checking balance?
    - I need to know the balance of checking.
    - What is my checking balance?
    - checking Balance
    - balance for checking
- intent: balance/money_market
  examples: |
    - What is the balance in my money market account?
    - Give me my money market balance?
    - I need to know the balance of money market.
    - What is my money market balance?
    - money market Balance
    - balance for money market
- intent: balance/retirement
  examples: |
    - What is the balance in my retirement account?
    - Give me my retirement balance?
    - I need to know the balance of retirement.
    - What is my retirement balance?
    - retirement Balance
    - balance for retirement

Обратите внимание на косую черту в имени намерения. Очевидно, это означает, что вы не можете использовать косую черту в своем намерении. Как вы можете видеть в этом примере, имя намерения значительно обогатилось. С намерениями баланса, которые группируются вместе, а затем расширяются оттуда вложенным именем / описанием.

Чтобы назвать одно преимущество, это может сэкономить вам дополнительный диалог, чтобы спросить пользователя, для какого типа учетной записи им нужен баланс.

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

Далее запускаем Rasa в режиме NLU только с помощью следующей команды:

rasa shell nlu

После отображения командной строки введите фразу: «Каков остаток на счете моей кредитной карты?»

Ниже приведена часть ответа JSON от движка Rasa NLU.

Вы можете видеть, что основное намерение баланса возвращается вперед, а ниже в документе JSON видно вложенное намерение; баланс / кредитная_карта.

При запуске только Rasa NLU эту функцию можно эффективно использовать в следующих сценариях:

  • Постобработка текста, который необходимо классифицировать. Подумайте об архивных разговорах агентов в реальном времени.
  • Первичная маршрутизация разговоров с клиентами по определенным группам навыков операторов.
  • Маркировка текстов на естественном языке по релевантным категориям.





Гнездование

Вложение намерений невозможно, и для каждого намерения возможно одно промежуточное намерение или одно понижение уровня. В тот момент, когда вы пытаетесь вложить второе под-намерение с именем намерения баланс / сбережения / usd, выдается следующая ошибка:

(rasa1) C:\data\rasa\demo1>rasa train nlu
The configuration for pipeline was chosen automatically. It was written into the config file at 'config.yml'.
RasaException: Intent name 'balance/savings/usd' is invalid, it cannot contain more than one '/'.

Идея вложения не чужда NLU, в настоящее время LUIS от Microsoft позволяет вложение своих объектов машинного обучения.

Это означает, что с LUIS вы можете вкладывать сущности на несколько уровней; следовательно, сущности с суб-объектами, суб-суб-объектами и так далее.





Вывод

С помощью Retrieval Intents возможен более богатый ответ от Rasa NLU, и намерения могут быть категориями.

Упрощено управление намерениями.

Связанные намерения можно сгруппировать вместе и выделить по частям.

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

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

Следует отметить, что в IBM Watson NLU API категории доступны по умолчанию; следовательно, предварительно загружен.

Подробнее здесь…