# Использование 🤗 `transformers` на Hugging Face

🤗 `transformers` — это библиотека, поддерживаемая Hugging Face и сообществом, для передовых методов машинного обучения в PyTorch, TensorFlow и JAX. Она предоставляет тысячи предобученных моделей для выполнения задач в различных модальностях, таких как текст, изображения и аудио. Мы немного предвзяты, но нам действительно очень нравится 🤗 `transformers`!

## Исследование 🤗 transformers в Hub

В Hub доступно более 630 000 моделей `transformers`, которые можно найти, используя фильтры слева на [странице моделей](https://huggingface.co/models?library=transformers&sort=downloads).

Вы можете найти модели для самых разных задач:

* Извлечение ответа из контекста ([ответы на вопросы](https://huggingface.co/models?library=transformers&pipeline_tag=question-answering&sort=downloads)).
* Создание резюме из большого текста ([summarization](https://huggingface.co/models?library=transformers&pipeline_tag=summarization&sort=downloads)).
* Классификация текста (например, как спам или не спам, [text-classification](https://huggingface.co/models?library=transformers&pipeline_tag=text-classification&sort=downloads)).
* Сгенерируйте новый текст с помощью таких моделей, как GPT ([text-generation](https://huggingface.co/models?library=transformers&pipeline_tag=text-generation&sort=downloads)).
* Определение частей речи (глагол, подлежащее и т. д.) или сущностей (страна, организация и т. д.) в предложении ([token-classification](https://huggingface.co/models?library=transformers&pipeline_tag=token-classification&sort=downloads)).
* Распознавание аудиофайлов в текст ([automatic-speech-recognition](https://huggingface.co/models?library=transformers&pipeline_tag=automatic-speech-recognition&sort=downloads)).
* Определите говорящего или язык в аудиофайле ([audio-classification](https://huggingface.co/models?library=transformers&pipeline_tag=audio-classification&sort=downloads)).
* Обнаружение объектов на изображении ([object-detection](https://huggingface.co/models?library=transformers&pipeline_tag=object-detection&sort=downloads)).
* Сегментируйте изображение ([image-segmentation](https://huggingface.co/models?library=transformers&pipeline_tag=image-segmentation&sort=downloads)).
* Занимайтесь обучением с подкреплением ([reinforcement-learning](https://huggingface.co/models?library=transformers&pipeline_tag=reinforcement-learning&sort=downloads))!

Благодаря встроенным в браузер виджетам вы можете протестировать модели прямо в браузере, не скачивая их.

## Файлы репозитория Transformers

Репозиторий модели [Transformers](https://hf.co/docs/transformers/index) обычно содержит файлы модели и файлы предобработчика.

  

### Модель

- Файл **`config.json`** хранит сведения об архитектуре модели, такие как количество скрытых слоев, размер словаря, количество головок внимания, размерность каждой головки и другие параметры. Эти метаданные представляют собой чертёж модели.
- Файл **`model.safetensors`** хранит предобученные слои и веса модели. Для больших моделей файл safetensors разбивается на части, чтобы ограничить объём памяти, необходимый для его загрузки. Откройте файл **`model.safetensors.index.json`**, чтобы узнать, из каких файлов safetensors загружаются веса модели.

  ```json
  {
  "metadata": {
    "total_size": 16060522496
  },
  "weight_map": {
    "lm_head.weight": "model-00004-of-00004.safetensors",
    "model.embed_tokens.weight": "model-00001-of-00004.safetensors",
    ...
    }
  }
  ```

  Вы также можете визуализировать это отображение, нажав на кнопку ↗ на карточке модели.

  
    
  

  [Safetensors](https://hf.co/docs/safetensors/index) — это более безопасный и быстрый формат сериализации для хранения весов моделей по сравнению с [pickle](./security-pickle#use-your-own-serialization-format). Вы можете встретить веса, сохранённые в форматах, таких как **`bin`**, **`pth`** или **`ckpt`**, однако **`safetensors`** всё чаще используется в экосистеме моделей как более предпочтительная альтернатива.

- Модель также может содержать файл **`generation_config.json`**, в котором хранятся сведения о том, как генерировать текст: например, следует ли использовать выборку, какие токены брать для выборки, температура и специальные токены для начала и остановки генерации.

### Предобработчик

- Файл **`tokenizer_config.json`** хранит специальные токены, добавленные моделью. Эти специальные токены сигнализируют модели о многих вещах, таких как начало предложения, конкретное форматирование для шаблонов чата или указание на изображение. В этом файле также указаны максимальная длина входной последовательности, которую может принять модель, класс предобработчика и возвращаемые им выходные данные.
- Файл **`tokenizer.json`** хранит выученную моделью лексику.
- Файл **`special_tokens_map.json`** содержит сопоставление специальных токенов. Например, в модели [Llama 3.1-8B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct/blob/main/special_tokens_map.json) токен начала строки — это `"<|begin_of_text|>"`.

> [!TIP]
> Для других модальностей файл `tokenizer_config.json` заменяется на `preprocessor_config.json`.

## Использование существующих моделей

Все модели `transformer` готовы к использованию! В зависимости от того, как вы хотите их применять, можно использовать высокоуровневый API с функцией `pipeline` или `AutoModel` для более точного управления.

```py
# With pipeline, just specify the task and the model id from the Hub.
from transformers import pipeline
pipe = pipeline("text-generation", model="distilbert/distilgpt2")

# If you want more control, you will need to define the tokenizer and model.
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("distilbert/distilgpt2")
model = AutoModelForCausalLM.from_pretrained("distilbert/distilgpt2")
```

Также можно загрузить модель из конкретной версии (на основе хэша коммита, имени тега или ветки) следующим образом:

```py
model = AutoModel.from_pretrained(
    "julien-c/EsperBERTo-small", revision="v2.0.1"  # tag name, or branch name, or commit hash
)
```

Если вы хотите узнать, как загрузить конкретную модель, нажмите `Use in Transformers` — вам будет предложен рабочий фрагмент кода для её загрузки. Если вам нужна дополнительная информация об архитектуре модели, вы также можете нажать «Read model documentation» внизу фрагмента кода.

## Обмен моделями

Чтобы узнать всё о совместном использовании моделей с `transformers`, обратитесь к руководству [Share a model](https://huggingface.co/docs/transformers/model_sharing) в официальной документации.

Многие классы в `transformers`, такие как модели и токенизаторы, имеют метод `push_to_hub`, который позволяет легко загрузить файлы в репозиторий.

```py
# Pushing model to your own account
model.push_to_hub("my-awesome-model")

# Pushing your tokenizer
tokenizer.push_to_hub("my-awesome-model")

# Pushing all things after training
trainer.push_to_hub()
```

Возможностей гораздо больше, поэтому мы рекомендуем ознакомиться с руководством [Share a model](https://huggingface.co/docs/transformers/model_sharing).

## Дополнительные ресурсы

* Библиотека [Transformers](https://github.com/huggingface/transformers).
* Документация [Transformers](https://huggingface.co/docs/transformers/index).
* Поделитесь [руководством](https://huggingface.co/docs/transformers/model_sharing) по модели.

