# ESMC

## Aperçu

ESMC (ESM Cambrian) est une famille de modèles de langage pour les protéines publiée par [BioHub](https://biohub.org/). Il s'agit d'un encodeur Transformer bidirectionnel entraîné avec un objectif de modélisation de langage masqué sur des séquences d'acides aminés. Tout comme [ESM-2](./esm), ESMC génère des représentations par résidu, utiles pour les tâches de modélisation de protéines en aval.

ESMC convient à l’ajustement fin sur des tâches de classification de protéines ou de classification de jetons. Il est également utilisé comme structure de base de [ESMFold2](./esmfold2), où il génère des représentations utilisées en entrée de la tête de repliement.

Des points de contrôle pré-entraînés sont disponibles sur le 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)

## Exemple d'utilisation

ESMC est enregistré auprès des classes auto (`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)
```

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/configuration_esmc.py#L30)

**Paramètres :**

vocab_size (*int*, *optionnel*, par défaut *64*) : Taille du vocabulaire du modèle. Définit le nombre de jetons différents qui peuvent être représentés par *input_ids*.

hidden_size (*int*, *optionnel*, valeur par défaut *2560*) : Dimension des représentations cachées.

intermediate_size (*int*, *optionnel*, par défaut *6912*) : Dimension des représentations MLP.

num_hidden_layers (*int*, *optionnel*, par défaut *80*) : Nombre de couches cachées dans le décodeur Transformer.

num_attention_heads (*int*, *optionnel*, par défaut *40*) : Nombre de têtes d'attention pour chaque couche d'attention du décodeur Transformer.

num_key_value_heads (*int*, *optionnel*) : C'est le nombre de têtes key_value à utiliser pour implémenter l'attention Grouped Query. Si *num_key_value_heads=num_attention_heads*, le modèle utilisera l'attention Multi Head (MHA) ; si *num_key_value_heads=1*, il utilisera l'attention Multi Query (MQA) ; sinon, c'est la GQA qui est utilisée. Lors de la conversion d'un checkpoint multi-têtes vers un checkpoint GQA, chaque tête clé et valeur de groupe doit être construite en effectuant un meanpooling de toutes les têtes d'origine au sein de ce groupe. Pour plus de détails, consultez [ce papier](https://huggingface.co/papers/2305.13245). S'il n'est pas spécifié, la valeur par défaut est *num_attention_heads*.

hidden_act (*str*, *optionnel*, par défaut *silu*) : La fonction d'activation non linéaire (fonction ou chaîne de caractères) dans le décodeur. Par exemple, *"gelu"*, *"relu"*, *"silu"*, etc.

max_position_embeddings (*int*, *optionnel*, valeur par défaut *2048*) : La longueur de séquence maximale avec laquelle ce modèle pourrait être utilisé.

initializer_range (*float*, *optionnel*, par défaut *0.02*) : L'écart-type de la truncated_normal_initializer pour l'initialisation de toutes les matrices de poids.

pad_token_id (*int*, *optionnel*, valeur par défaut *1*) : Identifiant du jeton utilisé pour le bourrage dans le vocabulaire.

bos_token_id (*int*, *facultatif*, valeur par défaut *0*) : Identifiant du jeton utilisé pour le début de flux dans le vocabulaire.

eos_token_id (*Union[int, list[int]]*, *facultatif*, valeur par défaut *2*) : Identifiant de jeton utilisé pour la fin de flux dans le vocabulaire.

tie_word_embeddings (*bool*, *facultatif*, par défaut *False*) : Indique s'il faut lier les embeddings de poids selon la correspondance *tied_weights_keys* du modèle.

rope_parameters (*Union[~modeling_rope_utils.RopeParameters, dict]*, *optionnel*) : Dictionnaire contenant les paramètres de configuration pour les embeddings RoPE. Le dictionnaire doit contenir une valeur pour *rope_theta* et, le cas échéant, les paramètres utilisés pour le mise à l'échelle si vous souhaitez utiliser RoPE avec des *max_position_embeddings* plus longs.

attention_bias (*bool*, *optionnel*, par défaut *False*) : Indique s'il faut utiliser un biais dans les couches de projection de requête, de clé, de valeur et de sortie lors de l'auto-attention.

attention_dropout (*Union[int, float]*, *facultatif*, valeur par défaut *0.0*) : Le taux de dropout appliqué aux probabilités d'attention.

mlp_bias (*bool*, *facultatif*, par défaut *False*) : Indique s'il faut utiliser un biais dans les couches up_proj, down_proj et gate_proj des couches MLP.

head_dim (*int*, *optionnel*) : La dimension des têtes d'attention. Si None, elle est par défaut égale à hidden_size // num_attention_heads

mask_token_id (*int*, *facultatif*, valeur par défaut 32) : Index du jeton de masque dans le vocabulaire (`"&amp;lt;mask>"`), utilisé pour le modélisation de langage masqué.

classifier_dropout (*float*, *optionnel*, par défaut 0.1) : Taux de dropout pour la tête de classification.

Ceci est la classe de configuration destinée à stocker la configuration d'un EsmcModel. Elle est utilisée pour instancier un modèle Esmc en fonction des arguments spécifiés, en définissant l'architecture du modèle. L'instanciation d'une configuration avec les valeurs par défaut produira une configuration similaire à celle de [biohub/ESMC-6B](https://huggingface.co/biohub/ESMC-6B)

Les objets de configuration héritent de [*PreTrainedConfig*] et peuvent être utilisés pour contrôler les sorties du modèle. Consultez la documentation de [*PreTrainedConfig*] pour plus d’informations.

Exemples :

```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)
```

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/tokenization_esmc.py#L67)

**Paramètres :**

unk_token (*str*, *facultatif*, valeur par défaut *"&amp;lt;unk>"*) : le jeton inconnu.

cls_token (*str*, *facultatif*, par défaut *"&amp;lt;cls>"*) : le jeton de classification (préfixé à chaque séquence).

pad_token (*str*, *facultatif*, par défaut *"&amp;lt;pad>"*) : Le jeton de bourrage.

mask_token (*str*, *facultatif*, par défaut *"&amp;lt;mask>"*) : le jeton de masque, utilisé pour le modélisation de langage masquée.

eos_token (*str*, *facultatif*, par défaut *"&amp;lt;eos>"*) : le jeton de fin de séquence (ajouté à chaque séquence).

bos_token (*str*, *facultatif*, par défaut *"&amp;lt;cls>"*) : Jeton de début de séquence (préfixé à chaque séquence). S'il n'est pas défini, cls_token est utilisé.

chain_break_token (*str*, *optionnel*, valeur par défaut *"|"*) : Jeton inséré entre les chaînes dans les entrées protéiques multi-chaînes. Enregistré en tant que jeton spécial spécifique au modèle, il est donc exposé sous la forme *chain_break_token* / *chain_break_token_id*.

extra_special_tokens (*list[str]*, *facultatif*) : Jetons spéciaux supplémentaires à enregistrer avec le tokeniseur (restaurés depuis une configuration sauvegardée).

Construire un tokenizer ESMC.

Ce tokeniseur est un tokeniseur au niveau des caractères, basé sur la bibliothèque *tokenizers* de HuggingFace. Il encadre chaque séquence avec les jetons `&amp;lt;cls>` et `&amp;lt;eos>` et prend en charge le jeton de rupture de chaîne `|` pour les entrées multi-chaînes.

Exemples :

```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)
```

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L306)

**Paramètres :**

config ([EsmcConfig](/docs/transformers/main/fr/model_doc/esmc#transformers.EsmcConfig)) : Classe de configuration du modèle contenant tous les paramètres du modèle. L'initialisation à partir d'un fichier de configuration ne charge pas les poids associés au modèle, uniquement la configuration. Consultez la méthode [from_pretrained()](/docs/transformers/main/fr/main_classes/model#transformers.PreTrainedModel.from_pretrained) pour charger les poids du modèle.

Le modèle Esmc brut, qui produit des états cachés bruts sans aucune tête spécifique au sommet.

Ce modèle hérite de [PreTrainedModel](/docs/transformers/main/fr/main_classes/model#transformers.PreTrainedModel). Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous ses modèles (tels que le téléchargement ou l'enregistrement, le redimensionnement des embeddings d'entrée, l'élagage des têtes, etc.).

Ce modèle est également une sous-classe de [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) de PyTorch. Utilisez-le comme un module PyTorch standard et consultez la documentation de PyTorch pour tout ce qui concerne l’utilisation et le comportement généraux.

#### 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'>)
```

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L316)

**Paramètres :**

input_ids (*torch.Tensor* de forme *(batch_size, sequence_length)*, *facultatif*) : Indices des jetons de la séquence d'entrée dans le vocabulaire. Le bourrage (padding) sera ignoré par défaut. Les indices peuvent être obtenus à l'aide de [*AutoTokenizer*]. Voir [*PreTrainedTokenizer.encode*] et [*PreTrainedTokenizer.__call__*] pour plus de détails. [Que sont les identifiants d'entrée ?](../glossary#input-ids)

attention_mask (*torch.Tensor* de forme *(batch_size, sequence_length)*, *facultatif*) : Masque pour éviter d'effectuer l'attention sur les indices des jetons de bourrage. Les valeurs du masque sont choisies dans *[0, 1]* : - 1 pour les jetons qui ne sont **pas masqués**, - 0 pour les jetons qui sont **masqués**. [Qu'est-ce qu'un masque d'attention ?](../glossary#attention-mask)

position_ids (*torch.Tensor* de forme *(batch_size, sequence_length)*, *facultatif*) : Position de chaque jeton dans la séquence, utilisée par RoPE. La valeur par défaut est `arange(sequence_length)`. Les positions ESMC sont absolues sur l'ensemble de l'entrée et continuent *au-delà* des limites de chaîne dans une entrée multi-chaînes. La structure des chaînes est portée séparément par `sequence_id`, qui masque l'attention : contrairement au format de séquences empilées utilisé ailleurs dans la bibliothèque, il ne s'agit donc pas d'identifiants de position par chaîne redémarrant à 0, et la structure des chaînes n'est délibérément pas déduite de ceux-ci.

sequence_id (*torch.Tensor* de forme *(batch_size, sequence_length)*, *facultatif*) : Tenseur d'identifiants de chaîne d'entiers pour le masquage de l'attention prenant en compte les chaînes. Les jetons partageant la même valeur entière non négative peuvent s'attendre mutuellement ; les jetons ayant des valeurs différentes ne le peuvent pas (masquage inter-chaînes). Les positions de bourrage doivent être définies sur `-1` et les entrées doivent être **bourrées à droite** (RoPE utilise des positions absolues commençant à 0). S'il est fourni, `attention_mask` est ignoré. Le passage de `sequence_id` construit un masque d'attention personnalisé, ce qui nécessite `torch>=2.6`. Les entrées multi-chaînes exigent en outre une `attn_implementation` non-flash (`'sdpa'` / `'eager'` / `'flex_attention'`) ; l'attention flash ne prend en charge que le cas mono-chaîne.

**Retourne :** [*~modeling_outputs.BaseModelOutput*] ou *tuple(torch.Tensor)*

Un [*~modeling_outputs.BaseModelOutput*] ou un tuple de *torch.Tensor* (si *return_dict=False* est passé ou lorsque *config.return_dict=False*) comprenant divers éléments selon la configuration ([*EsmcConfig*]) et les entrées.

La méthode forward de [*EsmcModel*] redéfinit la méthode spéciale *__call__*.

Bien que la recette de la passe avant doive être définie dans cette fonction, il faut ensuite appeler l'instance de *Module* plutôt que celle-ci, car la première gère l'exécution des étapes de prétraitement et de post-traitement, tandis que la seconde les ignore silencieusement.

- **last_hidden_state** (*torch.Tensor* de forme *(batch_size, sequence_length, hidden_size)*) -- Séquence d'états cachés à la sortie de la dernière couche du modèle.
- **hidden_states** (*tuple(torch.Tensor)*, *facultatif*, renvoyé lorsque *output_hidden_states=True* est passé ou lorsque *config.output_hidden_states=True*) -- Tuple de *torch.Tensor* (un pour la sortie des embeddings, si le modèle possède une couche d'embedding, + un pour la sortie de chaque couche) de forme *(batch_size, sequence_length, hidden_size)*.

  États cachés du modèle à la sortie de chaque couche, ainsi que les sorties d'incorporation initiales facultatives.
- **attentions** (*tuple(torch.Tensor)*, *facultatif*, renvoyé lorsque *output_attentions=True* est passé ou lorsque *config.output_attentions=True*) -- Tuple de *torch.Tensor* (un par couche) de forme *(batch_size, num_heads, sequence_length, sequence_length)*.

  Pondérations des attentions après le softmax d'attention, utilisées pour calculer la moyenne pondérée dans les têtes d'auto-attention.

Exemples :

```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)
```

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L414)

**Paramètres :**

config ([EsmcConfig](/docs/transformers/main/fr/model_doc/esmc#transformers.EsmcConfig)) : Classe de configuration du modèle contenant tous les paramètres du modèle. L'initialisation à partir d'un fichier de configuration ne charge pas les poids associés au modèle, uniquement la configuration. Consultez la méthode [from_pretrained()](/docs/transformers/main/fr/main_classes/model#transformers.PreTrainedModel.from_pretrained) pour charger les poids du modèle.

Le modèle Esmc avec une tête de `language modeling` au sommet."

Ce modèle hérite de [PreTrainedModel](/docs/transformers/main/fr/main_classes/model#transformers.PreTrainedModel). Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous ses modèles (tels que le téléchargement ou l'enregistrement, le redimensionnement des embeddings d'entrée, l'élagage des têtes, etc.).

Ce modèle est également une sous-classe de [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) de PyTorch. Utilisez-le comme un module PyTorch standard et consultez la documentation de PyTorch pour tout ce qui concerne l’utilisation et le comportement généraux.

#### 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'>)
```

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L430)

**Paramètres :**

input_ids (*torch.Tensor* de forme *(batch_size, sequence_length)*, *facultatif*) : Indices des jetons de la séquence d'entrée dans le vocabulaire. Le bourrage (padding) sera ignoré par défaut. Les indices peuvent être obtenus à l'aide de [*AutoTokenizer*]. Voir [*PreTrainedTokenizer.encode*] et [*PreTrainedTokenizer.__call__*] pour plus de détails. [Que sont les identifiants d'entrée ?](../glossary#input-ids)

attention_mask (*torch.Tensor* de forme *(batch_size, sequence_length)*, *facultatif*) : Masque pour éviter d'effectuer l'attention sur les indices des jetons de bourrage. Les valeurs du masque sont choisies dans *[0, 1]* : - 1 pour les jetons qui ne sont **pas masqués**, - 0 pour les jetons qui sont **masqués**. [Qu'est-ce qu'un masque d'attention ?](../glossary#attention-mask)

position_ids (*torch.Tensor* de forme *(batch_size, sequence_length)*, *facultatif*) : Indices des positions des jetons de chaque séquence d'entrée dans les embeddings de position. Sélectionnés dans l'intervalle *[0, config.n_positions - 1]*.  [Que sont les identifiants de position ?](../glossary#position-ids)

sequence_id (*torch.Tensor* de forme *(batch_size, sequence_length)*, *facultatif*) : Tenseur d'identifiants de chaîne d'entiers transmis à l'encodeur pour un masquage de l'attention prenant en compte les chaînes. Consultez [EsmcModel.forward()](/docs/transformers/main/fr/model_doc/esmc#transformers.EsmcModel.forward) pour le codage.

labels (*torch.LongTensor* de forme *(batch_size, sequence_length)*, *facultatif*) : Étiquettes pour la perte de modélisation de langage masqué. Les positions avec l'étiquette `-100` sont ignorées. Les autres positions doivent être comprises dans `[0, config.vocab_size)`.

**Retourne :** [*~modeling_outputs.MaskedLMOutput*] ou *tuple(torch.Tensor)*

Un [*~modeling_outputs.MaskedLMOutput*] ou un tuple de *torch.Tensor* (si *return_dict=False* est passé ou lorsque *config.return_dict=False*) comprenant divers éléments selon la configuration ([*EsmcConfig*]) et les entrées.

La méthode forward de [*EsmcForMaskedLM*] redéfinit la méthode spéciale *__call__*.

Bien que la recette de la passe avant doive être définie dans cette fonction, il faut ensuite appeler l'instance de *Module* plutôt que celle-ci, car la première gère l'exécution des étapes de prétraitement et de post-traitement, tandis que la seconde les ignore silencieusement.

- **loss** (*torch.Tensor* de forme *(1,)*, *facultatif*, renvoyé lorsque *labels* est fourni) -- Perte de modélisation de langage masquée (MLM).
- **logits** (*torch.Tensor* de forme *(batch_size, sequence_length, config.vocab_size)*) -- Scores de prédiction de la tête de modélisation du langage (scores pour chaque jeton du vocabulaire avant SoftMax).
- **hidden_states** (*tuple(torch.Tensor)*, *facultatif*, renvoyé lorsque *output_hidden_states=True* est passé ou lorsque *config.output_hidden_states=True*) -- Tuple de *torch.Tensor* (un pour la sortie des embeddings, si le modèle possède une couche d'embedding, + un pour la sortie de chaque couche) de forme *(batch_size, sequence_length, hidden_size)*.

  États cachés du modèle à la sortie de chaque couche, ainsi que les sorties d'incorporation initiales facultatives.
- **attentions** (*tuple(torch.Tensor)*, *facultatif*, renvoyé lorsque *output_attentions=True* est passé ou lorsque *config.output_attentions=True*) -- Tuple de *torch.Tensor* (un par couche) de forme *(batch_size, num_heads, sequence_length, sequence_length)*.

  Pondérations des attentions après le softmax d'attention, utilisées pour calculer la moyenne pondérée dans les têtes d'auto-attention.

Exemples :

```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)
```

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L511)

**Paramètres :**

config ([EsmcConfig](/docs/transformers/main/fr/model_doc/esmc#transformers.EsmcConfig)) : Classe de configuration du modèle contenant tous les paramètres du modèle. L'initialisation à partir d'un fichier de configuration ne charge pas les poids associés au modèle, uniquement la configuration. Consultez la méthode [from_pretrained()](/docs/transformers/main/fr/main_classes/model#transformers.PreTrainedModel.from_pretrained) pour charger les poids du modèle.

Transformateur de modèle ESMC avec une tête de classification/régression de séquence au sommet (une couche linéaire au-dessus de la sortie agrégée), par exemple pour les tâches GLUE.

Ce modèle hérite de [PreTrainedModel](/docs/transformers/main/fr/main_classes/model#transformers.PreTrainedModel). Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous ses modèles (tels que le téléchargement ou l'enregistrement, le redimensionnement des embeddings d'entrée, l'élagage des têtes, etc.).

Ce modèle est également une sous-classe de [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) de PyTorch. Utilisez-le comme un module PyTorch standard et consultez la documentation de PyTorch pour tout ce qui concerne l’utilisation et le comportement généraux.

#### 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'>)
```

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esmc/modeling_esmc.py#L521)

**Paramètres :**

input_ids (`torch.LongTensor` de forme `(batch_size, sequence_length)`, *facultatif*) : Indices des jetons de la séquence d'entrée dans le vocabulaire. Le bourrage (padding) sera ignoré par défaut. Les indices peuvent être obtenus à l'aide de [AutoTokenizer](/docs/transformers/main/fr/model_doc/auto#transformers.AutoTokenizer). Consultez [PreTrainedTokenizer.encode()](/docs/transformers/main/fr/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) et [PreTrainedTokenizer.__call__()](/docs/transformers/main/fr/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) pour plus de détails. [Que sont les identifiants d'entrée ?](../glossary#input-ids)

attention_mask (`torch.Tensor` de forme `(batch_size, sequence_length)`, *facultatif*) : Masque pour éviter d'appliquer l'attention aux indices des jetons de bourrage. Les valeurs du masque sont choisies dans `[0, 1]` : - 1 pour les jetons qui ne sont **pas masqués**, - 0 pour les jetons qui sont **masqués**. [Qu'est-ce qu'un masque d'attention ?](../glossary#attention-mask)

position_ids (`torch.LongTensor` de forme `(batch_size, sequence_length)`, *facultatif*) : Indices des positions des jetons de chaque séquence d'entrée dans les embeddings de position. Sélectionnés dans l'intervalle `[0, config.n_positions - 1]`.  [Que sont les identifiants de position ?](../glossary#position-ids)

inputs_embeds (`torch.Tensor` de forme `(batch_size, sequence_length, hidden_size)`, *facultatif*) : Facultativement, au lieu de passer `input_ids`, vous pouvez choisir de passer directement une représentation intégrée. Cela est utile si vous souhaitez un meilleur contrôle sur la manière de convertir les indices `input_ids` en vecteurs associés, par rapport à la matrice de recherche d'intégration interne du modèle.

labels (`torch.LongTensor` de forme `(batch_size,)`, *facultatif*) : Étiquettes pour le calcul de la perte de classification/régression de séquence. Les indices doivent être dans `[0, ..., config.num_labels - 1]`. Si `config.num_labels == 1`, une perte de régression est calculée (perte du carré moyen). Si `config.num_labels > 1`, une perte de classification est calculée (entropie croisée).

**Retourne :** [SequenceClassifierOutput](/docs/transformers/main/fr/main_classes/output#transformers.modeling_outputs.SequenceClassifierOutput) ou `tuple(torch.Tensor)`

Un [SequenceClassifierOutput](/docs/transformers/main/fr/main_classes/output#transformers.modeling_outputs.SequenceClassifierOutput) ou un tuple de `torch.Tensor` (si `return_dict=False` est passé ou lorsque `config.return_dict=False`) comprenant divers éléments selon la configuration ([EsmcConfig](/docs/transformers/main/fr/model_doc/esmc#transformers.EsmcConfig)) et les entrées.

La méthode forward de [EsmcForSequenceClassification](/docs/transformers/main/fr/model_doc/esmc#transformers.EsmcForSequenceClassification) redéfinit la méthode spéciale `__call__`.

Bien que la recette de la passe avant doive être définie dans cette fonction, il faut ensuite appeler l'instance `Module` plutôt que celle-ci, car la première gère l'exécution des étapes de prétraitement et de post-traitement, tandis que la seconde les ignore silencieusement.

- **loss** (`torch.Tensor` de forme `(1,)`, *facultatif*, renvoyé lorsque `labels` est fourni) -- Perte de classification (ou de régression si config.num_labels==1).
- **logits** (`torch.Tensor` de forme `(batch_size, config.num_labels)`) -- Scores de classification (ou de régression si config.num_labels==1) (avant SoftMax).
- **hidden_states** (`tuple(torch.Tensor)`, *facultatif*, renvoyé lorsque `output_hidden_states=True` est passé ou lorsque `config.output_hidden_states=True`) -- Tuple de `torch.Tensor` (un pour la sortie des embeddings, si le modèle possède une couche d’embedding, + un pour la sortie de chaque couche) de forme `(batch_size, sequence_length, hidden_size)`.

  États cachés du modèle à la sortie de chaque couche, ainsi que les sorties d'incorporation initiales facultatives.
- **attentions** (`tuple(torch.Tensor)`, *facultatif*, renvoyé lorsque `output_attentions=True` est passé ou lorsque `config.output_attentions=True`) -- Tuple de `torch.Tensor` (un par couche) de forme `(batch_size, num_heads, sequence_length, sequence_length)`.

  Pondérations des attentions après le softmax d'attention, utilisées pour calculer la moyenne pondérée dans les têtes d'auto-attention.

Exemple de classification mono-étiquette :

```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)
...
```

Exemple de classification multi-étiquettes :

```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)
```

[Source](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])
```

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/modeling_layers.py#L287)

**Paramètres :**

input_ids (`torch.LongTensor` de forme `(batch_size, sequence_length)`, *facultatif*) : Indices des jetons de la séquence d'entrée dans le vocabulaire. Le bourrage (padding) sera ignoré par défaut. Les indices peuvent être obtenus à l'aide de [AutoTokenizer](/docs/transformers/main/fr/model_doc/auto#transformers.AutoTokenizer). Consultez [PreTrainedTokenizer.encode()](/docs/transformers/main/fr/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) et [PreTrainedTokenizer.__call__()](/docs/transformers/main/fr/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) pour plus de détails. [Que sont les identifiants d'entrée ?](../glossary#input-ids)

attention_mask (`torch.Tensor` de forme `(batch_size, sequence_length)`, *facultatif*) : Masque pour éviter d'appliquer l'attention aux indices des jetons de bourrage. Les valeurs du masque sont choisies dans `[0, 1]` : - 1 pour les jetons qui ne sont **pas masqués**, - 0 pour les jetons qui sont **masqués**. [Qu'est-ce qu'un masque d'attention ?](../glossary#attention-mask)

position_ids (`torch.LongTensor` de forme `(batch_size, sequence_length)`, *facultatif*) : Indices des positions des jetons de chaque séquence d'entrée dans les embeddings de position. Sélectionnés dans l'intervalle `[0, config.n_positions - 1]`.  [Que sont les identifiants de position ?](../glossary#position-ids)

past_key_values (`Cache`, *facultatif*) : États cachés précalculés (clés et valeurs dans les blocs d'auto-attention et d'attention croisée) qui peuvent être utilisés pour accélérer le décodage séquentiel. Il s'agit généralement des `past_key_values` renvoyés par le modèle à une étape antérieure du décodage, lorsque `use_cache=True` ou `config.use_cache=True`. Seule une instance de [Cache](/docs/transformers/main/fr/internal/generation_utils#transformers.Cache) est autorisée en entrée, consultez notre [guide du cache kv](https://huggingface.co/docs/transformers/en/kv_cache). Si aucun `past_key_values` n'est transmis, [DynamicCache](/docs/transformers/main/fr/internal/generation_utils#transformers.DynamicCache) est initialisé par défaut. Le modèle renverra le même format de cache que celui fourni en entrée. Si `past_key_values` sont utilisés, l'utilisateur doit fournir uniquement les `input_ids` non traités (ceux dont les états de clés et de valeurs passées ne sont pas fournis à ce modèle) de forme `(batch_size, unprocessed_length)` au lieu de tous les `input_ids` de forme `(batch_size, sequence_length)`.

inputs_embeds (`torch.Tensor` de forme `(batch_size, sequence_length, hidden_size)`, *facultatif*) : Facultativement, au lieu de passer `input_ids`, vous pouvez choisir de passer directement une représentation intégrée. Cela est utile si vous souhaitez un meilleur contrôle sur la manière de convertir les indices `input_ids` en vecteurs associés, par rapport à la matrice de recherche d'intégration interne du modèle.

labels (`torch.LongTensor` de forme `(batch_size, sequence_length)`, *facultatif*) : Étiquettes pour le calcul de la perte de classification de jetons. Les indices doivent être dans `[0, ..., config.num_labels - 1]`.

use_cache (`bool`, *facultatif*) : Si défini sur `True`, les états clé-valeur de `past_key_values` sont renvoyés et peuvent être utilisés pour accélérer le décodage (voir `past_key_values`).

**Retourne :** `TokenClassifierOutput`

La méthode forward de `GenericForTokenClassification` redéfinit la méthode spéciale `__call__`.

Bien que la recette de la passe avant doive être définie dans cette fonction, il faut ensuite appeler l'instance `Module` plutôt que celle-ci, car la première gère l'exécution des étapes de prétraitement et de post-traitement, tandis que la seconde les ignore silencieusement.

