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 | классификация текста |
AutoModelForTokenClassification | NER |
AutoModelForQuestionAnswering | extractive 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.