Можно ли использовать BERT вместе с классификатором для задачи классификации?
Что проверяют
Понимаете ли вы два разных способа использовать BERT для классификации и когда какой выбирать. Следом обычно спрашивают, что брать на выходе модели, [CLS] или усреднение по токенам, и что делать с текстами длиннее лимита.
Как отвечать
Да, это стандартная схема: BERT работает энкодером, который превращает текст в векторы, а классификатор поверх решает задачу. Вариантов два:
- извлечение признаков: BERT заморожен, из него берут эмбеддинг текста и обучают на нём логистическую регрессию, SVM или бустинг. Быстро, дёшево, хорошо работает при небольшой разметке. Для эмбеддингов лучше брать модели, обученные именно на сходство предложений, например из
sentence-transformers: сырой[CLS]у BERT без дообучения даёт посредственные векторы, усреднение по токенам обычно лучше; - дообучение (fine-tuning): поверх пулинга ставится линейный слой, и вся сеть обучается целиком. В
transformersэтоAutoModelForSequenceClassificationс параметромnum_labels. Типичные настройки из оригинальной статьи: learning rate от2e-5до5e-5, 2-4 эпохи, Adam с warmup. Качество обычно заметно выше, но нужна GPU и контроль переобучения.
Дальше практика. Лимит BERT 512 токенов, длинные тексты обрезают, берут начало и конец или делят на куски и агрегируют предсказания. Для русского языка берут ruBERT-модели или мультиязычные. Для многометочной задачи вместо softmax нужны сигмоиды и BCEWithLogitsLoss, в transformers это problem_type="multi_label_classification". Из более новых энкодеров стоит знать DeBERTa-v3 и ModernBERT с контекстом 8192 токена.
Хороший ответ заканчивается сравнением с бейзлайнами: TF-IDF с логистической регрессией и zero-shot через LLM. Иногда BERT выигрывает у них немного, а в эксплуатации стоит дороже.
Где спотыкаются
Называют softmax «полносвязным слоем». Слой линейный, а softmax в PyTorch уже внутри CrossEntropyLoss: если добавить его в модель, он применится дважды.
Дообучают с learning rate 1e-3, как обычную сеть с нуля. Предобученные веса разрушаются за пару эпох.
Делят данные случайно, не убрав дубли и почти дубли. Одинаковые тексты попадают и в обучение, и в тест, и метрика получается завышенной.