Вопрос или проблема
Я обучил мультимодальный текстовый классификатор с использованием fasttext. У меня очень низкий показатель по одному из классов. Вот результаты метрик для каждого класса на тестовых данных:
precision recall f1-score support
class1 0.66 0.68 0.67 1331
class2 0.72 0.76 0.74 2297
class3 0.50 0.32 0.39 410
class4 0.62 0.60 0.61 1019
accuracy 0.67 5057
macro avg 0.62 0.59 0.60 5057
weighted avg 0.66 0.67 0.67 5057
Как видите, он плохо работает на классе ‘class3’.
Данные были несбалансированными, класс 3 был самым маленьким. Я очистил текстовые данные перед обучением. Но все равно я получаю плохие результаты. Что я могу сделать, чтобы улучшить это?
Вы можете попробовать несколько вещей. Во-первых, вы можете оценить эти метрики и понять, как ваша модель работает на разных подсэмплах ваших данных, чтобы определить, является ли это действительно проблемой или это просто производительность модели по этому классу на разных образцах ваших данных (см. здесь, здесь и, наконец, здесь).
Следующее, что вы могли бы рассмотреть, это создание весов классов для проведения обучения с учетом затрат (см. здесь). В основном, это говорит модели придавать определенный вес неправильной классификации этого класса.
Другие предложения включают увеличением выборки или уменьшением выборки вашего меньшинства класса. Однако это следует делать с осторожностью. Если вероятность вашего меньшинства класса на производстве действительно является меньшинством, это может исказить предсказанные вероятности, что приведет к плохой работе классификатора в производственной среде. Вам следует ознакомиться с этим замечательным постом. Это, вероятно, лучший пост, который я видел по этой теме. Прочтите всю тему.
Ответ или решение
Если вы заметили, что метрики для одного из классов в многоклассовой классификации очень низкие (в вашем случае, для класса ‘class3’), существует несколько стратегий, чтобы улучшить ситуацию. Мы рассмотрим ряд подходов:
1. Анализ и бутстрэпирование метрик
Прежде всего, стоит провести анализ полученных метрик более подробно. Используйте бутстрэппинг для оценки устойчивости производительности модели на разных подвыборках вашего набора данных. Это поможет вам понять, действительно ли ваш алгоритм стабильно плохо работает с классом ‘class3’ или это лишь случайное отклонение. Бутстрэппинг поможет получить доверительные интервалы для метрик, что даст вам полное представление о характеристиках модели.
2. Введение весов классов
Если ваш класс ‘class3’ является меньшинством, может быть полезно внедрить взвешивание классов для обработки ошибок классификации. Присвоение больших весов ошибкам, связанным с классом ‘class3’, будет подталкивать модель к тому, чтобы уделять этому классу больше внимания во время обучения. Это может значительно улучшить метрики точности, полноты и F1 для этого класса. Используйте такие библиотеки, как scikit-learn
, которые позволяют легко работать с взвешиванием классов.
3. Увеличение выборки (Upsampling) и уменьшение (Downsampling)
Другим методом является изменение распределения данных через увеличение или уменьшение выборки классов. Упрощение класса ‘class3’ может помочь модели лучше его выучить, однако будьте осторожны с этой стратегией. Если в реальных условиях ваш класс ‘class3’ действительно отсутствует в значительных количествах, это может привести к искажению предсказанных вероятностей. Понимание статистических основ этого процесса поможет избежать негативных последствий.
4. Использование методов обработки дисбаланса данных
Альтернативные подходы включают использование методов, специально разработанных для работы с несбалансированными данными, таких как SMOTE (Synthetic Minority Over-sampling Technique) или ADASYN (Adaptive Synthetic Sampling). Эти методы создают синтетические примеры для меньшинства и могут помочь улучшить производительность модели.
5. Обогащение данных
Если у вас есть возможность доступа к большим объемам данных, рассмотрите возможность их использования для наполнения вашего набора данным. Даже если они будут частично помимо вашей целевой задачи, они могут помочь улучшить общее понимание и классификацию текста.
6. Пробуйте различные алгоритмы
Наконец, не забывайте об экспериментировании с другими алгоритмами классификации. Иногда использование более сложных моделей, таких как градиентный бустинг или нейронные сети, может привести к улучшению результатов на минорных классах благодаря их способности захватывать более сложные паттерны в данных.
Заключение
Работа с несбалансированными классами требует тщательно продуманных подходов и стратегий. Экспериментируйте с предложенными методами, анализируйте полученные результаты и выбирайте наиболее подходящие для вашей задачи. Постоянное тестирование и улучшение модели поможет добиться значительных результатов в качестве предсказаний классifikатора для каждого из классов, включая ‘class3’.