# ESMC

## Обзор

ESMC (ESM Cambrian) — это семейство языковых моделей для белков, выпущенное [BioHub](https://biohub.org/). Это двунаправленный Transformer-энкодер, обученный с целью masked-language-modelling на последовательностях аминокислот. Как и [ESM-2](./esm), ESMC формирует представления для каждого остатка, которые полезны для задач моделирования белков.

ESMC подходит для дообучения на задачах классификации белков или классификации токенов. Он также используется в качестве основы для [ESMFold2](./esmfold2), где генерирует представления, которые используются в качестве входных данных для модуля сворачивания.

Предобученные контрольные точки доступны на Hugging Face Hub:

- [`biohub/ESMC-300M`](https://huggingface.co/biohub/ESMC-300M)
- [`biohub/ESMC-600M`](https://huggingface.co/biohub/ESMC-600M)
- [`biohub/ESMC-6B`](https://huggingface.co/biohub/ESMC-6B)

## Пример использования

ESMC зарегистрирован в автоклассах (`AutoModel`, `AutoModelForMaskedLM`, `AutoModelForSequenceClassification`, `AutoModelForTokenClassification`).

```python
import torch
from transformers import pipeline

extractor = pipeline(
    task="feature-extraction",
    model="biohub/ESMC-300M",
)
# Per-residue representations of shape (batch, sequence_length, hidden_size).
representations = extractor("MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQ", return_tensors="pt")
```

```python
import torch
from transformers import AutoModel, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-300M")
model = AutoModel.from_pretrained("biohub/ESMC-300M")

inputs = tokenizer("MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQ", return_tensors="pt")
with torch.no_grad():
    outputs = model(**inputs)

# Per-residue representations of shape (batch, sequence_length, hidden_size).
representations = outputs.last_hidden_state
```

## EsmcConfig[[transformers.EsmcConfig]]

#### transformers.EsmcConfig[[transformers.EsmcConfig]]

```python
transformers.EsmcConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, vocab_size: int = 64, hidden_size: int = 2560, intermediate_size: int = 6912, num_hidden_layers: int = 80, num_attention_heads: int = 40, num_key_value_heads: int | None = None, hidden_act: str = 'silu', max_position_embeddings: int = 2048, initializer_range: float = 0.02, pad_token_id: int | None = 1, bos_token_id: int | None = 0, eos_token_id: int | list[int] | None = 2, tie_word_embeddings: bool = False, rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None, attention_bias: bool = False, attention_dropout: int | float | None = 0.0, mlp_bias: bool = False, head_dim: int | None = None, mask_token_id: int | None = 32, classifier_dropout: float | None = 0.1)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/configuration_esmc.py#L30)

**Параметры:**

vocab_size (*int*, *optional*, по умолчанию *64*) : Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены в *input_ids*.

hidden_size (*int*, *optional*, по умолчанию *2560*) : Размерность скрытых представлений.

intermediate_size (*int*, *optional*, по умолчанию *6912*) : Размерность представлений MLP.

num_hidden_layers (*int*, *optional*, по умолчанию *80*) : Количество скрытых слоев в декодере Transformer.

num_attention_heads (*int*, *optional*, по умолчанию *40*) : Количество головок внимания для каждого слоя внимания в декодере Transformer.

num_key_value_heads (*int*, *optional*) : Это количество ключевых и value-голов, которое следует использовать для реализации Grouped Query Attention. Если *num_key_value_heads=num_attention_heads*, модель будет использовать Multi Head Attention (MHA), если *num_key_value_heads=1* — Multi Query Attention (MQA), в противном случае используется GQA. При конвертации мультиголовного чекпоинта в GQA-чекпоинт каждая групповая ключевая и value-голова должна строиться путем усреднения (meanpooling) всех исходных голов в этой группе. Подробнее см. в [этой статье](https://huggingface.co/papers/2305.13245). Если значение не указано, по умолчанию используется *num_attention_heads*.

hidden_act (*str*, *optional*, по умолчанию *silu*) : Нелинейная функция активации (функция или строка) в декодере. Например, *"gelu"*, *"relu"*, *"silu"* и т. д.

max_position_embeddings (*int*, *optional*, по умолчанию *2048*) : Максимальная длина последовательности, с которой может использоваться данная модель.

initializer_range (*float*, *optional*, по умолчанию *0.02*) : Стандартное отклонение truncated_normal_initializer для инициализации всех матриц весов.

pad_token_id (*int*, *optional*, по умолчанию *1*) : Идентификатор токена, используемый для выравнивания (padding) в словаре.

bos_token_id (*int*, *optional*, по умолчанию *0*) : Идентификатор токена, используемый для обозначения начала потока в словаре.

eos_token_id (*Union[int, list[int]]*, *optional*, по умолчанию *2*) : Идентификатор токена, используемого для обозначения конца потока в словаре.

tie_word_embeddings (*bool*, *optional*, по умолчанию *False*) : Связывать ли веса эмбеддингов согласно маппингу *tied_weights_keys* модели.

rope_parameters (*Union[~modeling_rope_utils.RopeParameters, dict]*, *optional*) : Словарь, содержащий параметры конфигурации для вложений RoPE. Словарь должен содержать значение для *rope_theta* и, при необходимости, параметры, используемые для масштабирования, если вы хотите использовать RoPE с более длинными *max_position_embeddings*.

attention_bias (*bool*, *optional*, по умолчанию *False*) : Использовать ли смещение (bias) в слоях проекции запроса, ключа, значения и вывода при само-внимании.

attention_dropout (*Union[int, float]*, *optional*, по умолчанию *0.0*) : Доля dropout для вероятностей внимания.

mlp_bias (*bool*, *optional*, по умолчанию *False*) : Использовать ли смещение (bias) в слоях up_proj, down_proj и gate_proj внутри MLP-слоёв.

head_dim (*int*, *optional*) : Размер измерения внимания. Если None, по умолчанию будет использовано hidden_size // num_attention_heads

mask_token_id (*int*, *optional*, по умолчанию 32) : Индекс маскирующего токена в словаре (`"&amp;lt;mask>"`), используемый для моделирования языка с маскированием.

classifier_dropout (*float*, *optional*, по умолчанию 0.1) : Коэффициент dropout для классификационной головы.

Это класс конфигурации для хранения настроек модели EsmcModel. Он используется для создания модели Esmc в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации модели [biohub/ESMC-6B](https://huggingface.co/biohub/ESMC-6B)

Объекты конфигурации наследуются от [*PreTrainedConfig*] и могут использоваться для управления выводами модели. Подробнее см. в документации по [*PreTrainedConfig*].

Примеры:

```python
>>> from transformers import EsmcConfig, EsmcModel

>>> # Initializing an ESMC biohub/ESMC-6B style configuration
>>> configuration = EsmcConfig()

>>> # Initializing a model (with random weights) from the configuration
>>> model = EsmcModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## EsmcTokenizer[[transformers.EsmcTokenizer]]

#### transformers.EsmcTokenizer[[transformers.EsmcTokenizer]]

```python
transformers.EsmcTokenizer(unk_token = '<unk>', cls_token = '<cls>', pad_token = '<pad>', mask_token = '<mask>', eos_token = '<eos>', bos_token = None, chain_break_token = '|', extra_special_tokens = None, **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/tokenization_esmc.py#L67)

**Параметры:**

unk_token (*str*, *optional*, по умолчанию *"&amp;lt;unk>"*) : Неизвестный токен.

cls_token (*str*, *optional*, по умолчанию *"&amp;lt;cls>"*) : Токен классификации (добавляется в начало каждой последовательности).

pad_token (*str*, *optional*, по умолчанию *"&amp;lt;pad>"*) : Токен отступов.

mask_token (*str*, *optional*, по умолчанию *"&amp;lt;mask>"*) : Токен маски, используемый для моделирования языка с масками.

eos_token (*str*, *optional*, по умолчанию *"&amp;lt;eos>"*) : Токен конца последовательности (добавляется к каждой последовательности).

bos_token (*str*, *optional*, по умолчанию *"&amp;lt;cls>"*) : Токен начала последовательности (добавляется в начало каждой последовательности). Если не задан, используется cls_token.

chain_break_token (*str*, *optional*, по умолчанию *"|"*) : Токен, вставляемый между цепями во входных данных для белков с несколькими цепями. Зарегистрирован как специальный токен, специфичный для модели, поэтому доступен как *chain_break_token* / *chain_break_token_id*.

extra_special_tokens (*list[str]*, *optional*) : Дополнительные специальные токены для регистрации в токенизаторе (восстановлены из сохранённой конфигурации).

Создайте токенизатор ESMC.

Этот токенизатор является токенизатором на уровне символов, работающим на основе библиотеки HuggingFace *tokenizers*. Он обрамляет каждую последовательность токенами `&amp;lt;cls>` и `&amp;lt;eos>` и поддерживает токен разрыва цепочки `|` для входных данных с несколькими цепочками.

Примеры:

```python
>>> from transformers import EsmcTokenizer

>>> tokenizer = EsmcTokenizer()
>>> tokenizer("ACDEFGHIKLMNPQRSTVWY")["input_ids"]
[0, 5, 23, 13, 9, 18, 6, 21, 12, 15, 4, 20, 17, 14, 16, 10, 8, 11, 7, 22, 19, 2]
```

## EsmcModel[[transformers.EsmcModel]]

#### transformers.EsmcModel[[transformers.EsmcModel]]

```python
transformers.EsmcModel(config: EsmcConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L306)

**Параметры:**

config ([EsmcConfig](/docs/transformers/main/ru/model_doc/esmc#transformers.EsmcConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Модель Esmc без дополнительных слоёв, выводящая необработанные скрытые состояния.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.EsmcModel.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, sequence_id: typing.Optional[torch.Tensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L316)

**Параметры:**

input_ids (*torch.Tensor* формы *(batch_size, sequence_length)*, *необязательный*) : Индексы токенов входной последовательности в словаре. По умолчанию токены отсечения (padding) игнорируются. Индексы можно получить с помощью [*AutoTokenizer*]. Подробности см. в [*PreTrainedTokenizer.encode*] и [*PreTrainedTokenizer.__call__*]. [Что такое входные идентификаторы?](../glossary#input-ids)

attention_mask (*torch.Tensor* формы *(batch_size, sequence_length)*, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из *[0, 1]*:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

position_ids (*torch.Tensor* формы *(batch_size, sequence_length)*, *необязательный*) : Позиция каждого токена в последовательности, используется в RoPE. По умолчанию `arange(sequence_length)`. Позиции ESMC являются абсолютными для всего входного массива и продолжают *увеличиваться* через границы цепочек во входных данных с несколькими цепочками. Структура цепочек передается отдельно через `sequence_id`, который маскирует внимание: в отличие от формата упакованных последовательностей, используемого в других частях библиотеки, это не идентификаторы позиций для каждой цепочки, начинающиеся с 0, и структура цепочек намеренно не выводится из них.

sequence_id (*torch.Tensor* формы *(batch_size, sequence_length)*, *необязательный*) : Целочисленный тензор ID цепочек для маскирования внимания с учётом цепочек. Токены с одинаковым неотрицательным целым значением могут обращать внимание друг на друга; токены с разными значениями не могут (межцепочечное маскирование). Позиции отступов (padding) следует устанавливать в `-1`, а входные данные должны быть **выровнены справа** (RoPE использует абсолютные позиции, начиная с 0). Если этот параметр передан, `attention_mask` игнорируется. Передача `sequence_id` создаёт пользовательскую маску внимания, что требует `torch>=2.6`. Для входных данных с несколькими цепочками дополнительно требуется реализация внимания, отличная от flash `attn_implementation` (`'sdpa'` / `'eager'` / `'flex_attention'`); flash attention поддерживает только случай с одной цепочкой.

**Возвращает:** [*~modeling_outputs.BaseModelOutput*] или *tuple(torch.Tensor)*

A [*~modeling_outputs.BaseModelOutput*] or a tuple of *torch.Tensor* (if *return_dict=False* is passed or when *config.return_dict=False*) comprising various elements depending on the configuration ([*EsmcConfig*]) and inputs.

Метод forward класса [*EsmcModel*] переопределяет специальный метод *__call__*.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр [*Module*], а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и постобработки, тогда как второй молча их игнорирует.

- **last_hidden_state** (*torch.Tensor* формы *(batch_size, sequence_length, hidden_size)*) -- Последовательность скрытых состояний на выходе последнего слоя модели.
- **hidden_states** (*tuple(torch.Tensor)*, *optional*, возвращается, если передано *output_hidden_states=True* или если *config.output_hidden_states=True*) -- Кортеж *torch.Tensor* (один для вывода слоя встраиваний, если у модели есть слой встраиваний, + один для вывода каждого слоя) формы *(batch_size, sequence_length, hidden_size)*.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **attentions** (*tuple(torch.Tensor)*, *optional*, возвращается, если передано *output_attentions=True* или если *config.output_attentions=True*) -- Кортеж *torch.Tensor* (по одному на каждый слой) формы *(batch_size, num_heads, sequence_length, sequence_length)*.

  Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Примеры:

```python
>>> from transformers import AutoTokenizer, EsmcModel

>>> model = EsmcModel.from_pretrained("biohub/ESMC-300M")
>>> tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-300M")
>>> inputs = tokenizer(["MLKNVQVQLV"], return_tensors="pt")
>>> outputs = model(**inputs)
>>> outputs.last_hidden_state.shape
torch.Size([1, 12, 960])
```

## EsmcForMaskedLM[[transformers.EsmcForMaskedLM]]

#### transformers.EsmcForMaskedLM[[transformers.EsmcForMaskedLM]]

```python
transformers.EsmcForMaskedLM(config: EsmcConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L414)

**Параметры:**

config ([EsmcConfig](/docs/transformers/main/ru/model_doc/esmc#transformers.EsmcConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Модель Esmc с головкой `language modeling`."

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.EsmcForMaskedLM.forward]]

```python
forward(input_ids: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, sequence_id: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.Tensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L430)

**Параметры:**

input_ids (*torch.Tensor* формы *(batch_size, sequence_length)*, *необязательный*) : Индексы токенов входной последовательности в словаре. По умолчанию токены отсечения (padding) игнорируются. Индексы можно получить с помощью [*AutoTokenizer*]. Подробности см. в [*PreTrainedTokenizer.encode*] и [*PreTrainedTokenizer.__call__*]. [Что такое входные идентификаторы?](../glossary#input-ids)

attention_mask (*torch.Tensor* формы *(batch_size, sequence_length)*, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из *[0, 1]*:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

position_ids (*torch.Tensor* формы *(batch_size, sequence_length)*, *необязательный*) : Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона *[0, config.n_positions - 1]*.  [Что такое position IDs?](../glossary#position-ids)

sequence_id (*torch.Tensor* формы *(batch_size, sequence_length)*, *необязательный*) : Целочисленный тензор ID цепочки, передаваемый в кодировщик для маскирования внимания с учётом цепочки. См. [EsmcModel.forward()](/docs/transformers/main/ru/model_doc/esmc#transformers.EsmcModel.forward) для кодирования.

labels (*torch.LongTensor* формы *(batch_size, sequence_length)*, *необязательный*) : Метки для функции потерь маскированного языкового моделирования. Позиции с меткой `-100` игнорируются. Остальные позиции должны находиться в диапазоне `[0, config.vocab_size)`.

**Возвращает:** [*~modeling_outputs.MaskedLMOutput*] или *tuple(torch.Tensor)*

A [*~modeling_outputs.MaskedLMOutput*] или кортеж *torch.Tensor* (если передано *return_dict=False* или если *config.return_dict=False*), содержащий различные элементы в зависимости от конфигурации ([*EsmcConfig*]) и входных данных.

Метод forward класса [*EsmcForMaskedLM*] переопределяет специальный метод *__call__*.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр [*Module*], а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и постобработки, тогда как второй молча их игнорирует.

- **loss** (*torch.Tensor* формы *(1,)*, *optional*, возвращается, если задан *labels*) -- Потери маскированного языкового моделирования (MLM).
- **logits** (*torch.Tensor* формы *(batch_size, sequence_length, config.vocab_size)*) -- Оценки предсказаний языковой модели (оценки для каждого токена словаря до применения SoftMax).
- **hidden_states** (*tuple(torch.Tensor)*, *optional*, возвращается, если передано *output_hidden_states=True* или если *config.output_hidden_states=True*) -- Кортеж *torch.Tensor* (один для вывода слоя встраиваний, если у модели есть слой встраиваний, + один для вывода каждого слоя) формы *(batch_size, sequence_length, hidden_size)*.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **attentions** (*tuple(torch.Tensor)*, *optional*, возвращается, если передано *output_attentions=True* или если *config.output_attentions=True*) -- Кортеж *torch.Tensor* (по одному на каждый слой) формы *(batch_size, num_heads, sequence_length, sequence_length)*.

  Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Примеры:

```python
>>> from transformers import AutoTokenizer, EsmcForMaskedLM
>>> import torch

>>> model = EsmcForMaskedLM.from_pretrained("biohub/ESMC-300M")
>>> tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-300M")
>>> inputs = tokenizer(["MLKNVQ&amp;lt;mask>LV"], return_tensors="pt")
>>> outputs = model(**inputs)
>>> outputs.logits.shape
torch.Size([1, 11, 64])
```

## EsmcForSequenceClassification[[transformers.EsmcForSequenceClassification]]

#### transformers.EsmcForSequenceClassification[[transformers.EsmcForSequenceClassification]]

```python
transformers.EsmcForSequenceClassification(config: EsmcConfig)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L511)

**Параметры:**

config ([EsmcConfig](/docs/transformers/main/ru/model_doc/esmc#transformers.EsmcConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Модель ESMC на базе трансформера с головной частью для классификации/регрессии последовательности (линейный слой поверх пуллинг-выхода), например, для задач GLUE.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.EsmcForSequenceClassification.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L521)

**Параметры:**

input_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы токенов входной последовательности в словаре. По умолчанию заполнение (padding) игнорируется. Индексы можно получить с помощью [AutoTokenizer](/docs/transformers/main/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [PreTrainedTokenizer.encode()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) и [PreTrainedTokenizer.__call__()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__). [Что такое входные идентификаторы?](../glossary#input-ids)

attention_mask (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из `[0, 1]`:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

position_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона `[0, config.n_positions - 1]`.  [Что такое position IDs?](../glossary#position-ids)

inputs_embeds (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`, *необязательно*) : По желанию, вместо передачи `input_ids` можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы `input_ids` преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.

labels (`torch.LongTensor` формы `(batch_size,)`, *необязательный*) : Метки для вычисления функции потерь классификации/регрессии последовательности. Индексы должны находиться в диапазоне `[0, ..., config.num_labels - 1]`. Если `config.num_labels == 1`, вычисляется функция потерь регрессии (среднеквадратичная ошибка), если `config.num_labels > 1` — функция потерь классификации (кросс-энтропия).

**Возвращает:** [SequenceClassifierOutput](/docs/transformers/main/ru/main_classes/output#transformers.modeling_outputs.SequenceClassifierOutput) или `tuple(torch.Tensor)`

Объект [SequenceClassifierOutput](/docs/transformers/main/ru/main_classes/output#transformers.modeling_outputs.SequenceClassifierOutput) или кортеж из `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации ([EsmcConfig](/docs/transformers/main/ru/model_doc/esmc#transformers.EsmcConfig)) и входных данных.

Метод [EsmcForSequenceClassification](/docs/transformers/main/ru/model_doc/esmc#transformers.EsmcForSequenceClassification) forward переопределяет специальный метод `__call__`.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр `Module`, а не эту функцию, поскольку первый выполняет шаги предварительной и постобработки, тогда как второй молча их игнорирует.

- **loss** (`torch.Tensor` формы `(1,)`, *необязательный*, возвращается, если задан `labels`) -- Потери классификации (или регрессии, если config.num_labels==1).
- **logits** (`torch.Tensor` формы `(batch_size, config.num_labels)`) — Оценки классификации (или регрессии, если config.num_labels==1) до применения SoftMax.
- **hidden_states** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_hidden_states=True` или когда `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **attentions** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_attentions=True` или при `config.output_attentions=True`) -- Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`.

  Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Пример классификации с одной меткой:

```python
>>> import torch
>>> from transformers import AutoTokenizer, EsmcForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-6B")
>>> model = EsmcForSequenceClassification.from_pretrained("biohub/ESMC-6B")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_id = logits.argmax().item()
>>> model.config.id2label[predicted_class_id]
...

>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = EsmcForSequenceClassification.from_pretrained("biohub/ESMC-6B", num_labels=num_labels)

>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...
```

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

```python
>>> import torch
>>> from transformers import AutoTokenizer, EsmcForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("biohub/ESMC-6B")
>>> model = EsmcForSequenceClassification.from_pretrained("biohub/ESMC-6B", problem_type="multi_label_classification")

>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_ids = torch.arange(0, logits.shape[-1])[torch.sigmoid(logits).squeeze(dim=0) > 0.5]

>>> # To train a model on `num_labels` classes, you can pass `num_labels=num_labels` to `.from_pretrained(...)`
>>> num_labels = len(model.config.id2label)
>>> model = EsmcForSequenceClassification.from_pretrained(
...     "biohub/ESMC-6B", num_labels=num_labels, problem_type="multi_label_classification"
... )

>>> labels = torch.sum(
...     torch.nn.functional.one_hot(predicted_class_ids[None, :].clone(), num_classes=num_labels), dim=1
... ).to(torch.float)
>>> loss = model(**inputs, labels=labels).loss
```

## EsmcForTokenClassification[[transformers.EsmcForTokenClassification]]

#### transformers.EsmcForTokenClassification[[transformers.EsmcForTokenClassification]]

```python
transformers.EsmcForTokenClassification(config)
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L575)

#### forward[[transformers.EsmcForTokenClassification.forward]]

```python
forward(input_ids: torch.LongTensor | None = None, attention_mask: torch.Tensor | None = None, position_ids: torch.LongTensor | None = None, past_key_values: Cache | None = None, inputs_embeds: torch.Tensor | None = None, labels: torch.LongTensor | None = None, use_cache: bool | None = None, **kwargs: Unpack[TransformersKwargs])
```

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/modeling_layers.py#L275)

**Параметры:**

input_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы токенов входной последовательности в словаре. По умолчанию заполнение (padding) игнорируется. Индексы можно получить с помощью [AutoTokenizer](/docs/transformers/main/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [PreTrainedTokenizer.encode()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) и [PreTrainedTokenizer.__call__()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__). [Что такое входные идентификаторы?](../glossary#input-ids)

attention_mask (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из `[0, 1]`:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

position_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона `[0, config.n_positions - 1]`.  [Что такое position IDs?](../glossary#position-ids)

past_key_values (`Cache`, *необязательный*) : Предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно это `past_key_values`, возвращаемые моделью на предыдущем этапе декодирования, когда `use_cache=True` или `config.use_cache=True`. В качестве входного параметра допускается только экземпляр [Cache](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache), см. наше [руководство по кэшу kv](https://huggingface.co/docs/transformers/en/kv_cache). Если `past_key_values` не переданы, по умолчанию будет инициализирован [DynamicCache](/docs/transformers/main/ru/internal/generation_utils#transformers.DynamicCache). Модель выведет тот же формат кэша, который был передан на вход. Если используются `past_key_values`, ожидается, что пользователь передаст только необработанные `input_ids` (те, для которых не заданы их прошлые состояния ключей и значений в этой модели) с формой `(batch_size, unprocessed_length)`, а не все `input_ids` с формой `(batch_size, sequence_length)`.

inputs_embeds (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`, *необязательно*) : По желанию, вместо передачи `input_ids` можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы `input_ids` преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.

labels (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Метки для вычисления функции потерь классификации токенов. Индексы должны находиться в диапазоне `[0, ..., config.num_labels - 1]`.

use_cache (`bool`, *необязательный*) : Если установлено в `True`, состояния ключей и значений `past_key_values` возвращаются и могут использоваться для ускорения декодирования (см. `past_key_values`).

**Возвращает:** `TokenClassifierOutput`

Метод `GenericForTokenClassification` forward переопределяет специальный метод `__call__`.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр `Module`, а не эту функцию, поскольку первый выполняет шаги предварительной и постобработки, тогда как второй молча их игнорирует.

