Может ли голый BERT быть хуже, чем классическое машинное обучение?

«Может ли голый BERT быть хуже, чем классическое машинное обучение?» — вопрос из категории NLP и трансформеры, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, в ряде сценариев fine-tuned BERT может проигрывать более простым классическим моделям машинного обучения. В моей практике это происходило по нескольким причинам:

  1. Небольшие объемы данных: BERT и другие трансформеры требуют значительных данных для эффективного дообучения (fine-tuning). На проекте с несколькими тысячами размеченных текстов для классификации отзывов логистическая регрессия на TF-IDF признаках показала accuracy 89%, в то время как дообученный bert-base-uncased дал только 85% и сильнее переобучался.
  2. Вычислительная сложность: Обучение и инференс BERT требуют GPU и времени. Для продакшн-системы, где нужны предсказания за миллисекунды, легковесная модель на основе scikit-learn часто оказывается более практичным выбором.
  3. Простые задачи: Для задач вроде определения тональности (positive/negative) или фильтрации спама, где важны ключевые слова и их частота, сложность BERT может быть избыточна.

Пример сравнения подходов:

# Классический пайплайн (быстро, эффективно на малых данных)
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

pipe = make_pipeline(TfidfVectorizer(max_features=5000),
                     LogisticRegression(C=1.0))
pipe.fit(train_texts, train_labels) # Обучение за секунды на CPU
accuracy = pipe.score(test_texts, test_labels)

Поэтому мой стандартный workflow — сначала построить сильный baseline на классических методах (TF-IDF + Logistic Regression/SVM), а уже потом, если точности недостаточно и данных много, экспериментировать с трансформерами.