Предыстория: redBus получает жалобы от клиентов, в основном, на возврат средств, отмену, запросы оператора и т. д. Процесс классификации этих писем и перенаправления их соответствующим агентам / очереди обслуживания клиентов становится огромной задачей. Это также увеличивается в пиковые дни (особенно в праздничные и выходные дни).
Чтобы обойти (классифицировать и пометить) этот процесс, компания RedBus пошла по пути машинного обучения. У нас были данные, помеченные вручную, которые послужили базой знаний (обучающим набором) для системы машинного обучения. Мы решили создать систему, которая классифицирует каждое письмо по категории из набора предопределенных категорий. Наша система CRM (мы используем SalesForce) будет автоматически перенаправлять входящие электронные письма соответствующему руководителю службы поддержки клиентов на основе классификации, выполненной системой машинного обучения.
Технология:
Библиотека машинного обучения: Scikit-Learn
Алгоритм, использованный для классификации: полиномиальный наивный байесовский
Оболочка (для предоставления классификации в качестве API): FLASK
Сервер развертывания: Linux.
Для векторизации входных данных используется векторизатор TF-IDF, а для построения системы классификации используется полиномиальная наивная байесовская модель.
Анализ после тренировки:
Первоначально было рассмотрено 7 категорий. Точность составляла около 70%. Поскольку были рассмотрены только 4 категории, другие категории были исключены, и система была переобучена только с 4 категориями. Точность составила 82%. Изучая точность, мы обнаружили, что 2 категории имели точность более 90%, а 2 категории имели меньшую точность. В первую очередь это произошло из-за наложения функций. Чаще всего отмена билета / автобуса и возврат денег идут вместе.
Конечный продукт: модель классификации предоставляется через API. API был интегрирован в систему Salesforce, которая попадает в API для каждого входящего электронного письма.
По продукту:
- Руководитель службы поддержки клиентов, который изучает проблему, может проверить, правильно ли классифицирует электронную почту система классификаторов. Он / она может дать отзыв о классификаторе. Это послужит дополнительным вводом для обучения системы и еще больше повысит точность.
- Изучая точность, мы обнаружили, что были определенные документы, с которыми система работала лучше (в результате человеческой ошибки). Этот отчет был отправлен в службу поддержки клиентов в качестве дополнительного материала для их внутреннего обучения (перекрестная проверка).
Реализация:
Процесс развертывания моделей в restAPI выглядит следующим образом:
- Экспорт моделей - JobLib, Pickl
- Скрипт Python для загрузки моделей и классификации [JobLib, Pickle для загрузки экспортированных моделей]
- Веб-приложение на Python для обслуживания запросов и ответов [Flask]
- Контейнер WSGI для обслуживания приложения
- Супервизор для запуска и запуска серверного процесса
Давайте рассмотрим шаги более подробно. Я предполагаю, что вы экспериментировали с построением моделей.
Шаг 1. Экспорт моделей: экспортируйте модель и векторизатор, как показано ниже.
Шаг 2. Создайте скрипт для загрузки моделей.
Шаг 3. Добавьте функцию python, которая будет выполнять классификацию с учетом введенного текста.
Шаг 4. Представьте Flask для обслуживания классификации через конечную точку API.
Оберните функцию классификации с помощью flask, чтобы она могла обслуживать запросы и отвечать соответствующим образом. Flask - это легкий веб-сервер для Python.
Это вернет прогноз при запросе с помощью метода HTTP Post.
Шаг 5: WSGI
Используйте WSGI для обслуживания приложения Flask
Если наше приложение flask называется prediction.py, тогда файл python wsgi должен выглядеть, как показано ниже. Назовите это wsgi.py. Поместите файл в тот же каталог, что и файл python приложения Flask.
Используйте Gunicorn и Supervisor, чтобы запустить сервер
Создайте конфигурацию супервизора в /etc/supervisor/config.d/your_config.conf
Выполните следующие команды
$ sudo supervisorctl reread
$ sudo supervisorctl update
$ sudo supervisorctl start your_program_name
Доступ к нему с помощью https://ip:port/classifyText with a body as well.
Тело запроса: {«input_text»: «Команда забила больше голов. Но в конце концов проиграл »}
Ответ: {"closed_output": "Sport"}
Вот как мы развернули модель машинного обучения в сценариях использования сервера в реальном времени.
Что еще нужно сделать:
- Попробуйте Word2Vec, чтобы узнать, есть ли повышение точности
- Решить проблему дисбаланса классов, когда есть несколько категорий с очень скудными функциями или очень мало учебных документов по сравнению с другими категориями.