# ESMC

## 概要

ESMC (ESM Cambrian) は [BioHub](https://biohub.org/) によって公開されたタンパク質言語モデルのファミリーです。アミノ酸配列に対してマスク言語モデリングの目的関数を用いて訓練された双方向 Transformer エンコーダーです。[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 は 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)
```

[ソース](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*) : Grouped Query Attention の実装に使用する key_value ヘッドの数です。*num_key_value_heads=num_attention_heads* の場合、モデルは Multi Head Attention (MHA) を使用し、*num_key_value_heads=1* の場合は Multi Query Attention (MQA) を使用し、それ以外の場合は GQA が使用されます。マルチヘッドのチェックポイントを GQA のチェックポイントに変換する際は、各グループの key ヘッドと value ヘッドは、そのグループ内の元のすべてのヘッドを平均プーリングして構築する必要があります。詳細については、[この論文](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*) : 語彙内でパディングに使用されるトークン ID。

bos_token_id (*int*、*optional*、デフォルトは *0*) : 語彙内でストリームの開始に使用されるトークン ID。

eos_token_id (*Union[int, list[int]]*、*optional*、デフォルトは *2*) : 語彙内でストリームの終了に使用されるトークン ID。

tie_word_embeddings (*bool*、*optional*、デフォルトは *False*) : モデルの *tied_weights_keys* マッピングに従って重み埋め込みを共有するかどうか。

rope_parameters (*Union[~modeling_rope_utils.RopeParameters, dict]*, *optional*) : RoPE 埋め込みの設定パラメータを含む辞書です。この辞書には *rope_theta* の値が含まれており、より長い *max_position_embeddings* で RoPE を使用する場合にスケーリングに使用されるパラメータが任意で含まれます。

attention_bias (*bool*, *optional*, デフォルトは *False*) : セルフアテンションにおいて、クエリ、キー、バリュー、出力の投影層にバイアスを使用するかどうか。

attention_dropout (*Union[int, float]*、*optional*、デフォルトは *0.0*) : 注意確率の dropout 率です。

mlp_bias (*bool*、*optional*、デフォルトは *False*) : MLP 層の up_proj、down_proj、gate_proj 層でバイアスを使用するかどうか。

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/ja/model_doc/esmc#transformers.EsmcConfig)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを確認してください。

特定のヘッドを付加せず、生のhidden-statesを出力する素のEsmcモデル。

このモデルは [PreTrainedModel](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel) を継承しています。ライブラリがすべてのモデルに対して実装している汎用的なメソッド（ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど）については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchの[torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)のサブクラスでもあります。通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、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)*、*任意*) : 語彙における入力シーケンスのトークンインデックスです。デフォルトでは、パディングは無視されます。インデックスは [*AutoTokenizer*] を使用して取得できます。詳細については、[*PreTrainedTokenizer.encode*] および [*PreTrainedTokenizer.__call__*] を参照してください。 [入力IDとは何ですか？](../glossary#input-ids)

attention_mask (*torch.Tensor*、形状 *(batch_size, sequence_length)*、*任意*) : パディングトークンのインデックスに対するアテンションの計算を回避するためのマスク。マスクの値は *[0, 1]* から選択します:  - **マスクされない**トークンは 1、- **マスクされる**トークンは 0。  [アテンションマスクとは?](../glossary#attention-mask)

position_ids (*torch.Tensor*、shape *(batch_size, sequence_length)*、*optional*) : シーケンス内の各トークンの位置。RoPE で使用されます。デフォルト値は `arange(sequence_length)` です。 ESMC の位置は入力全体に対して絶対的なものであり、マルチチェーン入力ではチェーンの境界をまたいで *連続して* 数えられます。チェーン構造は `sequence_id` によって別途保持され、アテンションをマスクします。したがって、ライブラリの他の部分で使用されているパックシーケンス形式とは異なり、これらは 0 から再開するチェーンごとの位置 ID ではなく、チェーン構造はそれらから意図的に推論されません。

sequence_id (*torch.Tensor*、shape *(batch_size, sequence_length)*、*optional*) : チェイン認識アテンションマスキング用の整数チェーンIDテンソルです。同じ非負整数値を持つトークンは互いにアテンションできますが、異なる値を持つトークンはアテンションできません（クロスチェーンマスキング）。パディング位置は`-1`に設定し、入力は**右パディング**である必要があります（RoPEは0から始まる絶対位置を使用します）。指定された場合、`attention_mask`は無視されます。`sequence_id`を渡すとカスタムアテンションマスクが構築されますが、これには`torch>=2.6`が必要です。マルチチェーンの入力には、さらに非flashの`attn_implementation`（`'sdpa'` / `'eager'` / `'flex_attention'`）が必要です。flash attentionは単一チェーンのケースのみサポートしています。

**戻り値:** [*~modeling_outputs.BaseModelOutput*] または *tuple(torch.FloatTensor)*

*~modeling_outputs.BaseModelOutput* または *torch.FloatTensor* のタプル（*return_dict=False* が渡された場合、または *config.return_dict=False* の場合）。設定（[*EsmcConfig*]）や入力に応じて、さまざまな要素で構成されます。

[*EsmcModel*] の forward メソッドは、*__call__* という特殊メソッドをオーバーライドします。

フォワードパスのレシピはこの関数内で定義する必要がありますが、その後、この関数ではなく [*Module*] インスタンスを呼び出すべきです。前者は前処理と後処理のステップの実行を処理しますが、後者はそれらを黙って無視するためです。

- **last_hidden_state** (*torch.FloatTensor*、形状 *(batch_size, sequence_length, hidden_size)*) -- モデルの最終層の出力における隠れ状態のシーケンス。
- **hidden_states** (*tuple(torch.FloatTensor)*、*optional*、*output_hidden_states=True* が渡された場合または *config.output_hidden_states=True* の場合に返されます) -- *torch.FloatTensor* のタプル(モデルに埋め込み層がある場合は埋め込みの出力用 1 つ + 各層の出力用 1 つ)で、形状は *(batch_size, sequence_length, hidden_size)* です。

  各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
- **attentions** (*tuple(torch.FloatTensor)*、*optional*、*output_attentions=True* が渡された場合または *config.output_attentions=True* の場合に返されます) -- *torch.FloatTensor* のタプル（レイヤーごとに1つ）、形状は *(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/ja/model_doc/esmc#transformers.EsmcConfig)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを確認してください。

`language modeling`ヘッドを上に備えたEsmcモデル。

このモデルは [PreTrainedModel](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel) を継承しています。ライブラリがすべてのモデルに対して実装している汎用的なメソッド（ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど）については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchの[torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)のサブクラスでもあります。通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、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)*、*任意*) : 語彙における入力シーケンスのトークンインデックスです。デフォルトでは、パディングは無視されます。インデックスは [*AutoTokenizer*] を使用して取得できます。詳細については、[*PreTrainedTokenizer.encode*] および [*PreTrainedTokenizer.__call__*] を参照してください。 [入力IDとは何ですか？](../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]* から選択されます。 [位置IDとは何ですか？](../glossary#position-ids)

sequence_id (*torch.Tensor*、形状 *(batch_size, sequence_length)*、*任意*) : チェイン認識アテンションマスキングのためにエンコーダーへ転送される整数のチェーンIDテンソル。エンコーディングの詳細は [EsmcModel.forward()](/docs/transformers/main/ja/model_doc/esmc#transformers.EsmcModel.forward) を参照してください。

labels (*torch.LongTensor*、形状 *(batch_size, sequence_length)*、*任意*) : マスク言語モデリング損失用のラベル。ラベルが `-100` の位置は無視されます。その他の位置は `[0, config.vocab_size)` の範囲内である必要があります。

**戻り値:** [*~modeling_outputs.MaskedLMOutput*] または *tuple(torch.FloatTensor)*

*~modeling_outputs.MaskedLMOutput*、または *torch.FloatTensor* のタプル（*return_dict=False* が渡された場合、または *config.return_dict=False* の場合）。設定（[*EsmcConfig*]）や入力に応じて、さまざまな要素で構成されます。

[*EsmcForMaskedLM*] の forward メソッドは、*__call__* という特殊メソッドをオーバーライドします。

フォワードパスのレシピはこの関数内で定義する必要がありますが、その後、この関数ではなく [*Module*] インスタンスを呼び出すべきです。前者は前処理と後処理のステップの実行を処理しますが、後者はそれらを黙って無視するためです。

- **loss** (*torch.FloatTensor*、shape *(1,)*、*optional*、*labels* が指定された場合に返されます) -- Masked language modeling (MLM) の損失。
- **logits** (*torch.FloatTensor*、shape: *(batch_size, sequence_length, config.vocab_size)*) -- 言語モデリングヘッドの予測スコア（SoftMax 適用前の各語彙トークンのスコア）。
- **hidden_states** (*tuple(torch.FloatTensor)*、*optional*、*output_hidden_states=True* が渡された場合または *config.output_hidden_states=True* の場合に返されます) -- *torch.FloatTensor* のタプル(モデルに埋め込み層がある場合は埋め込みの出力用 1 つ + 各層の出力用 1 つ)で、形状は *(batch_size, sequence_length, hidden_size)* です。

  各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
- **attentions** (*tuple(torch.FloatTensor)*、*optional*、*output_attentions=True* が渡された場合または *config.output_attentions=True* の場合に返されます) -- *torch.FloatTensor* のタプル（レイヤーごとに1つ）、形状は *(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/ja/model_doc/esmc#transformers.EsmcConfig)) : モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、[from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) メソッドを確認してください。

シーケンス分類/回帰ヘッド（プーリングされた出力の上に線形層を配置したもの）を備えたESMCモデルのtransformer。GLUEタスクなどに使用されます。

このモデルは [PreTrainedModel](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel) を継承しています。ライブラリがすべてのモデルに対して実装している汎用的なメソッド（ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど）については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchの[torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)のサブクラスでもあります。通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、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.FloatTensor] = 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`、shape `(batch_size, sequence_length)`、*任意*) : 語彙における入力シーケンスのトークンインデックスです。デフォルトでは、パディングは無視されます。インデックスは [AutoTokenizer](/docs/transformers/main/ja/model_doc/auto#transformers.AutoTokenizer) を使用して取得できます。詳細については、[PreTrainedTokenizer.encode()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) および [PreTrainedTokenizer.__call__()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) を参照してください。 [入力IDとは何ですか？](../glossary#input-ids)

attention_mask (`torch.Tensor`、shape `(batch_size, sequence_length)`、*任意*) : padding トークンのインデックスに対する attention を回避するためのマスクです。マスクの値は `[0, 1]` から選択されます:  - **マスクされない**トークンは 1、- **マスクされる**トークンは 0。  [attention マスクとは?](../glossary#attention-mask)

position_ids (`torch.LongTensor`、shape `(batch_size, sequence_length)`、*任意*) : 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックスです。`[0, config.n_positions - 1]` の範囲から選択されます。 [位置 ID とは何か？](../glossary#position-ids)

inputs_embeds (`torch.FloatTensor`、shape `(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/ja/main_classes/output#transformers.modeling_outputs.SequenceClassifierOutput) または `tuple(torch.FloatTensor)`

設定([EsmcConfig](/docs/transformers/main/ja/model_doc/esmc#transformers.EsmcConfig))や入力に応じて、さまざまな要素を含む [SequenceClassifierOutput](/docs/transformers/main/ja/main_classes/output#transformers.modeling_outputs.SequenceClassifierOutput)、または `torch.FloatTensor` のタプル(`return_dict=False` が渡された場合、または `config.return_dict=False` の場合)。

[EsmcForSequenceClassification](/docs/transformers/main/ja/model_doc/esmc#transformers.EsmcForSequenceClassification) の forward メソッドは、`__call__` という特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく`Module`インスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを無視してしまいます。

- **loss** (`torch.FloatTensor`、shape `(1,)`、*optional*、`labels` が指定された場合に返されます) -- 分類（または config.num_labels==1 の場合は回帰）の損失。
- **logits** (`torch.FloatTensor`、shape `(batch_size, config.num_labels)`) -- SoftMax 適用前の分類（または config.num_labels==1 の場合は回帰）スコア。
- **hidden_states** (`tuple(torch.FloatTensor)`、*optional*、`output_hidden_states=True` が渡された場合または `config.output_hidden_states=True` の場合に返されます) -- `torch.FloatTensor` のタプル（埋め込み層を持つモデルの場合、埋め込みの出力用が 1 つ、各層の出力用が 1 つずつ）で、形状は `(batch_size, sequence_length, hidden_size)` です。

  各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
- **attentions** (`tuple(torch.FloatTensor)`、*optional*、`output_attentions=True` が渡された場合または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）で、形状は `(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.FloatTensor | 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`、shape `(batch_size, sequence_length)`、*任意*) : 語彙における入力シーケンスのトークンインデックスです。デフォルトでは、パディングは無視されます。インデックスは [AutoTokenizer](/docs/transformers/main/ja/model_doc/auto#transformers.AutoTokenizer) を使用して取得できます。詳細については、[PreTrainedTokenizer.encode()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) および [PreTrainedTokenizer.__call__()](/docs/transformers/main/ja/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) を参照してください。 [入力IDとは何ですか？](../glossary#input-ids)

attention_mask (`torch.Tensor`、shape `(batch_size, sequence_length)`、*任意*) : padding トークンのインデックスに対する attention を回避するためのマスクです。マスクの値は `[0, 1]` から選択されます:  - **マスクされない**トークンは 1、- **マスクされる**トークンは 0。  [attention マスクとは?](../glossary#attention-mask)

position_ids (`torch.LongTensor`、shape `(batch_size, sequence_length)`、*任意*) : 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックスです。`[0, config.n_positions - 1]` の範囲から選択されます。 [位置 ID とは何か？](../glossary#position-ids)

past_key_values (`Cache`, *任意*) : 逐次デコードを高速化するために使用できる、事前計算された隠れ状態（自己アテンションブロックおよびクロスアテンションブロック内のキーとバリュー）です。通常、`use_cache=True` または `config.use_cache=True` が設定されている場合、デコードの以前の段階でモデルが返した `past_key_values` で構成されます。入力として許可されるのは [Cache](/docs/transformers/main/ja/internal/generation_utils#transformers.Cache) インスタンスのみです。[kv cache ガイド](https://huggingface.co/docs/transformers/en/kv_cache) を参照してください。`past_key_values` が渡されない場合、デフォルトで [DynamicCache](/docs/transformers/main/ja/internal/generation_utils#transformers.DynamicCache) が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。`past_key_values` を使用する場合は、すべての `input_ids`（形状 `(batch_size, sequence_length)`）の代わりに、このモデルに過去のキーバリュー状態が与えられていない未処理の `input_ids`（形状 `(batch_size, unprocessed_length)`）のみを入力する必要があります。

inputs_embeds (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`、*任意*) : `input_ids` を渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込み参照行列よりも、`input_ids` のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。

labels (`torch.LongTensor`、shape `(batch_size, sequence_length)`、*optional*) : トークン分類損失を計算するためのラベル。インデックスは `[0, ..., config.num_labels - 1]` の範囲である必要があります。

use_cache (`bool`, *任意*) : `True`に設定すると、`past_key_values`のキーバリュー状態が返され、デコーディングの高速化に利用できます（`past_key_values`を参照）。

**戻り値:** `TokenClassifierOutput`

`GenericForTokenClassification`のforwardメソッドは、`__call__`特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく`Module`インスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを無視してしまいます。

