AutoModel и AutoTokenizer

Знакомимся с универсальными классами, которые загружают любую модель по её имени.

Auto-классы (AutoModel, AutoTokenizer) — фабрики, которые по идентификатору модели сами определяют нужный класс и загружают совместимые веса и токенизатор.

Зачем нужны Auto-классы

Архитектур десятки: BERT, GPT, T5, RoBERTa и так далее. Если бы для каждой нужно было помнить свой класс (BertModel, GPT2Model...), код был бы хрупким. Auto-классы решают это: вы пишете AutoModel.from_pretrained("имя"), а библиотека читает config.json модели и подставляет правильный класс автоматически.

from transformers import AutoModel, AutoTokenizer

name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(name)
model = AutoModel.from_pretrained(name)

inputs = tokenizer("Hello world", return_tensors="pt")
outputs = model(**inputs)
print(outputs.last_hidden_state.shape)
# torch.Size([1, 4, 768])

Семейство Auto-классов под задачу

Голый AutoModel возвращает «сырые» представления (hidden states). Для конкретных задач есть специализированные классы с готовой «головой»:

КлассЗадача
AutoModelForSequenceClassificationклассификация текста
AutoModelForTokenClassificationNER
AutoModelForQuestionAnsweringextractive QA
AutoModelForCausalLMгенерация текста
AutoModelForSeq2SeqLMперевод, суммаризация

Связь с pipeline

Внутри pipeline() как раз и использует Auto-классы. Pipeline — высокий уровень (просто и быстро), Auto-классы — средний (больше контроля). Когда нужно вмешаться в процесс (своя постобработка, доступ к логитам), переходят с pipeline на Auto-классы.

Как работает под капотом

Метод from_pretrained скачивает config.json, читает поле architectures, по нему находит конкретный класс модели в библиотеке, создаёт его и загружает в него веса из safetensors. Параметр return_tensors="pt" просит токенизатор вернуть тензоры PyTorch (можно "tf" для TensorFlow). Связь с курсом PyTorch прямая: модель — это nn.Module, а её выход — обычные тензоры.

Частые ошибки

  • Брать голый AutoModel там, где нужна голова. Для классификации нужен AutoModelForSequenceClassification, иначе не будет слоя классов.
  • Забыть return_tensors. Без него токенизатор вернёт списки, а не тензоры, и модель упадёт.
  • Грузить токенизатор и модель из разных имён. Должны совпадать.

Итог

  • Auto-классы загружают правильную модель по идентификатору автоматически.
  • Голый AutoModel даёт сырые представления; AutoModelFor... — готовую голову под задачу.
  • Pipeline внутри использует Auto-классы.
  • return_tensors="pt" возвращает тензоры PyTorch.
Проверьте себя
1. Что делает AutoModel.from_pretrained?
AОбучает модель с нуля
BПо идентификатору сам определяет класс и загружает совместимые веса
CТолько скачивает токенизатор
DСоздаёт случайную модель
2. Какой класс взять для классификации текста?
AAutoModel
BAutoModelForSequenceClassification
CAutoTokenizer
DAutoModelForCausalLM
3. Что возвращает голый AutoModel без головы под задачу?
AГотовые метки классов
BСырые представления (hidden states)
CПеревод текста
DСписок токенов