Transformers 文件
ESM
並獲得增強的文件體驗
開始使用
ESM
概述
本頁面提供了來自 Meta AI 基礎人工智慧研究團隊的 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 中介紹的。該論文的第一個版本於 2019 年預印。
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 一同釋出。
這篇論文還介紹了 ESMFold。它使用一個 ESM-2 主幹和一個頭部,可以預測具有最先進精度的摺疊蛋白質結構。與 AlphaFold2 不同,它依賴於大型預訓練蛋白質語言模型主幹的詞元嵌入,並且在推理時不執行多序列比對(MSA)步驟,這意味著 ESMFold 檢查點是完全“獨立”的——它們不需要已知蛋白質序列和結構的資料庫以及相關的外部查詢工具來進行預測,因此速度要快得多。
“Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences” 一文的摘要如下:
在人工智慧領域,由無監督學習實現的資料規模和模型容量的結合,在表示學習和統計生成方面取得了重大進展。在生命科學領域,測序的預期增長有望提供關於自然序列多樣性的前所未有資料。演化規模的蛋白質語言模型是實現生物學預測性和生成性人工智慧的合乎邏輯的一步。為此,我們使用無監督學習,在跨越演化多樣性的 2.5 億個蛋白質序列的 860 億個氨基酸上訓練一個深度上下文語言模型。最終模型在其表示中包含了關於生物學特性的資訊。這些表示僅從序列資料中學習。學習到的表示空間具有多尺度組織,反映了從氨基酸生化特性到蛋白質遠緣同源性水平的結構。關於二級和三級結構的資訊被編碼在表示中,並可以透過線性投影來識別。表示學習產生了可在多種應用中泛化的特徵,從而實現了突變效應和二級結構的最先進監督預測,並改進了用於遠距離接觸預測的最先進特徵。
“Language models of protein sequences at the scale of evolution enable accurate structure prediction” 一文的摘要如下:
最近,大型語言模型已被證明隨著規模的擴大而發展出湧現能力,超越了簡單的模式匹配,可以執行更高層次的推理並生成逼真的影像和文字。雖然在較小規模上對蛋白質序列訓練的語言模型進行了研究,但隨著它們規模的擴大,它們對生物學的瞭解仍然知之甚少。在這項工作中,我們訓練了高達 150 億引數的模型,這是迄今為止評估過的最大的蛋白質語言模型。我們發現,隨著模型規模的擴大,它們會學習到能夠以單個原子解析度預測蛋白質三維結構的資訊。我們提出了 ESMFold,用於直接從蛋白質的單個序列進行高精度的端到端原子級結構預測。對於語言模型能夠很好理解的低困惑度序列,ESMFold 的準確性與 AlphaFold2 和 RoseTTAFold 相似。ESMFold 的推理速度比 AlphaFold2 快一個數量級,使得在實際時間尺度內探索宏基因組蛋白質的結構空間成為可能。
原始程式碼可以在這裡找到,由 Meta AI 的基礎人工智慧研究團隊開發。ESM-1b、ESM-1v 和 ESM-2 由 jasonliu 和 Matt 貢獻給 huggingface。
ESMFold 由 Matt 和 Sylvain 貢獻給 huggingface,非常感謝 Nikita Smetanin、Roshan Rao 和 Tom Sercu 在整個過程中的幫助!
使用技巧
- ESM 模型使用掩碼語言模型(MLM)目標進行訓練。
- HuggingFace 移植的 ESMFold 使用了 openfold 庫的部分程式碼。`openfold` 庫採用 Apache License 2.0 許可。
資源
EsmConfig
class transformers.EsmConfig
< 來源 >( vocab_size = None mask_token_id = None pad_token_id = None hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 intermediate_size = 3072 hidden_dropout_prob = 0.1 attention_probs_dropout_prob = 0.1 max_position_embeddings = 1026 initializer_range = 0.02 layer_norm_eps = 1e-12 position_embedding_type = 'absolute' use_cache = True emb_layer_norm_before = None token_dropout = False is_folding_model = False esmfold_config = None vocab_list = None **kwargs )
引數
- vocab_size (
int
, 可選) — ESM 模型的詞彙表大小。定義了在呼叫ESMModel
時,`inputs_ids` 可以表示的不同詞元的數量。 - mask_token_id (
int
, 可選) — 詞彙表中掩碼詞元的索引。此項必須包含在配置中,因為“掩碼-丟棄”縮放技巧會根據掩碼詞元的數量來縮放輸入。 - pad_token_id (
int
, 可選) — 詞彙表中填充詞元的索引。此項必須包含在配置中,因為 ESM 程式碼的某些部分使用它而不是注意力掩碼。 - hidden_size (
int
, 可選, 預設為 768) — 編碼器層和池化層的維度。 - num_hidden_layers (
int
, 可選, 預設為 12) — Transformer 編碼器中的隱藏層數。 - num_attention_heads (
int
, 可選, 預設為 12) — Transformer 編碼器中每個注意力層的注意力頭數。 - intermediate_size (
int
, 可選, 預設為 3072) — Transformer 編碼器中“中間”層(通常稱為前饋層)的維度。 - hidden_dropout_prob (
float
, 可選, 預設為 0.1) — 嵌入層、編碼器和池化層中所有全連線層的丟棄機率。 - attention_probs_dropout_prob (
float
, 可選, 預設為 0.1) — 注意力機率的丟棄率。 - max_position_embeddings (
int
, 可選, 預設為 1026) — 此模型可能使用的最大序列長度。通常將其設定為一個較大的值以備不時之需(例如 512、1024 或 2048)。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - layer_norm_eps (
float
, 可選, 預設為 1e-12) — 層歸一化層使用的 epsilon 值。 - position_embedding_type (
str
, 可選, 預設為"absolute"
) — 位置嵌入的型別。選擇 `“absolute”`、`“relative_key”`、`“relative_key_query”`、`“rotary”` 之一。對於位置嵌入,使用 `“absolute”`。有關 `“relative_key”` 的更多資訊,請參閱 Self-Attention with Relative Position Representations (Shaw et al.)。有關 `“relative_key_query”` 的更多資訊,請參閱 Improve Transformer Models with Better Relative Position Embeddings (Huang et al.) 中的_方法 4_。 - is_decoder (
bool
, 可選, 預設為False
) — 模型是否用作解碼器。如果為False
,則模型用作編碼器。 - use_cache (
bool
, 可選, 預設為True
) — 模型是否應返回最後的鍵/值注意力(並非所有模型都使用)。僅當 `config.is_decoder=True` 時相關。 - emb_layer_norm_before (
bool
, 可選) — 是否在嵌入層之後、網路主幹之前應用層歸一化。 - token_dropout (
bool
, 預設為False
) — 啟用時,被掩碼的詞元將被視為被輸入丟棄。
這是用於儲存 ESMModel
配置的配置類。它用於根據指定的引數例項化一個 ESM 模型,定義模型架構。使用預設值例項化配置將產生與 ESM facebook/esm-1b 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
示例
>>> 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
class transformers.EsmTokenizer
< 來源 >( vocab_file unk_token = '<unk>' cls_token = '<cls>' pad_token = '<pad>' mask_token = '<mask>' eos_token = '<eos>' **kwargs )
構建一個 ESM tokenizer。
build_inputs_with_special_tokens
< source >( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None )
get_special_tokens_mask
< source >( token_ids_0: list token_ids_1: typing.Optional[list] = None already_has_special_tokens: bool = False ) → 一個範圍在 [0, 1] 內的整數列表
從未新增特殊令牌的令牌列表中檢索序列 ID。使用分詞器 prepare_for_model
或 encode_plus
方法新增特殊令牌時會呼叫此方法。
create_token_type_ids_from_sequences
< source >( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) → list[int]
建立與傳入序列對應的標記型別 ID。什麼是標記型別 ID?
如果模型有特殊的構建方式,應在子類中重寫此方法。
EsmModel
class transformers.EsmModel
< source >( config add_pooling_layer = True )
引數
- config (EsmModel) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
- add_pooling_layer (
bool
, optional, defaults toTrue
) — 是否新增池化層。
基礎的 Esm 模型,輸出原始的隱藏狀態,頂部沒有任何特定的頭(head)。
該模型繼承自 PreTrainedModel。有關庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等),請檢視超類文件。
該模型也是一個 PyTorch torch.nn.Module 的子類。可以像使用常規的 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: 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 past_key_values: typing.Optional[list[torch.FloatTensor]] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions or tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為((batch_size, sequence_length))
) — 詞彙表中輸入序列 Token 的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
, optional) — 用於避免對填充 Token 索引執行注意力計算的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示 Token 未被遮蔽,
- 0 表示 Token 被遮蔽。
- position_ids (
torch.LongTensor
,形狀為((batch_size, sequence_length))
, optional) — 位置嵌入中每個輸入序列 Token 的位置索引。在[0, config.max_position_embeddings - 1]
範圍內選擇。 - head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
, optional) — 用於置零自注意力模組中選定頭部的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示頭部 未被遮蔽,
- 0 表示頭部 被遮蔽。
- inputs_embeds (
torch.FloatTensor
,形狀為((batch_size, sequence_length), hidden_size)
, optional) — 可選地,你可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果你希望比模型內部的嵌入查詢矩陣更能控制如何將input_ids
索引轉換為相關向量,這將非常有用。 - encoder_hidden_states (
torch.Tensor
,形狀為(batch_size, sequence_length, hidden_size)
, optional) — 編碼器最後一層輸出的隱藏狀態序列。如果模型被配置為解碼器,則在交叉注意力中使用。 - encoder_attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
, optional) — 用於避免對編碼器輸入的填充 Token 索引執行注意力計算的掩碼。如果模型被配置為解碼器,則此掩碼用於交叉注意力。掩碼值在[0, 1]
中選擇:- 1 表示 Token 未被遮蔽,
- 0 表示 Token 被遮蔽。
- past_key_values (
list[torch.FloatTensor]
, optional) — 預計算的隱藏狀態(自注意力和交叉注意力塊中的鍵和值),可用於加速序列解碼。這通常由模型在解碼的先前階段返回的past_key_values
組成,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個 Cache 例項,請參閱我們的 kv 快取指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組有兩個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量。這也稱為舊版快取格式。
模型將輸出與輸入相同的快取格式。如果未傳遞
past_key_values
,則將返回舊版快取格式。如果使用
past_key_values
,使用者可以選擇只輸入最後一個input_ids
(那些沒有提供其過去鍵值狀態的 ID),形狀為(batch_size, 1)
,而不是所有形狀為(batch_size, sequence_length)
的input_ids
。 - use_cache (
bool
, optional) — 如果設定為True
,將返回past_key_values
鍵值狀態,可用於加速解碼(請參閱past_key_values
)。 - output_attentions (
bool
, optional) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions 或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或當 config.return_dict=False
時),根據配置(EsmConfig)和輸入,包含各種元素。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。 -
pooler_output (
torch.FloatTensor
,形狀為(batch_size, hidden_size)
) — 序列的第一個 Token(分類 Token)的最後一層隱藏狀態,經過用於輔助預訓練任務的層進一步處理。例如,對於 BERT 家族模型,這返回經過線性層和 tanh 啟用函式處理後的分類 Token。線性層的權重是在預訓練期間透過下一句預測(分類)目標進行訓練的。 -
hidden_states (
tuple(torch.FloatTensor)
, optional, 在傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出(如果模型有嵌入層),另一個用於每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
, optional, 在傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個),形狀為(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
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
-
past_key_values (
Cache
, optional, 在傳遞use_cache=True
或config.use_cache=True
時返回) — 它是一個 Cache 例項。有關更多詳細資訊,請參閱我們的 kv 快取指南。包含預計算的隱藏狀態(自注意力和交叉注意力塊中的鍵和值,如果 `config.is_encoder_decoder=True`,則可選),可用於(參見 `past_key_values` 輸入)加速序列解碼。
EsmModel 的 forward 方法會覆蓋 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會默默地忽略它們。
EsmForMaskedLM
class transformers.EsmForMaskedLM
< source >( config )
引數
- config (EsmForMaskedLM) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
帶有一個 `language modeling` 頭的 Esm 模型。”
該模型繼承自 PreTrainedModel。有關庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等),請檢視超類文件。
該模型也是一個 PyTorch torch.nn.Module 的子類。可以像使用常規的 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.Tensor] = 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 output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.MaskedLMOutput or tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
, optional) — 詞彙表中輸入序列 Token 的索引。預設情況下,填充將被忽略。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
, optional) — 用於避免對填充 Token 索引執行注意力計算的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示 Token 未被遮蔽,
- 0 表示 Token 被遮蔽。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
, optional) — 位置嵌入中每個輸入序列 Token 的位置索引。在[0, config.n_positions - 1]
範圍內選擇。 - head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
, optional) — 用於置零自注意力模組中選定頭部的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示頭部 未被遮蔽,
- 0 表示頭部 被遮蔽。
- inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
, optional) — 可選地,你可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果你希望比模型內部的嵌入查詢矩陣更能控制如何將input_ids
索引轉換為相關向量,這將非常有用。 - encoder_hidden_states (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
, optional) — 編碼器最後一層輸出的隱藏狀態序列。如果模型被配置為解碼器,則在交叉注意力中使用。 - encoder_attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
, optional) — 用於避免對編碼器輸入的填充 Token 索引執行注意力計算的掩碼。如果模型被配置為解碼器,則此掩碼用於交叉注意力。掩碼值在[0, 1]
中選擇:- 1 表示 Token 未被遮蔽,
- 0 表示 Token 被遮蔽。
- labels (
torch.LongTensor
,形狀為(batch_size, sequence_length)
, optional) — 用於計算掩碼語言建模損失的標籤。索引應在[-100, 0, ..., config.vocab_size]
範圍內(請參閱input_ids
文件字串)。索引設定為-100
的 Token 將被忽略(遮蔽),損失僅對標籤在[0, ..., config.vocab_size]
範圍內的 Token 計算。 - output_attentions (
bool
, optional) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.modeling_outputs.MaskedLMOutput 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.MaskedLMOutput 或一個 torch.FloatTensor
的元組(如果傳遞了 return_dict=False
或當 config.return_dict=False
時),根據配置(EsmConfig)和輸入,包含各種元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 掩碼語言建模 (MLM) 損失。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
hidden_states (
tuple(torch.FloatTensor)
, optional, 在傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出(如果模型有嵌入層),另一個用於每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
, optional, 在傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
EsmForMaskedLM 的 forward 方法會覆蓋 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> 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
class transformers.EsmForSequenceClassification
< source >( config )
引數
- config (EsmForSequenceClassification) — 包含模型所有引數的模型配置類。使用配置檔案進行初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
ESM 模型轉換器,頂部帶有一個序列分類/迴歸頭(在池化輸出之上有一個線性層),例如用於 GLUE 任務。
該模型繼承自 PreTrainedModel。有關庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等),請檢視超類文件。
該模型也是一個 PyTorch torch.nn.Module 的子類。可以像使用常規的 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< 原始碼 >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.SequenceClassifierOutput 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列標記的索引。預設情況下,填充將被忽略。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免在填充標記索引上執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示標記未被掩碼,
- 0 表示標記被掩碼。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 位置嵌入中每個輸入序列標記的位置索引。在[0, config.n_positions - 1]
範圍內選擇。 - head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於置零自注意力模組中選定頭的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示頭未被掩碼,
- 0 表示頭被掩碼。
- inputs_embeds (
torch.FloatTensor
,形狀為(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
,則計算分類損失(交叉熵)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回的張量下的 `attentions`。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回的張量下的 `hidden_states`。 - return_dict (
bool
, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.modeling_outputs.SequenceClassifierOutput 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.SequenceClassifierOutput 或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置(EsmConfig)和輸入的不同元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。 -
logits (形狀為
(batch_size, config.num_labels)
的torch.FloatTensor
) — 分類(如果 config.num_labels==1,則為迴歸)分數(SoftMax 之前)。 -
hidden_states (
tuple(torch.FloatTensor)
, optional, 在傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出(如果模型有嵌入層),另一個用於每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
, optional, 在傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
EsmForSequenceClassification 的 forward 方法會覆蓋 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會默默地忽略它們。
單標籤分類示例
>>> 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)
...
多標籤分類示例
>>> 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
class transformers.EsmForTokenClassification
< 原始碼 >( config )
引數
- config (EsmForTokenClassification) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。
Esm transformer,頂部帶有一個標記分類頭(一個線上性層之上的隱藏狀態輸出層),例如用於命名實體識別(NER)任務。
該模型繼承自 PreTrainedModel。有關庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等),請檢視超類文件。
該模型也是一個 PyTorch torch.nn.Module 的子類。可以像使用常規的 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< 原始碼 >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.TokenClassifierOutput 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列標記的索引。預設情況下,填充將被忽略。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免在填充標記索引上執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示標記未被掩碼,
- 0 表示標記被掩碼。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 位置嵌入中每個輸入序列標記的位置索引。在[0, config.n_positions - 1]
範圍內選擇。 - head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於置零自注意力模組中選定頭的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示頭未被掩碼,
- 0 表示頭被掩碼。
- inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 可選地,你可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果你希望比模型的內部嵌入查詢矩陣更好地控制如何將input_ids
索引轉換為關聯向量,這將非常有用。 - labels (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於計算標記分類損失的標籤。索引應在[0, ..., config.num_labels - 1]
範圍內。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回的張量下的 `attentions`。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回的張量下的 `hidden_states`。 - return_dict (
bool
, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。
返回
transformers.modeling_outputs.TokenClassifierOutput 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.TokenClassifierOutput 或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置(EsmConfig)和輸入的不同元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失。 -
logits (形狀為
(batch_size, sequence_length, config.num_labels)
的torch.FloatTensor
) — 分類分數(SoftMax 之前)。 -
hidden_states (
tuple(torch.FloatTensor)
, optional, 在傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(一個用於嵌入層的輸出(如果模型有嵌入層),另一個用於每層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
, optional, 在傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
EsmForTokenClassification 的 forward 方法會覆蓋 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> 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
class transformers.EsmForProteinFolding
< 原始碼 >( config )
引數
- config (EsmForProteinFolding) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。
ESMForProteinFolding 是原始 ESMFold 模型的 HuggingFace 移植版。它由一個 ESM-2 “主幹”和一個蛋白質摺疊“頭”組成,儘管與大多數其他輸出頭不同,這個“頭”在大小和執行時間上與模型的其餘部分相當!它輸出一個包含有關輸入蛋白質的預測結構資訊的字典。
該模型繼承自 PreTrainedModel。有關庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等),請檢視超類文件。
該模型也是一個 PyTorch torch.nn.Module 的子類。可以像使用常規的 PyTorch Module 一樣使用它,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
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: typing.Optional[int] = None output_hidden_states: typing.Optional[bool] = False ) → transformers.models.esm.modeling_esmfold.EsmForProteinFoldingOutput
或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列標記的索引。預設情況下,填充將被忽略。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免在填充標記索引上執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示標記未被掩碼,
- 0 表示標記被掩碼。
- position_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 位置嵌入中每個輸入序列標記的位置索引。在[0, config.n_positions - 1]
範圍內選擇。 - masking_pattern (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 訓練期間要掩碼的標記位置,作為一種正則化形式。掩碼值在[0, 1]
中選擇。 - num_recycles (
int
, 可選, 預設為None
) — 輸入序列的迴圈次數。如果為None
,則預設為config.num_recycles
。“迴圈”包括將摺疊主幹的輸出作為輸入傳回主幹。在訓練期間,迴圈次數應隨每個批次而變化,以確保模型學會在每次迴圈後輸出有效的預測。在推理期間,num_recycles 應設定為模型訓練時使用的最大值,以獲得最高精度。因此,當此值設定為None
時,將使用 config.max_recycles。 - output_hidden_states (
bool
, 可選, 預設為False
) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回的張量下的 `hidden_states`。
返回
transformers.models.esm.modeling_esmfold.EsmForProteinFoldingOutput
或 tuple(torch.FloatTensor)
一個 transformers.models.esm.modeling_esmfold.EsmForProteinFoldingOutput
或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置(EsmConfig)和輸入的不同元素。
- frames (
torch.FloatTensor
, 可選, 預設為None
) — 輸出幀。 - sidechain_frames (
torch.FloatTensor
, 可選, 預設為None
) — 輸出側鏈幀。 - unnormalized_angles (
torch.FloatTensor
, 可選, 預設為None
) — 預測的未歸一化主鏈和側鏈扭轉角。 - angles (
torch.FloatTensor
, 可選, 預設為None
) — 預測的主鏈和側鏈扭轉角。 - positions (
torch.FloatTensor
, 可選, 預設為None
) — 預測的主鏈和側鏈原子位置。 - states (
torch.FloatTensor
, 可選, 預設為None
) — 來自蛋白質摺疊主幹的隱藏狀態。 - s_s (
torch.FloatTensor
, 可選, 預設為None
) — 透過連線 ESM-2 LM 主幹的每一層的隱藏狀態得到的每個殘基的嵌入。 - s_z (
torch.FloatTensor
, 可選, 預設為None
) — 成對殘基嵌入。 - distogram_logits (
torch.FloatTensor
, 可選, 預設為None
) — 用於計算殘基距離的距離圖的輸入 logits。 - lm_logits (
torch.FloatTensor
, 可選, 預設為None
) — ESM-2 蛋白質語言模型主幹輸出的 Logits。 - aatype (
torch.FloatTensor
, 可選, 預設為None
) — 輸入氨基酸(AlphaFold2 索引)。 - atom14_atom_exists (
torch.FloatTensor
, 可選, 預設為None
) — 在 atom14 表示中每個原子是否存在。 - residx_atom14_to_atom37 (
torch.FloatTensor
, 可選, 預設為None
) — atom14 和 atom37 表示中原子之間的對映。 - residx_atom37_to_atom14 (
torch.FloatTensor
, 可選, 預設為None
) — atom37 和 atom14 表示中原子之間的對映。 - atom37_atom_exists (
torch.FloatTensor
, 可選, 預設為None
) — 在 atom37 表示中每個原子是否存在。 - residue_index (
torch.FloatTensor
, 可選, 預設為None
) — 蛋白質鏈中每個殘基的索引。除非使用內部填充標記,否則這將只是從 0 到 `sequence_length` 的整數序列。 - lddt_head (
torch.FloatTensor
, 可選, 預設為None
) — 用於計算 plddt 的 lddt 頭的原始輸出。 - plddt (
torch.FloatTensor
, 可選, 預設為None
) — 每個殘基的置信度分數。低置信度區域可能表示模型預測不確定或蛋白質結構無序的區域。 - ptm_logits (
torch.FloatTensor
, 可選, 預設為None
) — 用於計算 ptm 的原始 logits。 - ptm (
torch.FloatTensor
, 可選, 預設為None
) — TM-score 輸出,表示模型對整體結構的高階置信度。 - aligned_confidence_probs (
torch.FloatTensor
, 可選, 預設為None
) — 對齊結構的每個殘基置信度分數。 - predicted_aligned_error (
torch.FloatTensor
, 可選, 預設為None
) — 模型預測與真實值之間的預測誤差。 - max_predicted_aligned_error (
torch.FloatTensor
, 可選, 預設為None
) — 每個樣本的最大預測誤差。
EsmForProteinFolding 的 forward 方法會覆蓋 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> 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
TFEsmModel
class transformers.TFEsmModel
< 原始碼 >( config: EsmConfig add_pooling_layer = True *inputs **kwargs )
引數
- config (EsmConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法來載入模型權重。
基礎的 ESM Transformer 模型,輸出原始的隱藏狀態,沒有任何特定的頭部。
該模型繼承自 TFPreTrainedModel。請檢視超類文件以瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是一個 Keras Model 子類。可以像常規 Keras 模型一樣使用它,並參考 TF/Keras 文件瞭解與一般用法和行為相關的所有事項。
呼叫
< 原始碼 >( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None encoder_hidden_states: np.ndarray | tf.Tensor | None = None encoder_attention_mask: np.ndarray | tf.Tensor | None = None past_key_values: Optional[tuple[tuple[Union[np.ndarray, tf.Tensor]]]] = None use_cache: Optional[bool] = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: Optional[bool] = False ) → transformers.modeling_tf_outputs.TFBaseModelOutputWithPoolingAndCrossAttentions 或 tuple(tf.Tensor)
引數
- input_ids (
tf.Tensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列標記的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
tf.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免在填充標記索引上執行注意力機制的掩碼。掩碼值選自[0, 1]
:- 1 表示標記未被遮蓋,
- 0 表示標記已被遮蓋。
- position_ids (
tf.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 位置嵌入中每個輸入序列標記的位置索引。選值範圍為[0, config.max_position_embeddings - 1]
。 - head_mask (
tf.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於置零自注意力模組中選定頭的掩碼。掩碼值選自[0, 1]
:- 1 表示頭未被遮蓋,
- 0 表示頭已被遮蓋。
- inputs_embeds (
tf.Tensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 可選地,你可以不傳遞 `input_ids`,而是直接傳遞一個嵌入表示。如果你想比模型內部的嵌入查詢矩陣更好地控制如何將 `input_ids` 索引轉換為相關聯的向量,這會非常有用。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 `attentions`。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 `hidden_states`。 - return_dict (
bool
, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。 - encoder_hidden_states (
tf.Tensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 編碼器最後一層輸出的隱藏狀態序列。如果模型被配置為解碼器,則在交叉注意力機制中使用。 - encoder_attention_mask (
tf.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對編碼器輸入的填充標記索引執行注意力機制的掩碼。如果模型被配置為解碼器,則該掩碼在交叉注意力機制中使用。掩碼值選自[0, 1]
:- 1 表示標記未被遮蓋,
- 0 表示標記已被遮蓋。
- past_key_values (
tuple[tuple[tf.Tensor]]
,長度為config.n_layers
) — 包含預先計算的注意力塊的鍵和值隱藏狀態。可用於加速解碼。如果使用 `past_key_values`,使用者可以選擇只輸入最後一個 `decoder_input_ids`(那些沒有為其提供過去鍵值狀態的 `decoder_input_ids`),形狀為 `(batch_size, 1)`,而不是所有形狀為 `(batch_size, sequence_length)` 的 `decoder_input_ids`。 - use_cache (
bool
, 可選, 預設為True
) — 如果設定為 `True`,則返回 `past_key_values` 鍵值狀態,可用於加速解碼(請參閱 `past_key_values`)。訓練期間設定為 `False`,生成期間設定為 `True`。
返回
transformers.modeling_tf_outputs.TFBaseModelOutputWithPoolingAndCrossAttentions 或 tuple(tf.Tensor)
一個 transformers.modeling_tf_outputs.TFBaseModelOutputWithPoolingAndCrossAttentions 或一個 `tf.Tensor` 的元組(如果傳遞了 `return_dict=False` 或當 `config.return_dict=False` 時),包含各種元素,具體取決於配置 (EsmConfig) 和輸入。
-
last_hidden_state (
tf.Tensor
of shape(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。 -
pooler_output (
tf.Tensor
,形狀為(batch_size, hidden_size)
) — 序列第一個標記(分類標記)的最後一層隱藏狀態,經過一個線性層和一個 Tanh 啟用函式進一步處理。該線性層的權重是在預訓練期間透過下一句預測(分類)目標進行訓練的。此輸出通常不是輸入語義內容的良好摘要,通常最好對整個輸入序列的隱藏狀態進行平均或池化。
-
past_key_values (
list[tf.Tensor]
,可選,當傳遞 `use_cache=True` 或 `config.use_cache=True` 時返回) — 長度為 `config.n_layers` 的 `tf.Tensor` 列表,每個張量的形狀為 `(2, batch_size, num_heads, sequence_length, embed_size_per_head)`。包含預先計算的隱藏狀態(注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
hidden_states (
tuple(tf.Tensor)
, 可選, 當傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `tf.Tensor` 的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為 `(batch_size, sequence_length, hidden_size)`。模型在每個層輸出的隱藏狀態加上初始嵌入輸出。
-
attentions (
tuple(tf.Tensor)
, 可選, 當傳遞 `output_attentions=True` 或 `config.output_attentions=True` 時返回) — `tf.Tensor` 的元組(每層一個),形狀為 `(batch_size, num_heads, sequence_length, sequence_length)`。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple(tf.Tensor)
, 可選, 當傳遞 `output_attentions=True` 或 `config.output_attentions=True` 時返回) — `tf.Tensor` 的元組(每層一個),形狀為 `(batch_size, num_heads, sequence_length, sequence_length)`。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
TFEsmModel 的前向傳播方法,覆蓋了 `__call__` 特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, TFEsmModel
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/esm2_t6_8M_UR50D")
>>> model = TFEsmModel.from_pretrained("facebook/esm2_t6_8M_UR50D")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="tf")
>>> outputs = model(inputs)
>>> last_hidden_states = outputs.last_hidden_state
TFEsmForMaskedLM
class transformers.TFEsmForMaskedLM
< source >( config )
引數
- config (EsmConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
在 ESM 模型之上帶有一個 `語言建模` 頭的模型。
該模型繼承自 TFPreTrainedModel。請檢視超類文件以瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是一個 Keras Model 子類。可以像常規 Keras 模型一樣使用它,並參考 TF/Keras 文件瞭解與一般用法和行為相關的所有事項。
呼叫
< source >( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None encoder_hidden_states: np.ndarray | tf.Tensor | None = None encoder_attention_mask: np.ndarray | tf.Tensor | None = None labels: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: bool = False ) → transformers.modeling_tf_outputs.TFMaskedLMOutput 或 tuple(tf.Tensor)
引數
- input_ids (
tf.Tensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列標記的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
tf.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免在填充標記索引上執行注意力機制的掩碼。掩碼值選自[0, 1]
:- 1 表示標記未被遮蓋,
- 0 表示標記已被遮蓋。
- position_ids (
tf.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 位置嵌入中每個輸入序列標記的位置索引。選值範圍為[0, config.max_position_embeddings - 1]
。 - head_mask (
tf.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於置零自注意力模組中選定頭的掩碼。掩碼值選自[0, 1]
:- 1 表示頭未被遮蓋,
- 0 表示頭已被遮蓋。
- inputs_embeds (
tf.Tensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 可選地,你可以不傳遞 `input_ids`,而是直接傳遞一個嵌入表示。如果你想比模型內部的嵌入查詢矩陣更好地控制如何將 `input_ids` 索引轉換為相關聯的向量,這會非常有用。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 `attentions`。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 `hidden_states`。 - return_dict (
bool
, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。 - labels (
tf.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於計算掩碼語言建模損失的標籤。索引應在 `[-100, 0, ..., config.vocab_size]` 範圍內(請參閱 `input_ids` 的文件字串)。索引設定為 `-100` 的標記將被忽略(遮蓋),損失僅對標籤在 `[0, ..., config.vocab_size]` 範圍內的標記進行計算。 - kwargs (
dict[str, any]
, 可選, 預設為{}
) — 用於隱藏已被棄用的舊版引數。
返回
transformers.modeling_tf_outputs.TFMaskedLMOutput 或 tuple(tf.Tensor)
一個 transformers.modeling_tf_outputs.TFMaskedLMOutput 或一個 `tf.Tensor` 的元組(如果傳遞了 `return_dict=False` 或當 `config.return_dict=False` 時),包含各種元素,具體取決於配置 (EsmConfig) 和輸入。
-
loss (
tf.Tensor
of shape(n,)
, 可選, 其中 n 是非掩碼標籤的數量,當提供labels
時返回) — 掩碼語言模型 (MLM) 損失。 -
logits (
tf.Tensor
of shape(batch_size, sequence_length, config.vocab_size)
) — 語言模型頭部的預測分數(SoftMax 之前每個詞彙標記的分數)。 -
hidden_states (
tuple(tf.Tensor)
, 可選, 當傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `tf.Tensor` 的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為 `(batch_size, sequence_length, hidden_size)`。模型在每個層輸出的隱藏狀態加上初始嵌入輸出。
-
attentions (
tuple(tf.Tensor)
, 可選, 當傳遞 `output_attentions=True` 或 `config.output_attentions=True` 時返回) — `tf.Tensor` 的元組(每層一個),形狀為 `(batch_size, num_heads, sequence_length, sequence_length)`。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
TFEsmForMaskedLM 的前向傳播方法,覆蓋了 `__call__` 特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, TFEsmForMaskedLM
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/esm2_t6_8M_UR50D")
>>> model = TFEsmForMaskedLM.from_pretrained("facebook/esm2_t6_8M_UR50D")
>>> inputs = tokenizer("The capital of France is <mask>.", return_tensors="tf")
>>> logits = model(**inputs).logits
>>> # retrieve index of <mask>
>>> mask_token_index = tf.where((inputs.input_ids == tokenizer.mask_token_id)[0])
>>> selected_logits = tf.gather_nd(logits[0], indices=mask_token_index)
>>> predicted_token_id = tf.math.argmax(selected_logits, axis=-1)
TFEsmForSequenceClassification
class transformers.TFEsmForSequenceClassification
< source >( config )
引數
- config (EsmConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
ESM 模型轉換器,頂部帶有一個序列分類/迴歸頭(在池化輸出之上有一個線性層),例如用於 GLUE 任務。
該模型繼承自 TFPreTrainedModel。請檢視超類文件以瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是一個 Keras Model 子類。可以像常規 Keras 模型一樣使用它,並參考 TF/Keras 文件瞭解與一般用法和行為相關的所有事項。
呼叫
< source >( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None labels: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: bool = False ) → transformers.modeling_tf_outputs.TFSequenceClassifierOutput 或 tuple(tf.Tensor)
引數
- input_ids (
tf.Tensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列標記的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
tf.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免在填充標記索引上執行注意力機制的掩碼。掩碼值選自[0, 1]
:- 1 表示標記未被遮蓋,
- 0 表示標記已被遮蓋。
- position_ids (
tf.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 位置嵌入中每個輸入序列標記的位置索引。選值範圍為[0, config.max_position_embeddings - 1]
。 - head_mask (
tf.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於置零自注意力模組中選定頭的掩碼。掩碼值選自[0, 1]
:- 1 表示頭未被遮蓋,
- 0 表示頭已被遮蓋。
- inputs_embeds (
tf.Tensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 可選地,你可以不傳遞 `input_ids`,而是直接傳遞一個嵌入表示。如果你想比模型內部的嵌入查詢矩陣更好地控制如何將 `input_ids` 索引轉換為相關聯的向量,這會非常有用。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 `attentions`。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 `hidden_states`。 - return_dict (
bool
, 可選) — 是否返回一個 ModelOutput 而不是一個普通的元組。 - labels (
tf.Tensor
,形狀為(batch_size,)
,可選) — 用於計算序列分類/迴歸損失的標籤。索引應在 `[0, ..., config.num_labels - 1]` 範圍內。如果 `config.num_labels == 1`,則計算迴歸損失(均方損失),如果 `config.num_labels > 1`,則計算分類損失(交叉熵)。
返回
transformers.modeling_tf_outputs.TFSequenceClassifierOutput 或 tuple(tf.Tensor)
一個 transformers.modeling_tf_outputs.TFSequenceClassifierOutput 或一個 `tf.Tensor` 的元組(如果傳遞了 `return_dict=False` 或當 `config.return_dict=False` 時),包含各種元素,具體取決於配置 (EsmConfig) 和輸入。
-
loss (
tf.Tensor
,形狀為(batch_size, )
,可選,當提供labels
時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。 -
logits (
tf.Tensor
,形狀為(batch_size, config.num_labels)
) — 分類(或迴歸,如果 config.num_labels==1)分數(SoftMax 之前)。 -
hidden_states (
tuple(tf.Tensor)
, 可選, 當傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `tf.Tensor` 的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為 `(batch_size, sequence_length, hidden_size)`。模型在每個層輸出的隱藏狀態加上初始嵌入輸出。
-
attentions (
tuple(tf.Tensor)
, 可選, 當傳遞 `output_attentions=True` 或 `config.output_attentions=True` 時返回) — `tf.Tensor` 的元組(每層一個),形狀為 `(batch_size, num_heads, sequence_length, sequence_length)`。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
TFEsmForSequenceClassification 的前向傳播方法,覆蓋了 `__call__` 特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, TFEsmForSequenceClassification
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/esm2_t6_8M_UR50D")
>>> model = TFEsmForSequenceClassification.from_pretrained("facebook/esm2_t6_8M_UR50D")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="tf")
>>> logits = model(**inputs).logits
>>> predicted_class_id = int(tf.math.argmax(logits, axis=-1)[0])
>>> # 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 = TFEsmForSequenceClassification.from_pretrained("facebook/esm2_t6_8M_UR50D", num_labels=num_labels)
>>> labels = tf.constant(1)
>>> loss = model(**inputs, labels=labels).loss
TFEsmForTokenClassification
class transformers.TFEsmForTokenClassification
< source >( config )
引數
- config (EsmConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法來載入模型權重。
在 ESM 模型之上帶有一個標記分類頭的模型(在隱藏狀態輸出之上加一個線性層),例如用於命名實體識別(NER)任務。
該模型繼承自 TFPreTrainedModel。請檢視超類文件以瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是一個 Keras Model 子類。可以像常規 Keras 模型一樣使用它,並參考 TF/Keras 文件瞭解與一般用法和行為相關的所有事項。
呼叫
< source >( input_ids: TFModelInputType | None = None attention_mask: np.ndarray | tf.Tensor | None = None position_ids: np.ndarray | tf.Tensor | None = None head_mask: np.ndarray | tf.Tensor | None = None inputs_embeds: np.ndarray | tf.Tensor | None = None labels: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: bool = False ) → transformers.modeling_tf_outputs.TFTokenClassifierOutput 或 tuple(tf.Tensor)
引數
- input_ids (
tf.Tensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列標記的索引。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
tf.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 用於避免對填充標記索引執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示標記未被掩碼,
- 0 表示標記已被掩碼。
- position_ids (
tf.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 每個輸入序列標記在位置嵌入中的位置索引。在[0, config.max_position_embeddings - 1]
範圍內選擇。 - head_mask (
tf.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
, 可選) — 用於置零自注意力模組中選定頭的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示頭未被掩碼,
- 0 表示頭已被掩碼。
- inputs_embeds (
tf.Tensor
,形狀為(batch_size, sequence_length, hidden_size)
, 可選) — 可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果你想比模型內部的嵌入查詢矩陣更好地控制如何將input_ids
索引轉換為相關向量,這會非常有用。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通的元組。 - labels (
tf.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 用於計算標記分類損失的標籤。索引應在[0, ..., config.num_labels - 1]
範圍內。
返回
transformers.modeling_tf_outputs.TFTokenClassifierOutput 或 tuple(tf.Tensor)
一個 transformers.modeling_tf_outputs.TFTokenClassifierOutput 或一個 tf.Tensor
元組(如果傳遞了 return_dict=False
或當 config.return_dict=False
時),包含根據配置 (EsmConfig) 和輸入而定的各種元素。
-
loss (
tf.Tensor
,形狀為(n,)
,可選,其中 n 是未被掩蓋的標籤數量,當提供labels
時返回) — 分類損失。 -
logits (
tf.Tensor
,形狀為(batch_size, sequence_length, config.num_labels)
) — 分類分數(SoftMax 之前)。 -
hidden_states (
tuple(tf.Tensor)
, 可選, 當傳遞 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `tf.Tensor` 的元組(一個用於嵌入層的輸出 + 一個用於每層的輸出),形狀為 `(batch_size, sequence_length, hidden_size)`。模型在每個層輸出的隱藏狀態加上初始嵌入輸出。
-
attentions (
tuple(tf.Tensor)
, 可選, 當傳遞 `output_attentions=True` 或 `config.output_attentions=True` 時返回) — `tf.Tensor` 的元組(每層一個),形狀為 `(batch_size, num_heads, sequence_length, sequence_length)`。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
TFEsmForTokenClassification 的前向方法重寫了 __call__
特殊方法。
儘管前向傳播的流程需要在此函式內定義,但之後應呼叫 Module
例項而不是此函式,因為前者會處理預處理和後處理步驟,而後者會默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, TFEsmForTokenClassification
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/esm2_t6_8M_UR50D")
>>> model = TFEsmForTokenClassification.from_pretrained("facebook/esm2_t6_8M_UR50D")
>>> inputs = tokenizer(
... "HuggingFace is a company based in Paris and New York", add_special_tokens=False, return_tensors="tf"
... )
>>> logits = model(**inputs).logits
>>> predicted_token_class_ids = tf.math.argmax(logits, axis=-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] for t in predicted_token_class_ids[0].numpy().tolist()]