Transformers documentation
Философия
Философия
Transformers — это библиотека, в которой PyTorch является основным фреймворком. Она предоставляет модели, которые точно соответствуют их научным статьям, просты в использовании и легко модифицируются.
Более подробная статья с примерами, визуализациями и таймлайнами доступна здесь и служит нашим основным справочным материалом.
Наша философия развивается через практику. Ниже приведены наши актуальные, устойчивые принципы.
Для кого предназначена эта библиотека
- Исследователи и преподаватели, изучающие или расширяющие архитектуры моделей.
- Практики, которые выполняют дообучение, оценку или развёртывание моделей.
- Инженерам, которым нужна предобученная модель, которая «просто работает» с предсказуемым API.
Чего можно ожидать
Для каждой модели требуются три основных класса: конфигурация, модели и класс предобработки. Токенайзеры обрабатывают NLP, процессоры изображений — изображения, процессоры видео — видео, экстракторы признаков — аудио, а процессоры — мультимодальные входные данные.
Все эти классы можно инициализировать простым и унифицированным образом из предобученных экземпляров с помощью общего метода
from_pretrained(), который при необходимости скачивает, кэширует и загружает соответствующий экземпляр класса и связанные с ним данные (гиперпараметры конфигураций, словарь токенизаторов, параметры процессоров и веса моделей) из предобученной контрольной точки, предоставленной на Hugging Face Hub, или из вашей собственной сохранённой контрольной точки.Помимо этих трёх базовых классов, библиотека предоставляет два API: pipeline() для быстрого использования модели для инференса по конкретной задаче и Trainer для быстрой тренировки или дообучения модели PyTorch.
Основные принципы
Следующие принципы сформировались со временем и подробно описаны в нашей новой статье о философии в блоге. Они направляют решения сопровождающих при рассмотрении PR и вклада.
- Источник истины. Реализации должны точно соответствовать официальным результатам и предполагаемому поведению.
- Одна модель, один файл. Основная логика инференса и обучения видна сверху донизу в файле модели, который читают пользователи.
- Код — это продукт. Оптимизируйте его для чтения и сравнения версий. Предпочитайте явные имена хитрой косвенности.
- Стандартизируйте, а не абстрагируйте. Специфичное для модели поведение оставляйте в модели. Общие интерфейсы используйте только для универсальной инфраструктуры.
- DRY* (Повторяйте, когда это помогает пользователям). Файлы моделей для конечных пользователей остаются самодостаточными. Инфраструктура вынесена в отдельный модуль.
- Минимальный пользовательский API. Небольшое количество кодовых путей, предсказуемые именованные аргументы, стабильные методы.
- Обратная совместимость. Публичные интерфейсы не должны ломаться. Старые артефакты Hub должны продолжать работать.
- Единый публичный интерфейс. Именование, выходные данные и необязательная диагностика согласованы и протестированы.
Основные классы
Классы конфигурации хранят гиперпараметры, необходимые для построения модели. К ним относятся количество слоёв и размер скрытого слоя. Вам не всегда нужно создавать эти объекты самостоятельно. При использовании предобученной модели без изменений создание модели автоматически инициализирует конфигурацию.
Классы моделей — это модели PyTorch (torch.nn.Module), обёрнутые как минимум в PreTrainedModel.
Модульные трансформеры. Вкладчики пишут небольшой фрагмент
modular_*.py, в котором объявляется переиспользование существующих компонентов. Библиотека автоматически раскрывает его в видимый пользователю файлmodeling_*.py, который пользователи читают и отлаживают. Поддерживающие команды проверяют фрагмент, а пользователи дорабатывают раскрытый файл. Это сохраняет принцип «одна модель — один файл» без расхождения шаблонов. Подробности — в документации по внесению вкладов.Классы предобработки преобразуют исходные данные в формат, который принимает модель. Токенизатор хранит словарь для каждой модели и предоставляет методы для кодирования и декодирования строк в список индексов эмбеддингов токенов. Процессоры изображений предобрабатывают входные данные для зрительных моделей, видео-процессоры — входные данные для видео, извлекатели признаков — входные данные для аудио, а процессоры — мультимодальные входные данные.
Все эти классы можно создать из предобученных экземпляров, сохранить локально и опубликовать на Hub с помощью трех методов:
from_pretrained()позволяет создать экземпляр модели, конфигурации и класса предобработки на основе предобученной версии, предоставляемой самой библиотекой (список поддерживаемых моделей доступен в Model Hub) или сохранённой пользователем локально (или на сервере).save_pretrained()позволяет сохранить модель, конфигурацию и класс предобработки локально, чтобы их можно было загрузить с помощьюfrom_pretrained().push_to_hub()позволяет опубликовать модель, конфигурацию и класс предобработки в Hub, чтобы они были легко доступны всем.