Анализ эмоционального окраса диалогов
active,
Founded 2 years 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

Our website uses cookies, including web analytics services. By using the website, you consent to the processing of personal data using cookies. You can find out more about the processing of personal data in the Privacy policy