# ESM

## 概要

このページでは、Meta AIのFundamental AI Research TeamによるTransformerタンパク質言語モデルのコードと事前学習済み重みを公開しています。最先端のESMFoldとESM-2、および以前に公開されたESM-1bとESM-1vを提供しています。Transformerタンパク質言語モデルは、Alexander Rives、Joshua Meier、Tom Sercu、Siddharth Goyal、Zeming Lin、Jason Liu、Demi Guo、Myle Ott、C. Lawrence Zitnick、Jerry Ma、Rob Fergusによる論文[Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences](https://www.pnas.org/content/118/15/e2016239118)で導入されました。この論文の初版は[2019年にプレプリントとして公開](https://www.biorxiv.org/content/10.1101/622803v1?versioned=true)されました。

ESM-2は、構造予測タスクの幅広い範囲において、テストされたすべての単一配列タンパク質言語モデルを上回り、原子分解能での構造予測を可能にします。Zeming Lin、Halil Akin、Roshan Rao、Brian Hie、Zhongkai Zhu、Wenting Lu、Allan dos Santos Costa、Maryam Fazel-Zarandi、Tom Sercu、Sal Candido、Alexander Rivesによる論文[Language models of protein sequences at the scale of evolution enable accurate structure prediction](https://doi.org/10.1101/2022.07.20.500902)とともに公開されました。

この論文では、ESMFoldも紹介されました。ESMFoldは、ESM-2のステムと、最先端の精度でタンパク質の折りたたみ構造を予測できるヘッドを使用します。[AlphaFold2](https://www.nature.com/articles/s41586-021-03819-2)とは異なり、ESMFoldは事前学習された大規模なタンパク質言語モデルのステムからのトークン埋め込みに依存し、推論時に複数配列アライメント（MSA）のステップを実行しません。そのため、ESMFoldのチェックポイントは完全に「スタンドアロン」であり、予測を行うために既知のタンパク質配列と構造のデータベースや関連する外部クエリツールを必要としません。その結果、推論速度が大幅に向上しています。

The abstract from "Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences" is

*人工知能の分野では、教師なし学習によって可能となったデータとモデル容量のスケール拡大が、表現学習と統計的生成における大きな進展をもたらしました。生命科学の分野では、シーケンス解析の拡大が期待されており、自然な配列の多様性に関する前例のないデータが得られることが約束されています。進化のスケールでのタンパク質言語モデリングは、生物学のための予測的かつ生成的人工知能への論理的な一歩です。この目的のため、私たちは教師なし学習を用いて、進化の多様性を網羅する2億5,000万のタンパク質配列にまたがる860億個のアミノ酸に対して、深い文脈言語モデルを訓練しました。得られたモデルは、その表現内に生物学的特性に関する情報を含んでいます。これらの表現は、配列データのみから学習されます。学習された表現空間は、アミノ酸の生化学的性質のレベルからタンパク質の遠縁相同性まで、構造を反映する多尺度な組織構造を持っています。二次構造と三次構造に関する情報は表現にエンコードされており、線形射影によって特定できます。表現学習は、幅広いアプリケーションにわたって汎用化される特徴を生成し、突然変異効果と二次構造の最先端の教師あり予測を可能にし、長距離接触予測の最先端の特徴を改善します。*

The abstract from "Language models of protein sequences at the scale of evolution enable accurate structure prediction" is

*大規模言語モデルは、スケールとともに創発的な能力を発展させることが最近明らかになっており、単純なパターンマッチングを超えて、より高度な推論や、生命に似た画像やテキストの生成を行うことが可能になっています。タンパク質配列で訓練された言語モデルは小規模なスケールで研究されてきましたが、スケールアップに伴いそれらが生物学について何を学習するのかについては、まだほとんど分かっていません。本研究では、これまで評価されてきたタンパク質の言語モデルの中で最大規模である150億パラメータまでのモデルを訓練しました。その結果、モデルをスケールアップさせることで、個々の原子の解像度でタンパク質の三次元構造を予測できる情報を学習することが明らかになりました。私たちは、タンパク質の個々の配列から直接、原子レベルの構造を高精度にエンドツーエンドで予測するESMFoldを提案します。ESMFoldは、言語モデルによって十分に理解されている低パープレキシティの配列において、AlphaFold2やRoseTTAFoldと同等の精度を有します。ESMFoldの推論はAlphaFold2より1桁速く、メタゲノム由来タンパク質の構造空間を実用的な時間スケールで探索することを可能にします。*

元のコードは[こちら](https://github.com/facebookresearch/esm)で、Meta AIのFundamental AI Researchチームによって開発されました。ESM-1b、ESM-1v、ESM-2は、[jasonliu](https://huggingface.co/jasonliu)氏と[Matt](https://huggingface.co/Rocketknight1)氏によってhuggingfaceに貢献されました。

ESMFold は [Matt](https://huggingface.co/Rocketknight1) と [Sylvain](https://huggingface.co/sgugger) によって huggingface に貢献されました。プロセス全体を通じて多大なご支援をいただいた Nikita Smetanin、Roshan Rao、Tom Sercu に心より感謝申し上げます。

## 使用のコツ

- ESMモデルは、マスク言語モデリング（MLM）の目的関数で学習されます。
- HuggingFace 版の ESMFold は、[openfold](https://github.com/aqlaboratory/openfold) ライブラリの一部を使用しています。`openfold` ライブラリは Apache License 2.0 の下でライセンスされています。

## リソース

- [テキスト分類タスクガイド](../tasks/sequence_classification)
- [トークン分類タスクガイド](../tasks/token_classification)
- [マスクド言語モデリングタスクのガイド](../tasks/masked_language_modeling)

## EsmConfig[[transformers.EsmConfig]]

#### transformers.EsmConfig[[transformers.EsmConfig]]

```python
transformers.EsmConfig(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 | None = None, mask_token_id: int | None = None, pad_token_id: int | None = None, hidden_size: int = 768, num_hidden_layers: int = 12, num_attention_heads: int = 12, intermediate_size: int = 3072, hidden_dropout_prob: float | None = 0.1, attention_probs_dropout_prob: float | None = 0.1, max_position_embeddings: int = 1026, rope_theta: float = 10000.0, initializer_range: float = 0.02, layer_norm_eps: float | None = 1e-12, position_embedding_type: str | None = 'absolute', use_cache: bool = True, emb_layer_norm_before: bool | None = None, token_dropout: bool | None = False, is_folding_model: bool | None = False, esmfold_config: dict | transformers.models.esm.configuration_esm.EsmFoldConfig | None = None, vocab_list: list[str] | tuple[str, ...] | None = None, is_decoder: bool | None = False, add_cross_attention: bool | None = False, tie_word_embeddings: bool = True, bos_token_id: int | None = None, eos_token_id: int | list[int] | None = 2)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esm/configuration_esm.py#L157)

**パラメータ:**

vocab_size (`int`, *任意*) : モデルの語彙サイズ。`input_ids`で表現できるトークンの種類数を定義します。

mask_token_id (`int`, *任意*) : 語彙におけるマスクトークンのインデックスです。これは、マスクされたトークンの数に応じて入力をスケーリングする "mask-dropout" スケーリングの仕組みがあるため、設定に含める必要があります。

pad_token_id (`int`, *任意*) : 語彙内でパディングに使用されるトークンID。

hidden_size (`int`、*任意*、デフォルトは`768`) : 隠れ表現の次元数。

num_hidden_layers (`int`, *任意*, デフォルトは `12`) : Transformer デコーダーの隠れ層の数。

num_attention_heads (`int`、*任意*、デフォルトは `12`) : Transformer デコーダーの各アテンション層におけるアテンションヘッドの数。

intermediate_size (`int`、*任意*、デフォルトは `3072`) : MLP 表現の次元数。

hidden_dropout_prob (`float`、*任意*、デフォルトは `0.1`) : embeddings、encoder、pooler 内のすべての全結合層における dropout 確率。

attention_probs_dropout_prob (`float`、*任意*、デフォルトは`0.1`) : 注意確率のドロップアウト率です。

max_position_embeddings (`int`、*任意*、デフォルトは`1026`)：このモデルが使用される可能性のある最大シーケンス長です。

rope_theta (`float`、デフォルト値は 10000.0) : RoPE 埋め込みのベース期間です。`position_embedding_type` が `"rotary"` に設定されている場合のみ使用されます。

initializer_range (`float`、*任意*、デフォルトは`0.02`) : すべての重み行列を初期化するためのtruncated_normal_initializerの標準偏差です。

layer_norm_eps (`float`、*任意*、デフォルトは `1e-12`) : layer normalization レイヤーで使用する epsilon。

position_embedding_type (`str`、*任意*、デフォルトは`"absolute"`) : 位置埋め込みの種類。`"absolute"`または"rotary"を選択します。

use_cache (`bool`、*任意*、デフォルトは `True`) : モデルが最後のキー/バリューアテンションを返すかどうか（すべてのモデルで利用されるわけではありません）。`config.is_decoder=True` の場合、またはモデルがデコーダー専用の生成モデルである場合にのみ関連します。

emb_layer_norm_before (`bool`, *任意*) : ネットワークの本体部分の前に、埋め込みの後にレイヤーノルマイズを適用するかどうか。

token_dropout (`bool`、デフォルトは`False`) : 有効にすると、マスクされたトークンは入力ドロップアウトによってドロップアウトされたかのように扱われます。

is_folding_model (`bool`、デフォルトは`False`) : これが有効な場合、ESMFold モデルが初期化されます。

esmfold_config (`dict`, *任意*) : ESMFold モジュールを初期化するための設定。

vocab_list (`list`, *任意*) : 語彙項目のリスト。

is_decoder (`bool`, *任意*, デフォルトは `False`) : モデルがデコーダーとして使用されるかどうかを指定します。`False` の場合、モデルはエンコーダーとして使用されます。

add_cross_attention (`bool`、*任意*、デフォルトは`False`) : モデルにクロスアテンション層を追加するかどうか。

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

bos_token_id (`int`, *任意*) : 語彙内でストリームの開始に使用されるトークン ID。

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

これはEsmModelの設定を保存するための設定クラスです。指定された引数に基づいてEsmモデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、[facebook/esm-1b](https://huggingface.co/facebook/esm-1b)と類似した設定が得られます。

設定オブジェクトは [PreTrainedConfig](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig) を継承し、モデルの出力を制御するために使用できます。詳細については、[PreTrainedConfig](/docs/transformers/main/ja/main_classes/configuration#transformers.PreTrainedConfig) のドキュメントを参照してください。

例:

```python
>>> from transformers import EsmModel, EsmConfig

>>> # Initializing a ESM facebook/esm-1b style configuration
>>> configuration = EsmConfig(vocab_size=33)

>>> # Initializing a model from the configuration
>>> model = EsmModel(configuration)

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

## EsmTokenizer[[transformers.EsmTokenizer]]

#### transformers.EsmTokenizer[[transformers.EsmTokenizer]]

```python
transformers.EsmTokenizer(vocab_file, unk_token = '<unk>', cls_token = '<cls>', pad_token = '<pad>', mask_token = '<mask>', eos_token = '<eos>', **kwargs)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esm/tokenization_esm.py#L33)

ESM トークナイザーを構築します。

#### build_inputs_with_special_tokens[[transformers.EsmTokenizer.build_inputs_with_special_tokens]]

```python
build_inputs_with_special_tokens(token_ids_0: list, token_ids_1: list[int] | None = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esm/tokenization_esm.py#L89)

#### get_special_tokens_mask[[transformers.EsmTokenizer.get_special_tokens_mask]]

```python
get_special_tokens_mask(token_ids_0: list, token_ids_1: list | None = None, already_has_special_tokens: bool = False)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esm/tokenization_esm.py#L103)

**パラメータ:**

token_ids_0 (`list[int]`) : 最初のシーケンスの ID のリスト。

token_ids_1 (`list[int]`, *任意*) : 第2のシーケンスのidのリスト。

already_has_special_tokens (`bool`、*任意*、デフォルトは`False`) : トークンリストが、モデル用の特殊トークンを含む形式で既に整形されているかどうかを示します。

**戻り値:** 範囲 [0, 1] 内の整数のリスト

特殊トークンには1、シーケンストークンには0を指定します。

特殊トークンが追加されていないトークンリストからシーケンスIDを取得します。このメソッドは、トークナイザーの`prepare_for_model`または`encode_plus`メソッドを使用して特殊トークンを追加する際に呼び出されます。

#### create_token_type_ids_from_sequences[[transformers.EsmTokenizer.create_token_type_ids_from_sequences]]

```python
create_token_type_ids_from_sequences(token_ids_0: list, token_ids_1: list[int] | None = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/tokenization_python.py#L1298)

**パラメータ:**

token_ids_0 (`list[int]`) : ID のリスト。

token_ids_1 (`list[int]`, *任意*) : シーケンスペア用の任意の第2のIDリスト。

**戻り値:** `list[int]`

設定されたパターンに従ったトークンタイプID。

シーケンスペア分類タスクで使用するために、渡された2つのシーケンスからマスクを作成します。

このメソッドは、トークナイザーの設定属性に基づいてトークンタイプIDを動的に構築します。
- `token_type_ids_pattern`: 使用するパターン（"all_zeros" または "bert_style"）
- `token_type_ids_include_special_tokens`: 長さの計算に特殊トークンを考慮するかどうか

例:
```python
# All zeros pattern (default, used by RoBERTa, BART, etc.)
tokenizer.token_type_ids_pattern = "all_zeros"
# Returns: [0, 0, 0, ...] for both sequences

# BERT-style pattern (first sequence gets 0s, second gets 1s)
tokenizer.token_type_ids_pattern = "bert_style"
# Returns: [0, 0, 0, ..., 1, 1, 1, ...] for sequence pairs
```

#### save_vocabulary[[transformers.EsmTokenizer.save_vocabulary]]

```python
save_vocabulary(save_directory, filename_prefix)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esm/tokenization_esm.py#L135)

## EsmModel[[transformers.EsmModel]]

#### transformers.EsmModel[[transformers.EsmModel]]

```python
transformers.EsmModel(config: EsmConfig, add_pooling_layer = True)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esm/modeling_esm.py#L606)

**パラメータ:**

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

add_pooling_layer (`bool`、*任意*、デフォルトは`True`) : プーリング層を追加するかどうか

特定のヘッドを付加せず、生のhidden-statesを出力する素のEsm Model。

このモデルは [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.EsmModel.forward]]

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

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esm/modeling_esm.py#L674)

**パラメータ:**

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

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

encoder_hidden_states (`torch.Tensor`、形状 `(batch_size, sequence_length, hidden_size)`、*任意*) : エンコーダーの最終層の出力における隠れ状態のシーケンス。モデルがデコーダーとして設定されている場合、クロスアテンションで使用されます。

encoder_attention_mask (`torch.Tensor`、形状 `(batch_size, sequence_length)`、*任意*) : エンコーダー入力のpaddingトークンインデックスに対するattentionの実行を回避するためのマスクです。モデルがデコーダーとして設定されている場合、このマスクはcross-attentionで使用されます。`[0, 1]`から選択されるマスクの値:  - **マスクされない**トークンは1、 - **マスクされる**トークンは0。

**戻り値:** [BaseModelOutputWithPoolingAndCrossAttentions](/docs/transformers/main/ja/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions) または `tuple(torch.FloatTensor)`

`torch.FloatTensor` のタプル（`return_dict=False` が渡された場合、または `config.return_dict=False` の場合）または [BaseModelOutputWithPoolingAndCrossAttentions](/docs/transformers/main/ja/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions)。設定（[EsmConfig](/docs/transformers/main/ja/model_doc/esm#transformers.EsmConfig)）や入力に応じて、さまざまな要素で構成されます。

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

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

- **last_hidden_state** (`torch.FloatTensor`、shape `(batch_size, sequence_length, hidden_size)`) -- モデルの最終層の出力における隠れ状態のシーケンス。
- **pooler_output** (`torch.FloatTensor`、shape `(batch_size, hidden_size)`) -- 補助事前学習タスクに使用される層をさらに通して処理された後、シーケンスの最初のトークン（分類トークン）の最終層の隠れ状態です。例えば、BERT 系のモデルでは、線形層と tanh 活性化関数を経て処理された後の分類トークンを返します。この線形層の重みは、事前学習中の次文予測（分類）目的から学習されます。
- **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後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
- **cross_attentions** (`tuple(torch.FloatTensor)`、*optional*、`output_attentions=True` が渡された場合、または `config.add_cross_attention=True` が渡された場合、または `config.output_attentions=True` の場合に返されます) -- `torch.FloatTensor` のタプル（各レイヤーごとに1つ）、形状は `(batch_size, num_heads, sequence_length, sequence_length)`。

  クロスアテンション層のアテンション重みは、アテンションのsoftmax適用後に計算され、クロスアテンションヘッドにおける加重平均の計算に使用されます。
- **past_key_values** (`Cache`、*任意*、`use_cache=True` が渡された場合または `config.use_cache=True` の場合に返されます) -- [Cache](/docs/transformers/main/ja/internal/generation_utils#transformers.Cache) のインスタンスです。詳細については、[kv cache ガイド](https://huggingface.co/docs/transformers/en/kv_cache)を参照してください。

  自己アテンションブロック（および `config.is_encoder_decoder=True` の場合、クロスカレンションブロック）の事前計算済みヒドゥンステート（キーとバリュー）を保持します。これらは逐次デコーディングを高速化するために使用できます（`past_key_values` 入力参照）。

## EsmForMaskedLM[[transformers.EsmForMaskedLM]]

#### transformers.EsmForMaskedLM[[transformers.EsmForMaskedLM]]

```python
transformers.EsmForMaskedLM(config: EsmConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esm/modeling_esm.py#L795)

**パラメータ:**

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

`language modeling`ヘッドを上部に備えたEsm Model。

このモデルは [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.EsmForMaskedLM.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, encoder_hidden_states: typing.Optional[torch.FloatTensor] = None, encoder_attention_mask: 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/esm/modeling_esm.py#L818)

**パラメータ:**

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` のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。

encoder_hidden_states (`torch.FloatTensor`、形状 `(batch_size, sequence_length, hidden_size)`、*任意*) : エンコーダーの最終層の出力における隠れ状態のシーケンス。モデルがデコーダーとして設定されている場合、クロスアテンションで使用されます。

encoder_attention_mask (`torch.Tensor`、形状 `(batch_size, sequence_length)`、*任意*) : エンコーダー入力のpaddingトークンインデックスに対するattentionの実行を回避するためのマスクです。モデルがデコーダーとして設定されている場合、このマスクはcross-attentionで使用されます。`[0, 1]`から選択されるマスクの値:  - **マスクされない**トークンは1、 - **マスクされる**トークンは0。

labels (`torch.LongTensor`、shape `(batch_size, sequence_length)`、*optional*) : マスク付き言語モデリング損失を計算するためのラベル。インデックスは `[-100, 0, ..., config.vocab_size]` の範囲である必要があります（`input_ids` の docstring を参照）。インデックスが `-100` に設定されたトークンは無視（マスク）され、損失は `[0, ..., config.vocab_size]` の範囲のラベルを持つトークンに対してのみ計算されます。

**戻り値:** [MaskedLMOutput](/docs/transformers/main/ja/main_classes/output#transformers.modeling_outputs.MaskedLMOutput) または `tuple(torch.FloatTensor)`

[EsmConfig](/docs/transformers/main/ja/model_doc/esm#transformers.EsmConfig) や入力に応じて、さまざまな要素で構成される [MaskedLMOutput](/docs/transformers/main/ja/main_classes/output#transformers.modeling_outputs.MaskedLMOutput)、または `torch.FloatTensor` のタプル（`return_dict=False` が渡された場合、または `config.return_dict=False` の場合）。

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

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

- **loss** (`torch.FloatTensor`、shape `(1,)`、*optional*、`labels` が指定された場合に返されます) -- マスクド言語モデリング (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, EsmForMaskedLM
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("facebook/esm-1b")
>>> model = EsmForMaskedLM.from_pretrained("facebook/esm-1b")

>>> inputs = tokenizer("The capital of France is <mask>.", return_tensors="pt")

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

>>> # retrieve index of <mask>
>>> mask_token_index = (inputs.input_ids == tokenizer.mask_token_id)[0].nonzero(as_tuple=True)[0]

>>> predicted_token_id = logits[0, mask_token_index].argmax(axis=-1)
>>> tokenizer.decode(predicted_token_id)
...

>>> labels = tokenizer("The capital of France is Paris.", return_tensors="pt")["input_ids"]
>>> # mask labels of non-<mask> tokens
>>> labels = torch.where(inputs.input_ids == tokenizer.mask_token_id, labels, -100)

>>> outputs = model(**inputs, labels=labels)
>>> round(outputs.loss.item(), 2)
...
```

## EsmForSequenceClassification[[transformers.EsmForSequenceClassification]]

#### transformers.EsmForSequenceClassification[[transformers.EsmForSequenceClassification]]

```python
transformers.EsmForSequenceClassification(config: EsmConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esm/modeling_esm.py#L888)

**パラメータ:**

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

シーケンス分類/回帰ヘッド（プーリングされた出力の上に配置された線形層）を備えたESMモデルの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.EsmForSequenceClassification.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/esm/modeling_esm.py#L899)

**パラメータ:**

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

[SequenceClassifierOutput](/docs/transformers/main/ja/main_classes/output#transformers.modeling_outputs.SequenceClassifierOutput)、または`torch.FloatTensor`のタプル（`return_dict=False`が渡された場合、または`config.return_dict=False`の場合）。設定（[EsmConfig](/docs/transformers/main/ja/model_doc/esm#transformers.EsmConfig)）や入力に応じて、さまざまな要素で構成されます。

[EsmForSequenceClassification](/docs/transformers/main/ja/model_doc/esm#transformers.EsmForSequenceClassification)の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, EsmForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("facebook/esm-1b")
>>> model = EsmForSequenceClassification.from_pretrained("facebook/esm-1b")

>>> 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 = EsmForSequenceClassification.from_pretrained("facebook/esm-1b", 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, EsmForSequenceClassification

>>> tokenizer = AutoTokenizer.from_pretrained("facebook/esm-1b")
>>> model = EsmForSequenceClassification.from_pretrained("facebook/esm-1b", 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 = EsmForSequenceClassification.from_pretrained(
...     "facebook/esm-1b", 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
```

## EsmForTokenClassification[[transformers.EsmForTokenClassification]]

#### transformers.EsmForTokenClassification[[transformers.EsmForTokenClassification]]

```python
transformers.EsmForTokenClassification(config: EsmConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esm/modeling_esm.py#L954)

**パラメータ:**

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

トークン分類ヘッド（隠れ状態の出力上に配置された線形層）を備えた Esm transformer。例えば、固有名詞認識（NER）タスクに使用されます。

このモデルは [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.EsmForTokenClassification.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/esm/modeling_esm.py#L965)

**パラメータ:**

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

**戻り値:** [TokenClassifierOutput](/docs/transformers/main/ja/main_classes/output#transformers.modeling_outputs.TokenClassifierOutput) または `tuple(torch.FloatTensor)`

[TokenClassifierOutput](/docs/transformers/main/ja/main_classes/output#transformers.modeling_outputs.TokenClassifierOutput)、または`torch.FloatTensor`のタプル(`return_dict=False`が渡された場合、または`config.return_dict=False`の場合)。設定([EsmConfig](/docs/transformers/main/ja/model_doc/esm#transformers.EsmConfig))や入力に応じて、さまざまな要素で構成されます。

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

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

- **loss** (`torch.FloatTensor`、shape `(1,)`、*optional*、`labels` が指定された場合に返されます) -- 分類損失。
- **logits** (`torch.FloatTensor`、shape `(batch_size, sequence_length, config.num_labels)`) -- 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, EsmForTokenClassification
>>> import torch

>>> tokenizer = AutoTokenizer.from_pretrained("facebook/esm-1b")
>>> model = EsmForTokenClassification.from_pretrained("facebook/esm-1b")

>>> inputs = tokenizer(
...     "HuggingFace is a company based in Paris and New York", add_special_tokens=False, return_tensors="pt"
... )

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

>>> predicted_token_class_ids = logits.argmax(-1)

>>> # Note that tokens are classified rather then input words which means that
>>> # there might be more predicted token classes than words.
>>> # Multiple token classes might account for the same word
>>> predicted_tokens_classes = [model.config.id2label[t.item()] for t in predicted_token_class_ids[0]]
>>> predicted_tokens_classes
...

>>> labels = predicted_token_class_ids
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...
```

## EsmForProteinFolding[[transformers.EsmForProteinFolding]]

#### transformers.EsmForProteinFolding[[transformers.EsmForProteinFolding]]

```python
transformers.EsmForProteinFolding(config: EsmConfig)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esm/modeling_esmfold.py#L1966)

**パラメータ:**

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

ESMForProteinFolding は、オリジナルの ESMFold モデルの HuggingFace 移植版です。ESM-2 の「ステム」にタンパク質フォールディングの「ヘッド」が接続された構成になっていますが、他の多くの出力ヘッドとは異なり、この「ヘッド」はモデルの残りの部分全体と同等のサイズと実行時間を必要とします。入力されたタンパク質の構造に関する予測情報を格納した辞書を出力します。

このモデルは [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.EsmForProteinFolding.forward]]

```python
forward(input_ids: Tensor, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.Tensor] = None, masking_pattern: typing.Optional[torch.Tensor] = None, num_recycles: int | None = None, output_hidden_states: bool | None = False, **kwargs)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/models/esm/modeling_esmfold.py#L2042)

**パラメータ:**

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

masking_pattern (`torch.LongTensor`、shape `(batch_size, sequence_length)`、*optional*) : 正則化の一形態として、学習中にマスクするトークンの位置。マスク値は`[0, 1]`から選択されます。

num_recycles (`int`, *任意*, デフォルトは `None`) : 入力シーケンスを再利用する回数。`None` の場合、デフォルトで `config.num_recycles` が使用されます。「再利用」とは、フォールディングトランクの出力をトランクの入力として再度渡すことです。学習時には、モデルが各再利用後に有効な予測を出力することを学習できるように、バッチごとに再利用回数を変化させる必要があります。推論時には、最大精度を得るために、モデルが学習された最大の値に num_recycles を設定する必要があります。したがって、この値が `None` に設定されている場合、config.max_recycles が使用されます。

output_hidden_states (`bool`、*任意*、デフォルトは`False`) : 全レイヤーの hidden states を返すかどうかを指定します。詳細は、返されるテンソルの`hidden_states`を参照してください。

**戻り値:** `EsmForProteinFoldingOutput` または `tuple(torch.FloatTensor)`

`EsmForProteinFoldingOutput`、または `torch.FloatTensor` のタプル（`return_dict=False` が渡された場合、または `config.return_dict=False` の場合）です。設定（[EsmConfig](/docs/transformers/main/ja/model_doc/esm#transformers.EsmConfig)）や入力に応じて、さまざまな要素で構成されます。

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

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

- **frames** (`torch.FloatTensor`、*任意*) -- 出力フレーム。
- **sidechain_frames** (`torch.FloatTensor`, *任意*) -- 出力されるサイドチェーンフレーム。
- **unnormalized_angles** (`torch.FloatTensor`、*任意*) -- 予測された正規化されていないバックボーンおよび側鎖の二面角。
- **angles** (`torch.FloatTensor`, *任意*) -- 予測されたバックボーンおよび側鎖の二面角。
- **positions** (`torch.FloatTensor`, *任意*) -- バックボーン原子と側鎖原子の予測された位置。
- **states** (`torch.FloatTensor`, *optional*) -- タンパク質フォールディングのトランクからの隠れ状態。
- **s_s** (`torch.FloatTensor`、*任意*) -- ESM-2 LM stem の各層の隠れ状態を連結して導出される、残基ごとの埋め込み。
- **s_z** (`torch.FloatTensor`, *オプション*) -- 残基間のペアワイズ埋め込み。
- **distogram_logits** (`torch.FloatTensor`、*任意*) -- 残基間距離を計算するために使用される distogram への入力 logits。
- **lm_logits** (`torch.FloatTensor`、*任意*) -- ESM-2 蛋白质语言模型主干输出的 logits。
- **aatype** (`torch.FloatTensor`, *optional*) -- 入力アミノ酸（AlphaFold2 のインデックス）。
- **atom14_atom_exists** (`torch.FloatTensor`, *オプション*) -- atom14 表現において各原子が存在するかどうかを示します。
- **residx_atom14_to_atom37** (`torch.FloatTensor`, *optional*) -- Mapping between atoms in the atom14 and atom37 representations.
- **residx_atom37_to_atom14** (`torch.FloatTensor`, *optional*) -- atom37 表現と atom14 表現の間の原子のマッピング。
- **atom37_atom_exists** (`torch.FloatTensor`, *optional*) -- atom37 表現において各原子が存在するかどうかを示します。
- **residue_index** (`torch.FloatTensor`、*任意*) -- タンパク質鎖における各残基のインデックスです。内部パディングトークンを使用しない限り、これは `sequence_length` までの 0 からの整数の列になります。
- **lddt_head** (`torch.FloatTensor`、*任意*) -- plddtの計算に使用されるlddt headの生出力です。
- **plddt** (`torch.FloatTensor`, *optional*) -- 残基ごとの信頼度スコア。信頼度が低い領域は、モデルの予測が不確実な箇所、またはタンパク質構造が不整である箇所を示す可能性があります。
- **ptm_logits** (`torch.FloatTensor`、*任意*) -- ptm の計算に使用される生の logits。
- **ptm** (`torch.FloatTensor`、*任意*) -- モデルが全体の構造に対して持つ高レベルの信頼性を表す TM-score の出力。
- **aligned_confidence_probs** (`torch.FloatTensor`、*任意*) -- アラインされた構造の残基ごとの信頼度スコアです。
- **predicted_aligned_error** (`torch.FloatTensor`、*任意*) -- モデルの予測と正解データ（ground truth）の間の予測誤差。
- **max_predicted_aligned_error** (`torch.FloatTensor`, *任意*) -- サンプルごとの最大予測誤差。

例:

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

>>> model = EsmForProteinFolding.from_pretrained("facebook/esmfold_v1")
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/esmfold_v1")
>>> inputs = tokenizer(["MLKNVQVQLV"], return_tensors="pt", add_special_tokens=False)  # A tiny random peptide
>>> outputs = model(**inputs)
>>> folded_positions = outputs.positions
```

