Hugging Face Transformers: Пошаговое введение

Transformers — это библиотека от Hugging Face, которая позволяет легко использовать мощные языковые модели вроде BERT, GPT, RoBERTa и многих других. Она содержит как сами модели, так и удобные инструменты для инференса, обучения и обработки текста.

В этом материале:

  • Что такое pipeline и как быстро сделать инференс
  • Как загружать модели и токенизаторы вручную
  • Как обучить модель под свою задачу (fine-tuning)
  • Как сохранить и использовать свою модель

1. Быстрый старт: pipeline

Если нужно просто попробовать модель — используем pipeline:

from transformers import pipeline

classifier = pipeline("text-classification")
result = classifier("I love this phone!")
print(result)

Этот код скачает предобученную модель (distilbert-base-uncased-finetuned-sst-2-english) и вернёт метку (POSITIVE) с вероятностью.


2. Токенизация и модель вручную

Если нужно больше контроля — используем токенизатор и модель напрямую:

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

model_name = "distilbert-base-uncased-finetuned-sst-2-english"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

inputs = tokenizer("This is awesome!", return_tensors="pt")
with torch.no_grad():
    outputs = model(**inputs)
    probs = torch.softmax(outputs.logits, dim=1)

print(probs)

AutoTokenizer и AutoModel* — универсальные загрузчики, которые подбирают нужный класс модели автоматически.


3. Как обучить модель под себя (fine-tuning)

Пример: классификация заголовков объявлений

У вас есть файл CSV с колонками text и label. Хотим научить модель предсказывать категорию объявления.

from transformers import Trainer, TrainingArguments, AutoModelForSequenceClassification
from datasets import load_dataset

# Загружаем датасет
dataset = load_dataset("csv", data_files="ads.csv")

# Токенизация
tokenizer = AutoTokenizer.from_pretrained(model_name)

def tokenize(batch):
    return tokenizer(batch["text"], truncation=True, padding=True)

dataset = dataset.map(tokenize, batched=True)

# Модель
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=3)

# Аргументы обучения
args = TrainingArguments(output_dir="./results", per_device_train_batch_size=8, num_train_epochs=3)

# Trainer
trainer = Trainer(model=model, args=args, train_dataset=dataset["train"])
trainer.train()

Этот код обучит модель на ваших данных. Она будет сохраняться в ./results.


4. Как сохранить и загрузить свою модель

После обучения можно сохранить модель и токенизатор:

model.save_pretrained("my-model")
tokenizer.save_pretrained("my-model")

Позже можно загрузить её так же, как любую другую:

model = AutoModelForSequenceClassification.from_pretrained("my-model")
tokenizer = AutoTokenizer.from_pretrained("my-model")

Частые вопросы

Что делает токенизатор? Преобразует текст в числа (токены), которые понимает модель.

Что делает модель? Получает токены на вход и возвращает результат — например, класс или продолжение текста.

Можно ли дообучить GPT? Да, но GPT-модели — генераторы, а не классификаторы. Используют AutoModelForCausalLM и другие классы.

Чем отличается pipeline и Trainer? pipeline — быстрый способ попробовать модель. Trainer — для обучения.


Transformers — это удобный способ использовать сильные языковые модели без глубокой математики. Начать можно с pipeline, а дальше шаг за шагом переходить к кастомизации и обучению.