Transformers documentation

Философия

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Философия

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, чтобы они были легко доступны всем.
Update on GitHub