Предобучение, дообучение и экосистема

Главный сдвиг современного NLP — не отдельные модели, а парадигма: обучить большую модель один раз на всём интернете, а потом дёшево приспосабливать под любую задачу.

Перенос обучения (transfer learning) — использование модели, предобученной на огромном общем корпусе, как основы для решения конкретной задачи через дообучение на малых данных.

Две стадии: предобучение и дообучение

Раньше под каждую задачу обучали модель с нуля, и для этого нужно было много размеченных данных. Трансформеры сменили подход на двухстадийный.

  • Предобучение (pre-training): огромную модель учат на гигантском неразмеченном корпусе общей задаче — предсказывать слова (GPT) или восстанавливать маскированные (BERT). Дорого, делается один раз, требует колоссальных ресурсов.
  • Дообучение (fine-tuning): готовую модель доучивают на маленьком размеченном наборе под конкретную задачу (классификация отзывов, NER). Дёшево, быстро, нужно мало данных.

Аналогия: предобучение — это общее образование (модель «прочитала интернет» и знает язык), дообучение — короткие курсы под конкретную работу. Не нужно каждый раз растить специалиста с нуля.

Почему перенос работает

Предобученная модель уже знает грамматику, факты, смысл слов, типичные связи. Эти знания полезны почти для любой текстовой задачи. Дообучение лишь слегка «настраивает» их под цель. Поэтому fine-tuning требует на порядки меньше данных, чем обучение с нуля, — иногда хватает пары тысяч примеров там, где раньше нужны были миллионы.

Обучение с нуля:        много данных + много вычислений на КАЖДУЮ задачу
Предобучение + fine-tune: дорогое предобучение ОДИН раз,
                          дальше дёшево под любую задачу

Экосистема: Hugging Face

Раздавать и использовать предобученные модели помогает экосистема, в первую очередь Hugging Face — хаб с десятками тысяч готовых моделей и библиотека transformers. Несколько строк — и готовая модель решает задачу. Это код для ознакомления (он использует стороннюю библиотеку и в браузере не запустится — поэтому помечен как нерабочий для чтения).

from transformers import pipeline

# готовый классификатор тональности — без обучения
clf = pipeline("sentiment-analysis")
print(clf("Этот фильм мне очень понравился!"))
# -> [{'label': 'POSITIVE', 'score': 0.99}]

За этими тремя строками — предобученный трансформер, токенизатор и веса, скачанные с хаба. То, что десять лет назад было исследовательским проектом, сегодня — три строки кода. В этом и сила экосистемы: она сделала мощный NLP доступным каждому разработчику.

Другие способы приспособить модель

  • Full fine-tuning: доучиваем все веса модели — точно, но дорого.
  • Параметро-эффективное дообучение (LoRA и др.): доучиваем лишь малую добавку весов — дёшево, популярно для больших моделей.
  • Промптинг без обучения: большим моделям (GPT) часто достаточно сформулировать задачу в тексте запроса, вообще не дообучая, — об этом будет отдельный курс.

Итог

  • Современный NLP — это парадигма «предобучение → дообучение».
  • Предобучение дорогое и одноразовое; дообучение дёшево и под задачу.
  • Перенос работает, потому что предобученная модель уже знает язык.
  • Hugging Face и transformers сделали готовые модели доступными в пару строк.
Проверьте себя
1. В чём суть переноса обучения (transfer learning) в NLP?
AОбучать новую модель с нуля для каждой задачи
BВзять модель, предобученную на огромном корпусе, и дообучить под конкретную задачу на малых данных
CПереводить модель с одного языка на другой
DКопировать данные между серверами
2. Почему fine-tuning требует гораздо меньше данных, чем обучение с нуля?
AПотому что данные сжимают
BПотому что предобученная модель уже знает язык, грамматику и факты — её нужно лишь слегка настроить
CПотому что fine-tuning не использует данные вообще
DПотому что задача всегда проще
3. Что такое Hugging Face в экосистеме NLP?
AАлгоритм токенизации
BХаб готовых предобученных моделей и библиотека transformers для их использования
CМетрика качества классификации
DТип нейросети
Поддержать проект