датасетов.
Все датасеты небольшие (от 50 до 200 сэмплов примерно, некоторые даже меньше), число классов варьируется и присутствует довольно сильный дизбаланс по классам.
Пробовал следующие подходы: различные алгоритмы классификации (log reg, svm, random forest, naive bayes, k neighbours) поверх различных эмбеддингов (tf idf, fasttext, rubert-tiny v2), но выбить достаточно высокое качество не получается (либо в целом низкие метрики, либо сильно проседают на некоторых классах).
Подскажите, пожалуйста, что ещё можно попробовать?
1) Аугментировать данные (как именно - зависит от природы текстов и классов; некоторые надежные способы - backtranslation, случайные изменения в орфографии, и склеивания текстов; можно поиграть с заменой слов на синонимы), чтобы увеличить число сэмплов на класс и снизить дисбаланс. 2) Попробовать дообучить какую-то BERT-подобную модель целиком (но с очень маленьким learning rate и с небольшим числом эпох, чтобы не слишком переобучиться). Если датасеты и классы схожи, можно попробовать дообучить одну модель сразу на всех данных, надеясь, что это скомпенсирует их маленький размер.
Спасибо большое за советы! 1) аугментации попробую 2) пробовал тот же rubert tiny 2 обучать целиком на одном из датасетов на 200 с небольшим текстов (lr 1e5, 2 эпохи), но получил accuracy, precision, recall в районе 0.3. Идея с одной большой моделью интересная, но датасеты и классы довольно сильно отличаются :(
Отдельный классификатор под каждый класс, если их очень много, как будто бы не очень хорошая идея. Может, как-то укрупнить можно? Допустим, одна большая модель на 200 классов, ещё одна на 300 и тд. Так, чтобы все классы покрылись небольшим количеством моделей. Можно в сеттинге иерархической классификации. Тогда выразительной способности отдельно взятой модели меньше потребуется, чем при покрытии всех классов одной моделью. И попробуйте ruRoberta-large вместо rubert-tiny2, она значительно больше и лучше подходит для сложных задач классификации. Ещё вариант - посмотрите metric learning.
Обсуждают сегодня