Использование AWS для разработки чат-бота, способного принимать бизнес-решения

Знакомство с (бессерверными) чат-ботами

Машины, которые общаются с людьми, больше не являются частью области научной фантастики, а являются частью повседневной жизни людей в виде личных помощников, таких как Alexa, Google Assistant, Siri и т. Д. С появлением платформ облачных вычислений движки на основе искусственного интеллекта, на которых работают эти мощные персональные помощники, проникли в сферу бизнеса в качестве чат-ботов. Они доказали свою ценность в сфере поддержки клиентов, обработки и отслеживания заказов, а также в приложениях для сбора данных.

Но мечтали ли вы когда-нибудь о чат-боте, который мог бы идти на шаг вперед и предсказывать результаты вашего бизнеса в дополнение к предоставлению необходимой бизнес-аналитики? Если да, то именно об этом и пойдет речь в этом посте.

В этом посте мы будем использовать Amazon Web Services (AWS) для разработки интеллектуального чат-бота, способного понимать намерения человека, делать прогнозы в реальном времени и возвращать пользователю соответствующие результаты - и все это через Бессерверная архитектура.

В этой публикации мы будем использовать следующие продукты AWS для создания и развертывания умного чат-бота:

  1. Amazon Lex - диалоговая машина, позволяющая понимать намерения и вопросы пользователей и отвечать на них.
  2. Amazon SageMaker - сервис машинного обучения для разработки и масштабного развертывания прогнозных моделей с помощью среды ноутбука Jupyter.
  3. Amazon Athena - бессерверная служба интерактивных запросов для анализа данных в Amazon S3 с использованием стандартного SQL.
  4. AWS Lambda - сервис бессерверного выполнения кода, который может программно подключаться практически ко всем сервисам Amazon.
  5. Amazon S3 - популярное хранилище объектов на Amazon Web Services.

Теперь давайте глубже погрузимся в создание чат-бота с использованием вышеуказанных сервисов AWS и их развертывание в Slack. Сначала мы разработаем модель прогнозирования, затем чат-бота, а затем мы их объединим.

Данные, использованные в этом сообщении, общедоступны в Репозитории UIC ML.

Построение и развертывание модели прогнозирования

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

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

Выбор функции

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

После выполнения необходимого проектирования функций набор данных разделяется на наборы для обучения, проверки и тестирования с пропорциональным разделением 70%, 15% и 15%. Выполнение рекурсивного исключения признаков (RFE) с случайным лесом для понимания важности функции дает следующие результаты:

Таким образом, основная информация, которую мы заинтересованы в сборе от потенциальных клиентов для предварительной проверки на предмет утверждения кредитных карт, это:

  1. Предыдущие значения по умолчанию: если пользователь совершал какие-либо платежи по умолчанию в прошлом
  2. Кредитный рейтинг: кредитный рейтинг пользователя.
  3. Долг: существующий долг пользователя в долларах США.
  4. Доход: годовой доход пользователя в долларах США.
  5. Годы занятости: количество лет работы пользователя.

Мы будем использовать алгоритм Linear Learner, предоставленный Amazon SageMaker, для построения модели логистической регрессии. Подробнее об этом алгоритме можно прочитать здесь.

Обучение и развертывание моделей

Чтобы обучить модель логистической регрессии на SageMaker, мы должны предоставить некоторые параметры, включая тип алгоритма (регрессор против классификатора), количество предикторов и так далее. Указание этих параметров будет выглядеть так:

После создания обучающей модели она помещается в контейнер перед размещением в конечной точке API. Модель может быть размещена с использованием нескольких строк кода Python, как показано ниже:

Теперь, когда модель прогнозирования активна, мы протестируем модель на точность прогноза, используя набор тестовых данных.

Это привело к созданию модели прогнозирования с точностью 75% при предварительном отборе потенциальных клиентов. После настройки чат-бота мы будем использовать эту размещенную модель для прогнозирования в реальном времени.

