Реализовать модель, которая бы эффективным образом предсказывала классы для данных из Toxic Comment Classification Challenge
Нами было предложена классическая архитектура для подобных задач в качестве baseline:
- Предобученная модель google-bert/bert-base-uncased в качестве энкодера
- Pooling [batch_size, seq_length, hidden_size] -> [batch_size, hidden_size]
- 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 - обучение моделей в зависимости от конфига и архитектуры.
-
Установить все необходимые зависимости с помощью poetry
poetry install
-
Запустить процесс обучения
poetry run <your_python> multilabel/train.py --config-path configs/multilabel.json
-
Установить все необходимые зависимости с помощью poetry, если не запускался предыдущий шаг
poetry install
-
Запустить процесс обучения
poetry run <your_python> multilabel/train.py --config-path configs/multilabel_average.json
-
Создать архив с результатами обучения из
.aimtar -czvf aim_repo.tar.gz .aim
-
Запустить docker compose
docker compose up -d
-
Перейти по
localhost:7860
Обучение производилось на Nvida Tesla A100 40GB
Метрики можно посмотреть на hugging face spaces и с помощью гайда выше.
| metric | value |
|---|---|
| eval_aucroc_macro | 0.98977888 |
| eval_macro_f1 | 0.65930855 |
| eval_micro_f1 | 0.78948092 |
| train_loss | 0.03557318 |
| metric | value |
|---|---|
| eval_aucroc_macro | 0.98983848 |
| eval_macro_f1 | 0.6294353 |
| eval_micro_f1 | 0.78685367 |
| train_loss | 0.03070794 |
Синим цветом отмечены метрики average, а зеленым - baseline
Из графиков можно отметить, что average и baseline модели имели отличия в метриках во время обучения, но к концу обучения они были минимальны, но с перевесом в сторону baseline.
В заключение можно сказать, что наша гипотеза себя не оправдала - различия baseline и average моделей не оказались значительными, average, наоборот ухудшает результат.


