pipeline(): самый быстрый способ применить модель
Знакомимся с главным инструментом для быстрого старта — функцией pipeline().
pipeline() — высокоуровневая функция библиотеки
transformers, которая объединяет токенизацию, прогон через модель и постобработку в один вызов.
Зачем нужен pipeline
Чтобы применить модель вручную, нужно: загрузить токенизатор, превратить текст в числа, прогнать их через модель, получить логиты и преобразовать их в человекочитаемый ответ. pipeline() делает всё это за вас. Достаточно указать задачу, и библиотека сама подберёт подходящую модель по умолчанию.
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
result = classifier("Сервис был ужасным, никогда не вернусь")
print(result)
# [{'label': 'NEGATIVE', 'score': 0.998}]Три шага внутри
Любой pipeline выполняет три этапа:
текст --> [токенизатор] --> числа (input_ids)
числа --> [модель] --> логиты
логиты --> [постобработка] --> метка + уверенностьЭта схема одинакова почти для всех задач, меняются только модель и способ постобработки. Понимая её, вы перестаёте воспринимать pipeline как «магию».
Выбор конкретной модели
По умолчанию pipeline берёт стандартную модель для задачи, но обычно вы указываете нужную явно через параметр model:
classifier = pipeline(
"sentiment-analysis",
model="blanchefort/rubert-base-cased-sentiment"
)Здесь выбрана русскоязычная модель — стандартная модель по умолчанию обучена на английском и плохо работает с русским текстом.
Как работает под капотом
При первом вызове pipeline("sentiment-analysis") библиотека: 1) определяет класс задачи, 2) скачивает модель по умолчанию и её токенизатор с Hub, 3) загружает веса в память, 4) создаёт объект, который при каждом вызове прогоняет текст через все три этапа. Объект можно вызывать многократно — модель загружается один раз. Для пакетной обработки можно передать список строк, и pipeline обработает их эффективнее, чем по одной.
Частые ошибки
- Создавать pipeline внутри цикла. Тогда модель грузится заново каждый раз. Создайте его один раз вне цикла.
- Применять англоязычную модель к русскому тексту. Указывайте подходящую модель явно.
- Ожидать, что score — это вероятность правильности. Это уверенность модели, она может быть высокой и при ошибке.
Итог
pipeline()— самый быстрый способ применить модель: один вызов вместо десятков строк.- Внутри всегда три этапа: токенизация, прогон через модель, постобработка.
- Модель указывайте явно через
model=...для нужного языка. - Создавайте pipeline один раз, а не в цикле.