Как добавить структуру в намерения чат-бота с помощью 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 категории доступны по умолчанию; следовательно, предварительно загружен.