Предобучение, дообучение и экосистема
Главный сдвиг современного 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 сделали готовые модели доступными в пару строк.