Skip to content

hexzedels/advanced-nlp-course

Repository files navigation

Эффективный Multilabel классификатор

Описание задачи

Реализовать модель, которая бы эффективным образом предсказывала классы для данных из Toxic Comment Classification Challenge

Описание решения

Нами было предложена классическая архитектура для подобных задач в качестве baseline:

  1. Предобученная модель google-bert/bert-base-uncased в качестве энкодера
  2. Pooling [batch_size, seq_length, hidden_size] -> [batch_size, hidden_size]
  3. Head [BATCH x HIDDEN_SIZE] -> tanh -> [BATCH x NUM_CLASSES]

Гипотеза

Использование среднего от всех токенов у pooler'а модели, а не только [CLS] токена улучшит результаты.

Обучение

config.py - структура конфига и его валидация.

const.py - константы с именем модели энкодера и классов.

dataset.py - обработка датасета.

export_onnx.py - выгрузка моделей в формате onnx в зависимости от параметра --avg.

inference.py - предсказание для тестового предложения на основе модели из выгруженного onnx.

model.py - основной код двух моделей: MultiLabelPoolerWithHead и MultiLabelAvgPoolerWithHead.

train.py - обучение моделей в зависимости от конфига и архитектуры.

Обучение baseline модели

  1. Установить все необходимые зависимости с помощью poetry

    poetry install
  2. Запустить процесс обучения

    poetry run <your_python> multilabel/train.py --config-path configs/multilabel.json

Обучение average модели

  1. Установить все необходимые зависимости с помощью poetry, если не запускался предыдущий шаг

    poetry install
  2. Запустить процесс обучения

    poetry run <your_python> multilabel/train.py --config-path configs/multilabel_average.json

Выгрузка и просмотр результатов

  1. Создать архив с результатами обучения из .aim

    tar -czvf aim_repo.tar.gz .aim
  2. Запустить docker compose

    docker compose up -d
  3. Перейти по localhost:7860

Результаты

Обучение производилось на Nvida Tesla A100 40GB

Метрики можно посмотреть на hugging face spaces и с помощью гайда выше.

Метрики baseline модели

metric value
eval_aucroc_macro 0.98977888
eval_macro_f1 0.65930855
eval_micro_f1 0.78948092
train_loss 0.03557318

baseline metrics

Метрики average модели

metric value
eval_aucroc_macro 0.98983848
eval_macro_f1 0.6294353
eval_micro_f1 0.78685367
train_loss 0.03070794

average metrics

Сравнение моделей

Синим цветом отмечены метрики average, а зеленым - baseline

Из графиков можно отметить, что average и baseline модели имели отличия в метриках во время обучения, но к концу обучения они были минимальны, но с перевесом в сторону baseline.

metrics compare

Заключение

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors