Transformers 文件
CTRL
並獲得增強的文件體驗
開始使用
CTRL
概述
CTRL 模型由 Nitish Shirish Keskar*、Bryan McCann*、Lav R. Varshney、Caiming Xiong 和 Richard Socher 在 CTRL: A Conditional Transformer Language Model for Controllable Generation 中提出。它是一種因果(單向)轉換器,使用語言建模在約 140 GB 文字資料的大型語料庫上進行預訓練,其中第一個 token 保留為控制碼(如連結、書籍、維基百科等)。
論文摘要如下:
大規模語言模型顯示出有前景的文字生成能力,但使用者無法輕鬆控制生成文字的特定方面。我們釋出了 CTRL,一個擁有 16.3 億引數的條件轉換器語言模型,經過訓練以控制碼為條件,控制風格、內容和任務特定行為。控制碼源自與原始文字自然共存的結構,保留了無監督學習的優勢,同時提供了對文字生成的更明確控制。這些程式碼還允許 CTRL 預測在給定序列的情況下,訓練資料的哪些部分最有可能。這為透過基於模型的源歸因分析大量資料提供了一種潛在方法。
此模型由 keskarnitishr 貢獻。原始程式碼可在 此處 找到。
使用技巧
- CTRL 使用控制碼生成文字:它要求生成文字以特定單詞、句子或連結開頭才能生成連貫的文字。有關更多資訊,請參閱原始實現。
- CTRL 是一個具有絕對位置嵌入的模型,因此通常建議在右側而非左側填充輸入。
- CTRL 採用因果語言建模 (CLM) 目標進行訓練,因此在預測序列中的下一個 token 方面表現出色。利用此功能,CTRL 可以生成語法連貫的文字,這可以在 run_generation.py 示例指令碼中觀察到。
- PyTorch 模型可以將
past_key_values
作為輸入,這是先前計算的鍵/值注意力對。TensorFlow 模型接受past
作為輸入。使用past_key_values
值可以防止模型在文字生成上下文中重新計算預計算值。有關此引數用法的更多資訊,請參閱forward
方法。
資源
CTRLConfig
類 transformers.CTRLConfig
< 源 >( 詞彙表大小 = 246534 位置數 = 256 嵌入維度 = 1280 dff = 8192 層數 = 48 頭數 = 16 殘差丟棄率 = 0.1 嵌入丟棄率 = 0.1 層歸一化 epsilon = 1e-06 初始化範圍 = 0.02 使用快取 = True **kwargs )
引數
- vocab_size (
int
, 可選, 預設值為 246534) — CTRL 模型的詞彙表大小。定義了呼叫 CTRLModel 或 TFCTRLModel 時傳入的inputs_ids
可以表示的不同 token 的數量。 - n_positions (
int
, 可選, 預設值為 256) — 此模型可能使用的最大序列長度。通常為了以防萬一設定為較大的值(例如 512 或 1024 或 2048)。 - n_embd (
int
, 可選, 預設值為 1280) — 嵌入和隱藏狀態的維度。 - dff (
int
, 可選, 預設值為 8192) — 前饋網路 (FFN) 內部維度的維度。 - n_layer (
int
, 可選, 預設值為 48) — Transformer 編碼器中的隱藏層數量。 - n_head (
int
, 可選, 預設值為 16) — Transformer 編碼器中每個注意力層的注意力頭數量。 - resid_pdrop (
float
, 可選, 預設值為 0.1) — 嵌入、編碼器和池化器中所有全連線層的丟棄機率。 - embd_pdrop (
int
, 可選, 預設值為 0.1) — 嵌入的丟棄率。 - layer_norm_epsilon (
float
, 可選, 預設值為 1e-06) — 在層歸一化層中使用的 epsilon - initializer_range (
float
, 可選, 預設值為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - use_cache (
bool
, 可選, 預設值為True
) — 模型是否應返回最後一個鍵/值注意力(並非所有模型都使用)。
這是用於儲存 CTRLModel 或 TFCTRLModel 配置的配置類。它用於根據指定的引數例項化 CTRL 模型,定義模型架構。使用預設值例項化配置將生成與 SalesForce 的 Salesforce/ctrl 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關這些方法的更多資訊,請閱讀 PretrainedConfig 的文件。
示例
>>> from transformers import CTRLConfig, CTRLModel
>>> # Initializing a CTRL configuration
>>> configuration = CTRLConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = CTRLModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
CTRL分詞器
類 transformers.CTRLTokenizer
< 源 >( 詞彙表文件 合併檔案 未知標記 = '<unk>' **kwargs )
構建 CTRL 分詞器。基於位元組對編碼。
此分詞器繼承自 PreTrainedTokenizer,其中包含了大多數主要方法。使用者應參閱此超類以獲取有關這些方法的更多資訊。
CTRLModel
類 transformers.CTRLModel
< 源 >( 配置 )
引數
- config (CTRLModel) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法以載入模型權重。
裸露的 Ctrl 模型,輸出原始隱藏狀態,不帶任何特定頭部。
此模型繼承自 PreTrainedModel。查閱超類文件以獲取庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並查閱 PyTorch 文件以獲取所有與通用使用和行為相關的事項。
前向傳播
< 源 >( input_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[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 **kwargs ) → transformers.modeling_outputs.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, input_ids_length)
) —input_ids_length
=sequence_length
,如果past_key_values
為None
,否則為past_key_values[0].shape[-2]
(輸入過去鍵值狀態的sequence_length
)。詞彙表中輸入序列 token 的索引。如果使用
past_key_values
,則只有未計算過過去值的輸入 ID 應作為input_ids
傳入。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參見 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- past_key_values (
tuple[tuple[torch.FloatTensor]]
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前期返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- Cache 例項,請參閱我們的 kv 快取指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量。這也被稱為傳統快取格式。
模型將輸出與輸入相同的快取格式。如果沒有傳入
past_key_values
,則將返回傳統快取格式。如果使用
past_key_values
,使用者可以選擇只輸入形狀為(batch_size, 1)
的最後一個input_ids
(那些沒有將過去鍵值狀態提供給此模型的 ID),而不是形狀為(batch_size, sequence_length)
的所有input_ids
。 - attention_mask (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充 token 索引執行注意力的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼。
- token_type_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於指示輸入的第一部分和第二部分的段 token 索引。索引選擇範圍為[0, 1]
:- 0 對應於 句子 A token,
- 1 對應於 句子 B token。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 輸入序列中每個 token 在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - head_mask (
torch.FloatTensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼。
- inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 可選地,您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您希望對如何將input_ids
索引轉換為關聯向量具有比模型內部嵌入查詢矩陣更多的控制,這將非常有用。 - use_cache (
bool
, 可選) — 如果設定為True
,則返回past_key_values
鍵值狀態,可用於加速解碼(參見past_key_values
)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是純元組。
返回
transformers.modeling_outputs.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPast 或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置(CTRLConfig)和輸入的不同元素。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。如果使用了
past_key_values
,則只輸出形狀為(batch_size, 1, hidden_size)
的序列的最後一個隱藏狀態。 -
past_key_values (
Cache
, 可選, 當傳遞use_cache=True
或config.use_cache=True
時返回) — 這是一個 Cache 例項。有關更多詳細資訊,請參閱我們的 kv 快取指南。包含預先計算的隱藏狀態(自注意力塊中的鍵和值,如果
config.is_encoder_decoder=True
,則可選地包含交叉注意力塊中的鍵和值),可用於(參見past_key_values
輸入)加速順序解碼。 -
hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 每個層的輸出一個)的形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組(每個層一個)的形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
CTRLModel 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應該呼叫 Module
例項而不是這個函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, CTRLModel
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("Salesforce/ctrl")
>>> model = CTRLModel.from_pretrained("Salesforce/ctrl")
>>> # CTRL was trained with control codes as the first token
>>> inputs = tokenizer("Opinion My dog is cute", return_tensors="pt")
>>> assert inputs["input_ids"][0, 0].item() in tokenizer.control_codes.values()
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 5, 1280]
CTRLLMHeadModel
class transformers.CTRLLMHeadModel
< source >( 配置 )
引數
- config (CTRLLMHeadModel) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法以載入模型權重。
帶語言建模頭(權重與輸入嵌入繫結)的 CTRL 模型 Transformer。
此模型繼承自 PreTrainedModel。查閱超類文件以獲取庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並查閱 PyTorch 文件以獲取所有與通用使用和行為相關的事項。
前向傳播
< source >( input_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = 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 **kwargs ) → transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, input_ids_length)
) —input_ids_length
=sequence_length
,如果past_key_values
為None
,否則為past_key_values[0].shape[-2]
(輸入過去鍵值狀態的sequence_length
)。詞彙表中輸入序列 token 的索引。如果使用
past_key_values
,則只有未計算過過去值的輸入 ID 應作為input_ids
傳入。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參見 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- past_key_values (
tuple[tuple[torch.FloatTensor]]
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前期返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- Cache 例項,請參閱我們的 kv 快取指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量。這也被稱為傳統快取格式。
模型將輸出與輸入相同的快取格式。如果沒有傳入
past_key_values
,則將返回傳統快取格式。如果使用
past_key_values
,使用者可以選擇只輸入形狀為(batch_size, 1)
的最後一個input_ids
(那些沒有將過去鍵值狀態提供給此模型的 ID),而不是形狀為(batch_size, sequence_length)
的所有input_ids
。 - attention_mask (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充 token 索引執行注意力的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼。
- token_type_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於指示輸入的第一部分和第二部分的段 token 索引。索引選擇範圍為[0, 1]
:- 0 對應於 句子 A token,
- 1 對應於 句子 B token。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 輸入序列中每個 token 在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - head_mask (
torch.FloatTensor
,形狀為(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)
,可選) — 用於語言建模的標籤。請注意,標籤在模型內部會偏移,即您可以設定labels = input_ids
。所有設定為-100
的標籤都會被忽略(被掩碼),損失只針對[0, ..., config.vocab_size]
範圍內的標籤計算。 - use_cache (
bool
, 可選) — 如果設定為True
,則返回past_key_values
鍵值狀態,可用於加速解碼(參見past_key_values
)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是純元組。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithPast 或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置(CTRLConfig)和輸入的不同元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
past_key_values (
Cache
, 可選, 當傳遞use_cache=True
或config.use_cache=True
時返回) — 這是一個 Cache 例項。有關更多詳細資訊,請參閱我們的 kv 快取指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
hidden_states (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 每個層的輸出一個)的形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組(每個層一個)的形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
CTRLLMHeadModel 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應該呼叫 Module
例項而不是這個函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> import torch
>>> from transformers import AutoTokenizer, CTRLLMHeadModel
>>> tokenizer = AutoTokenizer.from_pretrained("Salesforce/ctrl")
>>> model = CTRLLMHeadModel.from_pretrained("Salesforce/ctrl")
>>> # CTRL was trained with control codes as the first token
>>> inputs = tokenizer("Wikipedia The llama is", return_tensors="pt")
>>> assert inputs["input_ids"][0, 0].item() in tokenizer.control_codes.values()
>>> sequence_ids = model.generate(inputs["input_ids"])
>>> sequences = tokenizer.batch_decode(sequence_ids)
>>> sequences
['Wikipedia The llama is a member of the family Bovidae. It is native to the Andes of Peru,']
>>> outputs = model(**inputs, labels=inputs["input_ids"])
>>> round(outputs.loss.item(), 2)
9.21
>>> list(outputs.logits.shape)
[1, 5, 246534]
CTRLForSequenceClassification
class transformers.CTRLForSequenceClassification
< source >( 配置 )
引數
- config (CTRLForSequenceClassification) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法以載入模型權重。
帶序列分類頭(線性層)的 CTRL 模型 Transformer。CTRLForSequenceClassification 使用最後一個 token 進行分類,與其他因果模型(如 GPT-2)一樣。由於它對最後一個 token 進行分類,因此需要知道最後一個 token 的位置。如果配置中定義了 pad_token_id
,它會找到每行中不是填充 token 的最後一個 token。如果沒有定義 pad_token_id
,它只會簡單地獲取批次中每行的最後一個值。由於當傳入 inputs_embeds
而不是 input_ids
時無法猜測填充 token,因此它也會執行相同的操作(獲取批次中每行的最後一個值)。
此模型繼承自 PreTrainedModel。查閱超類文件以獲取庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並查閱 PyTorch 文件以獲取所有與通用使用和行為相關的事項。
前向傳播
< source >( input_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = 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.SequenceClassifierOutput 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, input_ids_length)
) —input_ids_length
=sequence_length
,如果past_key_values
為None
,否則為past_key_values[0].shape[-2]
(輸入過去鍵值狀態的sequence_length
)。詞彙表中輸入序列 token 的索引。如果使用
past_key_values
,則只有未計算過過去值的輸入 ID 應作為input_ids
傳入。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參見 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- past_key_values (
tuple[tuple[torch.FloatTensor]]
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前期返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- Cache 例項,請參閱我們的 kv 快取指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量。這也被稱為傳統快取格式。
模型將輸出與輸入相同的快取格式。如果沒有傳入
past_key_values
,則將返回傳統快取格式。如果使用
past_key_values
,使用者可以選擇只輸入形狀為(batch_size, 1)
的最後一個input_ids
(那些沒有將過去鍵值狀態提供給此模型的 ID),而不是形狀為(batch_size, sequence_length)
的所有input_ids
。 - attention_mask (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充 token 索引執行注意力的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼。
- token_type_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於指示輸入的第一部分和第二部分的段 token 索引。索引選擇範圍為[0, 1]
:- 0 對應於 句子 A token,
- 1 對應於 句子 B token。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 輸入序列中每個 token 在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - head_mask (
torch.FloatTensor
,形狀為(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
,則計算分類損失(交叉熵)。 - use_cache (
bool
, 可選) — 如果設定為True
,則返回past_key_values
鍵值狀態,可用於加速解碼(參見past_key_values
)。 - 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
),包含根據配置(CTRLConfig)和輸入的不同元素。
-
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)
, 可選, 當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 每個層的輸出一個)的形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
, 可選, 當傳遞output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組(每個層一個)的形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
CTRLForSequenceClassification 的前向方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應該呼叫 Module
例項而不是這個函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
單標籤分類示例
>>> import torch
>>> from transformers import AutoTokenizer, CTRLForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("Salesforce/ctrl")
>>> model = CTRLForSequenceClassification.from_pretrained("Salesforce/ctrl")
>>> # CTRL was trained with control codes as the first token
>>> inputs = tokenizer("Opinion My dog is cute", return_tensors="pt")
>>> assert inputs["input_ids"][0, 0].item() in tokenizer.control_codes.values()
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_id = logits.argmax().item()
>>> model.config.id2label[predicted_class_id]
'LABEL_0'
>>> import torch
>>> torch.manual_seed(42)
>>> # 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 = CTRLForSequenceClassification.from_pretrained("Salesforce/ctrl", num_labels=num_labels)
>>> labels = torch.tensor(1)
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
0.93
多標籤分類示例
>>> import torch
>>> from transformers import AutoTokenizer, CTRLForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("Salesforce/ctrl")
>>> model = CTRLForSequenceClassification.from_pretrained(
... "Salesforce/ctrl", problem_type="multi_label_classification"
... )
>>> # CTRL was trained with control codes as the first token
>>> inputs = tokenizer("Opinion My dog is cute", return_tensors="pt")
>>> assert inputs["input_ids"][0, 0].item() in tokenizer.control_codes.values()
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_id = logits.argmax().item()
>>> model.config.id2label[predicted_class_id]
'LABEL_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 = CTRLForSequenceClassification.from_pretrained("Salesforce/ctrl", num_labels=num_labels)
>>> num_labels = len(model.config.id2label)
>>> labels = torch.nn.functional.one_hot(torch.tensor([predicted_class_id]), num_classes=num_labels).to(
... torch.float
... )
>>> loss = model(**inputs, labels=labels).loss
>>> loss.backward()
TFCTRLModel
類 transformers.TFCTRLModel
< 來源 >( config *inputs **kwargs )
引數
- config (CTRLConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法載入模型權重。
不帶任何特定頂部的 CTRL 模型 Transformer,輸出原始隱藏狀態。
此模型繼承自 TFPreTrainedModel。請查閱超類文件以瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
此模型也是 keras.Model 的子類。將其用作常規 TF 2.0 Keras 模型,並參考 TF 2.0 文件以瞭解所有與一般用法和行為相關的事項。
transformers
中的 TensorFlow 模型和層接受兩種輸入格式
- 所有輸入作為關鍵字引數(如 PyTorch 模型),或
- 所有輸入作為第一個位置引數中的列表、元組或字典。
支援第二種格式的原因是 Keras 方法在將輸入傳遞給模型和層時更喜歡這種格式。由於這種支援,當使用 model.fit()
等方法時,一切都應該“正常工作”——只需以 model.fit()
支援的任何格式傳遞輸入和標籤即可!但是,如果你想在 Keras 方法(如 fit()
和 predict()
)之外使用第二種格式,例如在使用 Keras Functional
API 建立自己的層或模型時,你可以使用三種可能性來將所有輸入張量收集到第一個位置引數中
- 只有一個
input_ids
的單個張量,沒有其他:model(input_ids)
- 長度可變的列表,包含一個或多個輸入張量,按文件字串中給出的順序:
model([input_ids, attention_mask])
或model([input_ids, attention_mask, token_type_ids])
- 一個字典,其中包含一個或多個與文件字串中給出的輸入名稱關聯的輸入張量:
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
請注意,當透過 子類化 建立模型和層時,您無需擔心這些,因為您可以像傳遞給任何其他 Python 函式一樣傳遞輸入!
呼叫
< 來源 >( input_ids: TFModelInputType | None = None past_key_values: Optional[tuple[tuple[Union[np.ndarray, tf.Tensor]]]] = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: 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 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.TFBaseModelOutputWithPast 或 tuple(tf.Tensor)
引數
- input_ids (
Numpy 陣列
或tf.Tensor
,形狀為(batch_size, input_ids_length)
) —input_ids_length
=sequence_length
如果past
為None
,否則為past[0].shape[-2]
(輸入過去鍵值狀態的sequence_length
)。詞彙表中輸入序列 token 的索引。
如果使用
past
,則只有未計算過過去值的 input ID 才應作為input_ids
傳入。索引可以使用 AutoTokenizer 獲取。更多詳細資訊請參見 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- past (
list[tf.Tensor]
,長度為config.n_layers
) — 包含模型計算的預計算隱藏狀態(注意力塊中的鍵和值)(請參閱下面的past
輸出)。可用於加速順序解碼。已計算過 past 的 token ID 不應作為 input ID 傳遞。 - attention_mask (
tf.Tensor
或Numpy 陣列
,形狀為(batch_size, sequence_length)
,可選) — 用於避免在填充 token 索引上執行注意力的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼。
- token_type_ids (
tf.Tensor
或Numpy 陣列
,形狀為(batch_size, input_ids_length)
,可選) — 分段 token 索引,用於指示輸入的第一和第二部分。索引選擇在[0, 1]
之間:- 0 對應於 句子 A token,
- 1 對應於 句子 B token。
- position_ids (
tf.Tensor
或Numpy 陣列
,形狀為(batch_size, input_ids_length)
,可選) — 每個輸入序列 token 在位置嵌入中的位置索引。選擇範圍為[0, config.max_position_embeddings - 1]
。 - head_mask (
torch.FloatTensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼。
- inputs_embeds (
tf.Tensor
或Numpy 陣列
,形狀為(batch_size, input_ids_length, hidden_size)
,可選) — 可選地,你可以選擇直接傳入嵌入表示而不是input_ids
。如果你想對input_ids
索引如何轉換為關聯向量擁有比模型內部嵌入查詢矩陣更多的控制權,這將很有用。 - use_cache (
bool
, 可選) — 如果設定為True
,則返回past
鍵值狀態,可用於加速解碼(參見past
)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。更多詳細資訊請參見返回張量下的attentions
。此引數只能在 eager 模式下使用,在圖模式下將使用配置中的值。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。更多詳細資訊請參見返回張量下的hidden_states
。此引數只能在 eager 模式下使用,在圖模式下將使用配置中的值。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 物件而不是普通元組。此引數可在 eager 模式下使用,在圖模式下該值將始終設定為 True。 - training (
bool
, 可選, 預設為False
) — 是否在訓練模式下使用模型(某些模組如 dropout 模組在訓練和評估之間有不同的行為)。
返回
transformers.modeling_tf_outputs.TFBaseModelOutputWithPast 或 tuple(tf.Tensor)
一個 transformers.modeling_tf_outputs.TFBaseModelOutputWithPast 物件或一個 tf.Tensor
元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置(CTRLConfig)和輸入的不同元素。
-
last_hidden_state (
tf.Tensor
of shape(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。如果使用了
past_key_values
,則只輸出形狀為(batch_size, 1, hidden_size)
的序列的最後一個隱藏狀態。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
TFCTRLModel 的前向方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應該呼叫 Module
例項而不是這個函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, TFCTRLModel
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("Salesforce/ctrl")
>>> model = TFCTRLModel.from_pretrained("Salesforce/ctrl")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="tf")
>>> outputs = model(inputs)
>>> last_hidden_states = outputs.last_hidden_state
TFCTRLLMHeadModel
類 transformers.TFCTRLLMHeadModel
< 來源 >( config *inputs **kwargs )
引數
- config (CTRLConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法載入模型權重。
帶語言建模頭(權重與輸入嵌入繫結)的 CTRL 模型 Transformer。
此模型繼承自 TFPreTrainedModel。請查閱超類文件以瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
此模型也是 keras.Model 的子類。將其用作常規 TF 2.0 Keras 模型,並參考 TF 2.0 文件以瞭解所有與一般用法和行為相關的事項。
transformers
中的 TensorFlow 模型和層接受兩種輸入格式
- 所有輸入作為關鍵字引數(如 PyTorch 模型),或
- 所有輸入作為第一個位置引數中的列表、元組或字典。
支援第二種格式的原因是 Keras 方法在將輸入傳遞給模型和層時更喜歡這種格式。由於這種支援,當使用 model.fit()
等方法時,一切都應該“正常工作”——只需以 model.fit()
支援的任何格式傳遞輸入和標籤即可!但是,如果你想在 Keras 方法(如 fit()
和 predict()
)之外使用第二種格式,例如在使用 Keras Functional
API 建立自己的層或模型時,你可以使用三種可能性來將所有輸入張量收集到第一個位置引數中
- 只有一個
input_ids
的單個張量,沒有其他:model(input_ids)
- 長度可變的列表,包含一個或多個輸入張量,按文件字串中給出的順序:
model([input_ids, attention_mask])
或model([input_ids, attention_mask, token_type_ids])
- 一個字典,其中包含一個或多個與文件字串中給出的輸入名稱關聯的輸入張量:
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
請注意,當透過 子類化 建立模型和層時,您無需擔心這些,因為您可以像傳遞給任何其他 Python 函式一樣傳遞輸入!
呼叫
< 來源 >( input_ids: TFModelInputType | None = None past_key_values: Optional[tuple[tuple[Union[np.ndarray, tf.Tensor]]]] = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: 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 use_cache: Optional[bool] = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None labels: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) → transformers.modeling_tf_outputs.TFCausalLMOutputWithPast 或 tuple(tf.Tensor)
引數
- input_ids (
Numpy 陣列
或tf.Tensor
,形狀為(batch_size, input_ids_length)
) —input_ids_length
=sequence_length
如果past
為None
,否則為past[0].shape[-2]
(輸入過去鍵值狀態的sequence_length
)。詞彙表中輸入序列 token 的索引。
如果使用
past
,則只有未計算過過去值的 input ID 才應作為input_ids
傳入。索引可以使用 AutoTokenizer 獲取。更多詳細資訊請參見 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- past (
list[tf.Tensor]
,長度為config.n_layers
) — 包含模型計算的預計算隱藏狀態(注意力塊中的鍵和值)(請參閱下面的past
輸出)。可用於加速順序解碼。已計算過 past 的 token ID 不應作為 input ID 傳遞。 - attention_mask (
tf.Tensor
或Numpy 陣列
,形狀為(batch_size, sequence_length)
,可選) — 用於避免在填充 token 索引上執行注意力的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示 token 未被掩碼,
- 0 表示 token 已被掩碼。
- token_type_ids (
tf.Tensor
或Numpy 陣列
,形狀為(batch_size, input_ids_length)
,可選) — 分段 token 索引,用於指示輸入的第一和第二部分。索引選擇在[0, 1]
之間:- 0 對應於 句子 A token,
- 1 對應於 句子 B token。
- position_ids (
tf.Tensor
或Numpy 陣列
,形狀為(batch_size, input_ids_length)
,可選) — 每個輸入序列 token 在位置嵌入中的位置索引。選擇範圍為[0, config.max_position_embeddings - 1]
。 - head_mask (
torch.FloatTensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼。
- inputs_embeds (
tf.Tensor
或Numpy 陣列
,形狀為(batch_size, input_ids_length, hidden_size)
,可選) — 可選地,你可以選擇直接傳入嵌入表示而不是input_ids
。如果你想對input_ids
索引如何轉換為關聯向量擁有比模型內部嵌入查詢矩陣更多的控制權,這將很有用。 - use_cache (
bool
, 可選) — 如果設定為True
,則返回past
鍵值狀態,可用於加速解碼(參見past
)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。更多詳細資訊請參見返回張量下的attentions
。此引數只能在 eager 模式下使用,在圖模式下將使用配置中的值。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。更多詳細資訊請參見返回張量下的hidden_states
。此引數只能在 eager 模式下使用,在圖模式下將使用配置中的值。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 物件而不是普通元組。此引數可在 eager 模式下使用,在圖模式下該值將始終設定為 True。 - training (
bool
, 可選, 預設為False
) — 是否在訓練模式下使用模型(某些模組如 dropout 模組在訓練和評估之間有不同的行為)。 - labels (
tf.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於計算交叉熵分類損失的標籤。索引應在[0, ..., config.vocab_size - 1]
之間。
返回
transformers.modeling_tf_outputs.TFCausalLMOutputWithPast 或 tuple(tf.Tensor)
一個 transformers.modeling_tf_outputs.TFCausalLMOutputWithPast 物件或一個 tf.Tensor
元組(如果傳入 return_dict=False
或 config.return_dict=False
),包含根據配置(CTRLConfig)和輸入的不同元素。
-
loss (形狀為
(n,)
的tf.Tensor
,可選,其中n是非掩碼標籤的數量,當提供了labels
時返回) — 語言建模損失(用於下一標記預測)。 -
logits (
tf.Tensor
of shape(batch_size, sequence_length, config.vocab_size)
) — 語言模型頭部的預測分數(SoftMax 之前每個詞彙標記的分數)。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
TFCTRLLMHeadModel 的前向方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應該呼叫 Module
例項而不是這個函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, TFCTRLLMHeadModel
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("Salesforce/ctrl")
>>> model = TFCTRLLMHeadModel.from_pretrained("Salesforce/ctrl")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="tf")
>>> outputs = model(inputs)
>>> logits = outputs.logits
TFCTRLForSequenceClassification
類 transformers.TFCTRLForSequenceClassification
< 來源 >( config *inputs **kwargs )
引數
- config (CTRLConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法載入模型權重。
CTRL 模型 Transformer,頂部帶有一個序列分類頭(線性層)。
TFCTRLForSequenceClassification 使用最後一個 token 進行分類,就像其他因果模型(例如 GPT-1、GPT-2)一樣。
由於它對最後一個 token 進行分類,它需要知道最後一個 token 的位置。如果配置中定義了 pad_token_id
,它會在每一行中找到不是填充 token 的最後一個 token。如果沒有定義 pad_token_id
,它會簡單地取批次中每一行的最後一個值。由於當傳入 inputs_embeds
而不是 input_ids
時它無法猜測填充 token,它會執行相同的操作(取批次中每一行的最後一個值)。
此模型繼承自 TFPreTrainedModel。請查閱超類文件以瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
此模型也是 keras.Model 的子類。將其用作常規 TF 2.0 Keras 模型,並參考 TF 2.0 文件以瞭解所有與一般用法和行為相關的事項。
transformers
中的 TensorFlow 模型和層接受兩種輸入格式
- 所有輸入作為關鍵字引數(如 PyTorch 模型),或
- 所有輸入作為第一個位置引數中的列表、元組或字典。
支援第二種格式的原因是 Keras 方法在將輸入傳遞給模型和層時更喜歡這種格式。由於這種支援,當使用 model.fit()
等方法時,一切都應該“正常工作”——只需以 model.fit()
支援的任何格式傳遞輸入和標籤即可!但是,如果你想在 Keras 方法(如 fit()
和 predict()
)之外使用第二種格式,例如在使用 Keras Functional
API 建立自己的層或模型時,你可以使用三種可能性來將所有輸入張量收集到第一個位置引數中
- 只有一個
input_ids
的單個張量,沒有其他:model(input_ids)
- 長度可變的列表,包含一個或多個輸入張量,按文件字串中給出的順序:
model([input_ids, attention_mask])
或model([input_ids, attention_mask, token_type_ids])
- 一個字典,其中包含一個或多個與文件字串中給出的輸入名稱關聯的輸入張量:
model({"input_ids": input_ids, "token_type_ids": token_type_ids})
請注意,當透過 子類化 建立模型和層時,您無需擔心這些,因為您可以像傳遞給任何其他 Python 函式一樣傳遞輸入!
呼叫
< 來源 >( input_ids: TFModelInputType | None = None past_key_values: Optional[tuple[tuple[Union[np.ndarray, tf.Tensor]]]] = None attention_mask: np.ndarray | tf.Tensor | None = None token_type_ids: 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 use_cache: Optional[bool] = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None labels: np.ndarray | tf.Tensor | None = None training: Optional[bool] = False ) → transformers.modeling_tf_outputs.TFSequenceClassifierOutput 或 tuple(tf.Tensor)
引數
- input_ids (形狀為
(batch_size, input_ids_length)
的Numpy array
或tf.Tensor
) — 如果past
為None
,則input_ids_length
=sequence_length
;否則,past[0].shape[-2]
(輸入過去鍵值狀態的sequence_length
)。詞彙表中輸入序列 token 的索引。
如果使用了
past
,則只有未計算其 past 的 input ID 才應作為input_ids
傳遞。索引可以透過 AutoTokenizer 獲取。詳情請參見 PreTrainedTokenizer.call() 和 PreTrainedTokenizer.encode()。
- past (長度為
config.n_layers
的list[tf.Tensor]
) — 包含模型計算的預計算隱藏狀態(注意力塊中的鍵和值)(參見下面的past
輸出)。可用於加速順序解碼。已將其過去資訊提供給此模型的 token ID 不應作為 input ID 傳遞,因為它們已經計算。 - attention_mask (形狀為
(batch_size, sequence_length)
的tf.Tensor
或Numpy array
,可選) — 用於避免對填充 token 索引執行注意力的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示 未被掩蓋 的 token,
- 0 表示 被掩蓋 的 token。
- token_type_ids (形狀為
(batch_size, input_ids_length)
的tf.Tensor
或Numpy array
,可選) — 用於指示輸入的第一和第二部分的片段 token 索引。索引在[0, 1]
中選擇:- 0 對應於 句子 A token,
- 1 對應於 句子 B token。
- position_ids (形狀為
(batch_size, input_ids_length)
的tf.Tensor
或Numpy array
,可選) — 位置嵌入中每個輸入序列 token 位置的索引。在範圍[0, config.max_position_embeddings - 1]
中選擇。 - head_mask (形狀為
(num_heads,)
或(num_layers, num_heads)
的torch.FloatTensor
,可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值在[0, 1]
中選擇:- 1 表示頭部 未被掩蓋,
- 0 表示頭部 被掩蓋。
- inputs_embeds (形狀為
(batch_size, input_ids_length, hidden_size)
的tf.Tensor
或Numpy array
,可選) — 可選地,您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您希望對如何將input_ids
索引轉換為關聯向量擁有比模型內部嵌入查詢矩陣更多的控制,這會很有用。 - use_cache (
bool
,可選) — 如果設定為True
,則返回past
鍵值狀態,並可用於加速解碼(參見past
)。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參見返回張量下的attentions
。此引數只能在即時模式下使用,在圖模式下將使用配置中的值。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參見返回張量下的hidden_states
。此引數只能在即時模式下使用,在圖模式下將使用配置中的值。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通元組。此引數可在即時模式下使用,在圖模式下該值將始終設定為 True。 - training (
bool
,可選,預設為False
) — 是否在訓練模式下使用模型(某些模組,如 dropout 模組在訓練和評估之間的行為不同)。 - labels (形狀為
(batch_size, sequence_length)
的tf.Tensor
,可選) — 用於計算交叉熵分類損失的標籤。索引應在[0, ..., config.vocab_size - 1]
中。
返回
transformers.modeling_tf_outputs.TFSequenceClassifierOutput 或 tuple(tf.Tensor)
一個 transformers.modeling_tf_outputs.TFSequenceClassifierOutput 或一個 tf.Tensor
元組(如果傳遞 return_dict=False
或 config.return_dict=False
),包含根據配置 (CTRLConfig) 和輸入的不同元素。
-
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
TFCTRLForSequenceClassification 的前向方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應該呼叫 Module
例項而不是這個函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, TFCTRLForSequenceClassification
>>> import tensorflow as tf
>>> tokenizer = AutoTokenizer.from_pretrained("Salesforce/ctrl")
>>> model = TFCTRLForSequenceClassification.from_pretrained("Salesforce/ctrl")
>>> 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 = TFCTRLForSequenceClassification.from_pretrained("Salesforce/ctrl", num_labels=num_labels)
>>> labels = tf.constant(1)
>>> loss = model(**inputs, labels=labels).loss