Примечание. Точность модели в первую очередь зависит от нескольких ключевых факторов, включая количество обучающих наблюдений и тип используемой модели прогнозирования. Мы получили точность модели 75% с помощью почти 700 наблюдений и с помощью простой модели логистической регрессии. Если бы у нас было больше наблюдений или использовали бы древовидную или сетевую модель, точность модели увеличилась бы.

Создание и публикация чат-бота

Теперь, когда у нас есть готовая модель прогнозирования, мы можем приступить к созданию чат-бота на Amazon Lex. Используя методы глубокого обучения, Amazon Lex выполняет обработку и понимание естественного языка для общения с пользователями. Для целей этого блога давайте создадим текстового чат-бота, способного отвечать на следующие два вопроса / интересы пользователей:

  • Средний кредитный рейтинг, необходимый для утверждения кредитной карты (отчетная задача)
  • Будет ли пользователь предварительно претендовать на кредитную карту (задача прогнозирования)

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

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

После настройки чат-бота его необходимо построить и развернуть на платформе. Amazon Lex позволяет развертывать чат-ботов на:

  • Facebook Посланник
  • Слабина
  • Кик
  • Twilo SMS

Для целей этого блога мы развернем чат-бота в Slack. Чтобы сделать то же самое, нам нужно сначала создать приложение в Slack, собрать учетные данные приложения и связать их с чат-ботом, а также предоставить URL-адрес обратного вызова чат-бота для приложения Slack. Более подробную информацию об этом можно найти здесь.

Подключение чат-бота к модели данных и прогнозирования

Теперь, когда у нас есть рабочий интерфейс для чат-бота и размещенная модель прогнозирования на основе SageMaker, следующая задача - соединить их вместе. Кроме того, чат-бот должен иметь возможность запрашивать исходные данные для задач отчетности. Для выполнения обеих этих задач мы будем использовать AWS Lambda.

Lambda может программно обращаться к модели SageMaker и взаимодействовать с данными, хранящимися в корзине S3, через Amazon Athena. Для функции AWS Lambda, написанной на Python, библиотека boto3 обеспечивает необходимую логистику для взаимодействия с различными сервисами AWS.

Например, функция Lambda на основе Python может взаимодействовать с данными, хранящимися в S3, через Amazon Athena следующим образом:

Точно так же размещенная модель SageMaker может быть доступна для прогнозов в реальном времени через AWS Lambda, как показано ниже:

После настройки функции Lambda ее необходимо снова подключить к чат-боту, чтобы выполнить намерения пользователей в разделе «Выполнение» в «Intent», как показано ниже.

На этом процесс интеграции завершен. Нам нужно будет сохранить намерения и снова опубликовать чат-бота в Slack, чтобы отразить последние изменения.

Функциональная демонстрация чат-бота

Теперь, когда у нас есть полностью функциональный и умный чат-бот, давайте попробуем его.

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

Ответы автоматизируются через приложение - credit_card_approval. Но для пользователя это печальный день. Запрос пользователя на одобрение кредитной карты был отклонен.

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

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

Изображение большего размера

Благодаря передовым исследованиям и разработкам в области искусственного интеллекта пользователям сложно отличить чат-ботов от своих собратьев-людей. Действуя в качестве тесного связующего звена между пользователями и данными, современные чат-боты теперь могут играть роль лиц, принимающих бизнес-решения. Это потенциально может освободить много времени от многочисленных агентов по обслуживанию клиентов, которые теперь могут сосредоточиться на обслуживании клиентов с более серьезными проблемами / вопросами. Поскольку данные хранятся на облачной платформе, такой как AWS, теперь можно разрабатывать и развертывать этих «умных чат-ботов» через бессерверную инфраструктуру. Будем надеяться, что тенденция использования автоматизированных решений сохранится и в ближайшие годы, что повысит продуктивность рабочего времени.