Анализ эмоционального окраса диалогов
active,
Founded 19 months ago

Проект по распознаванию эмоций в тексте, выполнен в рамках My First Data Project для поступления в ИТМО.

NLPBertEmotion ClassificationMulticlass classificatiomMFDP2ITMO

Краткое введение

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

  1. мы дообучаем ML-модели на данных заказчика, если они есть,
  2. развертываем модель в облаке
  3. предоставляем доступ к API модели

Контекст и проблематика

Такой сервис может облегчить решение задач сегментации клиентского негатива и оценку динамики тональности диалогов.

Данные

Итоговый датасет является объединением нескольких наборов данных: "cedr", "ok_ml_cup", "dairai_emotions" и "emotions_go". Некоторые из них - "dairai_emotions" и "emotions_go" - изначально были на английском языке и были переведены на русский с помощью API Yandex Translate. Размер датасета: ~100к пар предложение/эмоция.

Методология

Логирование в MLFlow

Все артефакты, возникающие при обучении моделей (чекпоинты модели, метрики, гиперпараметры) логируются с использованием MLflow. Для развертывания MLflow в проекте используется четвертый сценарий. MLflow Tracking Server развертывается на Yandex Cloud, а для хранения артефактов используется хранилище S3. Для хранения сущностей (метрик) используется база данных PostgreSQL. Обратите внимание, что MLflow не включает модуль авторизации, поэтому в проекте была реализована авторизация через HTTP Basic authentication.

Учетные данные для авторизации, шифрование git-crypt

Переменные окружения с учетными данными для авторизации в MLflow хранятся в файле .env. Для версионирования и хранения данных в проекте используется DVC S3 с s3 бакетом на VK Cloud. Учетные данные для доступа к хранилищу S3 через DVC находятся в .dvc/config. Файлы с учетными данными (.env и .dvc/config) зашифрованы с использованием git-crypt.

Обучение на GPU

Модели обучались на GPU, поэтому в качестве базового образа для Docker используется образ 11.7.0-cudnn8-devel-ubuntu20.04. Для использования gpu в докер-контейнере требуется установка nvidia-container-toolkit.

Конфиг на основе YACS

Все настраиваемые параметры для обучения модели находятся в src/configs/params.yaml. Для упрощения работы с конфигурацией используется YACS.

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

Дообучал различные bert модели по следующей стратегии

  1. CLS токен.
  2. Линейный слой для файнтюна.
  3. Не больше 5-6 эпох.
  4. Небольшой размер батча 16-32.
  5. Маленький learning rate.
  6. Подбор гиперпараметров 3-5.

Модели, которые были дообучены:

Группа моделейНазвание моделей
Small Bertscointegrated/rubert-tiny, cointegrated/rubert-tiny2
Multilingual Berts'cointegrated/LaBSE-en-ru', 'sentence-transformers/LaBSE', 'bert-base-multilingual-cased'
DeepPavlov Berts'DeepPavlov/rubert-base-cased-sentence', 'DeepPavlov/rubert-base-cased-conversational', 'DeepPavlov/distilrubert-tiny-cased-conversational', 'DeepPavlov/distilrubert-base-cased-conversational'
Sber Berts'sberbank-ai/sbert_large_nlu_ru', 'sberbank-ai/sbert_large_mt_nlu_ru'

Результаты

Лучше всего показала себя модель sentence-transformers/LaBSE. Метрики:
f1: 0.832 accuracy: 0.896

Основные проблемы и выводы по обучению:

  • Дисбаланс в данных, классы с негативными эмоциями доминируют над позитивными.
  • Аугментация с помощью парафразера добавляет 1-2% (в зависимости от модели) к метрикам.
  • Хорошо помогает подбор lr и scheduler.

Деплой модели и веб-интерфейс для инференса

В качестве бэкенда использовал FastAPI, для фронтенда использовал фреймворк gradio

Планы на будущее

  • Поиск новых источников данных
  • Дообучение и тестирование различных моделей
  • Multi-label классификация с сентимент метками
  • Продвинутые техники дообучения bert моделей

Контакты

Телеграм @rhythm

Cookies help us deliver our services. By using our services, you agree to our use of cookies.