Transformers 文件
CodeGen
並獲得增強的文件體驗
開始使用
CodeGen
概述
CodeGen 模型由 Erik Nijkamp、Bo Pang、Hiroaki Hayashi、Lifu Tu、Huan Wang、Yingbo Zhou、Silvio Savarese 和 Caiming Xiong 在論文 《一種面向程式合成的對話正規化》(A Conversational Paradigm for Program Synthesis) 中提出。
CodeGen 是一個用於程式合成的自迴歸語言模型,它依次在 The Pile、BigQuery 和 BigPython 資料集上進行訓練。
論文摘要如下:
程式合成致力於為給定的問題規範生成一個計算機程式作為解決方案。我們提出了一種透過大型語言模型實現的對話式程式合成方法,該方法解決了先前方法中面臨的在龐大程式空間中搜索和使用者意圖規範的挑戰。我們的新方法將編寫規範和程式的過程視為使用者與系統之間的多輪對話。它將程式合成視為一個序列預測問題,其中規範以自然語言表達,期望的程式則被條件性地取樣生成。我們訓練了一系列名為 CodeGen 的大型語言模型,使用了自然語言和程式語言資料。透過資料中的弱監督以及資料規模和模型規模的擴大,簡單的自迴歸語言模型湧現出了對話能力。為了研究模型在對話式程式合成中的行為,我們開發了一個多輪程式設計基準測試(MTPB),其中解決每個問題都需要透過使用者與模型之間的多輪對話進行多步合成。我們的研究結果顯示了對話能力的湧現以及所提出的對話式程式合成正規化的有效性。此外,我們的模型 CodeGen(在 TPU-v4 上訓練,引數量高達 160 億)在 HumanEval 基準測試上超過了 OpenAI 的 Codex。我們開源了訓練庫 JaxFormer 及其檢查點:此 https URL。
該模型由 Hiroaki Hayashi 貢獻。原始程式碼可以在此處找到。
檢查點命名
- CodeGen 模型的檢查點基於不同規模和不同預訓練資料提供。
- 命名格式為:
Salesforce/codegen-{size}-{data}
,其中:size
:350M
、2B
、6B
、16B
data
:nl
: 在 The Pile 資料集上預訓練multi
: 使用nl
初始化,然後在多程式語言資料上進一步預訓練mono
: 使用multi
初始化,然後在 Python 資料上進一步預訓練
- 例如,
Salesforce/codegen-350M-mono
提供了一個 3.5 億引數的檢查點,該檢查點依次在 The Pile、多種程式語言和 Python 資料集上進行了預訓練。
使用示例
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> checkpoint = "Salesforce/codegen-350M-mono"
>>> model = AutoModelForCausalLM.from_pretrained(checkpoint)
>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint)
>>> text = "def hello_world():"
>>> completion = model.generate(**tokenizer(text, return_tensors="pt"))
>>> print(tokenizer.decode(completion[0]))
def hello_world():
print("Hello World")
hello_world()
資源
CodeGenConfig
class transformers.CodeGenConfig
< 原始碼 >( vocab_size = 50400 n_positions = 2048 n_ctx = 2048 n_embd = 4096 n_layer = 28 n_head = 16 rotary_dim = 64 n_inner = None activation_function = 'gelu_new' resid_pdrop = 0.0 embd_pdrop = 0.0 attn_pdrop = 0.0 layer_norm_epsilon = 1e-05 initializer_range = 0.02 use_cache = True bos_token_id = 50256 eos_token_id = 50256 tie_word_embeddings = False **kwargs )
引數
- vocab_size (
int
, 可選, 預設為 50400) — CodeGen 模型的詞彙表大小。定義了呼叫 CodeGenModel 時傳入的inputs_ids
可以表示的不同標記的數量。 - n_positions (
int
, 可選, 預設為 2048) — 此模型可能使用的最大序列長度。通常將其設定為一個較大的值以備不時之需(例如,512、1024 或 2048)。 - n_ctx (
int
, 可選, 預設為 2048) — 此屬性在 `CodeGenModel.__init__` 中使用,但沒有實際效果。 - n_embd (
int
, 可選, 預設為 4096) — 嵌入和隱藏狀態的維度。 - n_layer (
int
, 可選, 預設為 28) — Transformer 編碼器中的隱藏層數量。 - n_head (
int
, 可選, 預設為 16) — Transformer 編碼器中每個注意力層的注意力頭數量。 - rotary_dim (
int
, 可選, 預設為 64) — 應用旋轉位置嵌入(Rotary Position Embedding)的嵌入維度數量。 - n_inner (
int
, 可選) — 內部前饋層的維度。如果為 `None`,則將設定為 n_embd 的 4 倍。 - activation_function (
str
, 可選, 預設為"gelu_new"
) — 啟用函式,可選列表為 `["relu", "silu", "gelu", "tanh", "gelu_new"]`。 - resid_pdrop (
float
, 可選, 預設為 0.0) — 嵌入、編碼器和池化器中所有全連線層的 dropout 機率。 - embd_pdrop (
int
, 可選, 預設為 0.0) — 嵌入層的 dropout 比率。 - attn_pdrop (
float
, 可選, 預設為 0.0) — 注意力層的 dropout 比率。 - layer_norm_epsilon (
float
, 可選, 預設為 1e-05) — 層歸一化層中使用的 epsilon 值。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - use_cache (
bool
, 可選, 預設為 `True`) — 模型是否應返回最後一個鍵/值注意力(並非所有模型都使用)。 - bos_token_id (
int
, 可選, 預設為 50256) — 序列開始標記的 ID。 - eos_token_id (
int
, 可選, 預設為 50256) — 序列結束標記的 ID。 - tie_word_embeddings (
bool
, 可選, 預設為 `False`) — 模型的輸入和輸出詞嵌入是否應該繫結。注意,這僅在模型具有輸出詞嵌入層時才相關。
這是用於儲存 CodeGenModel 配置的配置類。它用於根據指定的引數例項化 CodeGen 模型,定義模型架構。使用預設值例項化配置將產生與 CodeGen Salesforce/codegen-2B-mono 架構類似的配置。配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
示例
>>> from transformers import CodeGenConfig, CodeGenModel
>>> # Initializing a CodeGen 6B configuration
>>> configuration = CodeGenConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = CodeGenModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
CodeGenTokenizer
class transformers.CodeGenTokenizer
< 原始碼 >( vocab_file merges_file errors = 'replace' unk_token = '<|endoftext|>' bos_token = '<|endoftext|>' eos_token = '<|endoftext|>' pad_token = None add_prefix_space = False add_bos_token = False return_token_type_ids = False **kwargs )
引數
- vocab_file (
str
) — 詞彙檔案的路徑。 - merges_file (
str
) — 合併檔案的路徑。 - errors (
str
, 可選, 預設為"replace"
) — 解碼位元組為 UTF-8 時遵循的正規化。有關更多資訊,請參閱 bytes.decode。 - unk_token (
str
, 可選, 預設為"<|endoftext|>"
) — 未知標記(token)。詞彙表中不存在的標記無法轉換為 ID,將被設定為此標記。 - bos_token (
str
, 可選, 預設為"<|endoftext|>"
) — 序列開始標記。 - eos_token (
str
, 可選, 預設為"<|endoftext|>"
) — 序列結束標記。 - pad_token (
str
, 可選) — 用於填充的標記,例如在批處理不同長度的序列時使用。 - add_prefix_space (
bool
, 可選, 預設為False
) — 是否在輸入前新增一個初始空格。這使得開頭的詞可以像其他詞一樣被處理。(CodeGen 分詞器透過前面的空格來檢測詞的開頭)。 - add_bos_token (
bool
, 可選, 預設為False
) — 是否在序列開頭新增序列開始標記。 - return_token_type_ids (
bool
, 可選, 預設為False
) — 是否返回標記型別 ID。
構建一個 CodeGen 分詞器。基於位元組級的位元組對編碼(Byte-Pair-Encoding)。
此分詞器經過訓練,將空格視為標記的一部分(有點像 sentencepiece),因此一個詞
無論它是在句子開頭(沒有空格)還是在其他位置,其編碼方式都會有所不同。
>>> from transformers import CodeGenTokenizer
>>> tokenizer = CodeGenTokenizer.from_pretrained("Salesforce/codegen-350M-mono")
>>> tokenizer("Hello world")["input_ids"]
[15496, 995]
>>> tokenizer(" Hello world")["input_ids"]
[18435, 995]
您可以透過在例項化此分詞器時或在對某些文字呼叫它時傳遞 add_prefix_space=True
來繞過此行為,但由於模型並非以這種方式進行預訓練,這可能會導致效能下降。
當與 is_split_into_words=True
一起使用時,此分詞器會在每個詞(甚至是第一個詞)之前新增一個空格。
此分詞器繼承自 PreTrainedTokenizer,其中包含了大部分主要方法。使用者應參考此超類以獲取有關這些方法的更多資訊。
create_token_type_ids_from_sequences
< 源 >( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) → list[int]
建立與傳入序列對應的標記型別 ID。什麼是標記型別 ID?
如果模型有特殊的構建方式,應在子類中重寫此方法。
CodeGenTokenizerFast
class transformers.CodeGenTokenizerFast
< 源 >( vocab_file = None merges_file = None tokenizer_file = None unk_token = '<|endoftext|>' bos_token = '<|endoftext|>' eos_token = '<|endoftext|>' add_prefix_space = False return_token_type_ids = False **kwargs )
引數
- vocab_file (
str
, 可選) — 詞彙表文件的路徑。 - merges_file (
str
, 可選) — 合併檔案的路徑。 - tokenizer_file (
str
, 可選) — tokenizers 檔案的路徑(通常副檔名為 .json),該檔案包含載入分詞器所需的所有內容。 - unk_token (
str
, 可選, 預設為"<|endoftext|>"
) — 未知標記(token)。詞彙表中不存在的標記無法轉換為 ID,將被設定為此標記。 - bos_token (
str
, 可選, 預設為"<|endoftext|>"
) — 序列開始標記。 - eos_token (
str
, 可選, 預設為"<|endoftext|>"
) — 序列結束標記。 - add_prefix_space (
bool
, 可選, 預設為False
) — 是否在輸入前新增一個初始空格。這使得開頭的詞可以像其他詞一樣被處理。(CodeGen 分詞器透過前面的空格來檢測詞的開頭)。 - return_token_type_ids (
bool
, 可選, 預設為False
) — 是否返回標記型別 ID。
構建一個“快速”的 CodeGen 分詞器(由 HuggingFace 的 *tokenizers* 庫支援)。基於位元組級的位元組對編碼(Byte-Pair-Encoding)。
此分詞器經過訓練,將空格視為標記的一部分(有點像 sentencepiece),因此一個詞
無論它是在句子開頭(沒有空格)還是在其他位置,其編碼方式都會有所不同。
>>> from transformers import CodeGenTokenizerFast
>>> tokenizer = CodeGenTokenizerFast.from_pretrained("Salesforce/codegen-350M-mono")
>>> tokenizer("Hello world")["input_ids"]
[15496, 995]
>>> tokenizer(" Hello world")["input_ids"]
[18435, 995]
您可以透過在例項化此分詞器時傳遞 add_prefix_space=True
來繞過此行為,但由於模型並非以這種方式進行預訓練,這可能會導致效能下降。
當與 is_split_into_words=True
一起使用時,此分詞器需要使用 add_prefix_space=True
進行例項化。
此分詞器繼承自 PreTrainedTokenizerFast,其中包含了大部分主要方法。使用者應參考此超類以獲取有關這些方法的更多資訊。
decode
< 源 >( token_ids: typing.Union[int, list[int], ForwardRef('np.ndarray'), ForwardRef('torch.Tensor'), ForwardRef('tf.Tensor')] skip_special_tokens: bool = False clean_up_tokenization_spaces: typing.Optional[bool] = None truncate_before_pattern: typing.Optional[list[str]] = None **kwargs ) → str
引數
- token_ids (
Union[int, List[int], np.ndarray, torch.Tensor, tf.Tensor]
) — 分詞後的輸入 ID 列表。可以使用__call__
方法獲得。 - skip_special_tokens (
bool
, 可選, 預設為False
) — 是否在解碼時移除特殊標記。 - clean_up_tokenization_spaces (
bool
, 可選) — 是否清理分詞產生的空格。如果為None
,則預設為self.clean_up_tokenization_spaces
(可在tokenizer_config
中設定)。 - truncate_before_pattern (
List[str]
, 可選, 預設為None
) — 一個正則表示式字串列表,將用於截斷返回的字串。這可以用於移除多餘的程式碼片段(例如,如果在換行符開頭觀察到註釋符號“#”則截斷)。一個示例模式可以是 `[”^#”, re.escape(”<|endoftext|>”), ”^'''”, ”
返回
字串
解碼後的句子。
使用分詞器和詞彙表將 ID 序列轉換為字串,可以選擇移除特殊標記並清理分詞空間。
類似於執行 self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))
。
”]`. kwargs (額外的關鍵字引數, 可選): 將傳遞給底層模型特定的解碼方法。
CodeGenModel
class transformers.CodeGenModel
< 源 >( config )
引數
- config (CodeGenModel) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
裸的 Codegen 模型,輸出原始的隱藏狀態,頂部沒有任何特定的頭部。
此模型繼承自 PreTrainedModel。請查閱超類的文件以瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< 源 >( input_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Union[transformers.cache_utils.Cache, tuple[tuple[torch.Tensor]], NoneType] = 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 cache_position: typing.Optional[torch.LongTensor] = None **kwargs ) → transformers.modeling_outputs.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列標記的索引。預設情況下,填充將被忽略。索引可以使用 AutoTokenizer 獲得。詳情請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- past_key_values (
Union[~cache_utils.Cache, tuple[tuple[torch.Tensor]], NoneType]
) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括在解碼的先前階段由模型返回的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
。 - attention_mask (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免在填充標記索引上執行注意力的掩碼。掩碼值選自[0, 1]
:- 1 表示標記未被遮蓋,
- 0 表示標記被遮蓋。
- token_type_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 段標記索引,用於指示輸入的第一部分和第二部分。索引選自[0, 1]
:- 0 對應於*句子 A* 的標記,
- 1 對應於*句子 B* 的標記。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 位置嵌入中每個輸入序列標記的位置索引。選自範圍[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_dim)
,可選) — 可選地,您可以選擇直接傳遞嵌入表示,而不是傳遞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 而不是一個普通的元組。 - cache_position (
torch.LongTensor
,形狀為(sequence_length)
,可選) — 描述輸入序列標記在序列中位置的索引。與position_ids
相反,此張量不受填充影響。它用於在正確的位置更新快取並推斷完整的序列長度。
返回
transformers.modeling_outputs.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPast 或一個 `torch.FloatTensor` 的元組(如果傳遞了 `return_dict=False` 或當 `config.return_dict=False` 時),根據配置(CodeGenConfig)和輸入包含各種元素。
-
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
CodeGenModel 的 forward 方法覆蓋了 `__call__` 特殊方法。
儘管前向傳遞的配方需要在此函式內定義,但之後應呼叫 `Module` 例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。
CodeGenForCausalLM
class transformers.CodeGenForCausalLM
< 源 >( config )
引數
- config (CodeGenForCausalLM) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
CodeGen 模型轉換器,頂部帶有一個語言建模頭。
此模型繼承自 PreTrainedModel。請查閱超類的文件以瞭解該庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 的子類。可以像常規 PyTorch 模組一樣使用它,並參考 PyTorch 文件瞭解所有與常規用法和行為相關的事項。
forward
< 源 >( input_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Union[transformers.cache_utils.Cache, tuple[tuple[torch.Tensor]], NoneType] = 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 cache_position: typing.Optional[torch.LongTensor] = None **kwargs ) → transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列標記的索引。預設情況下,填充將被忽略。索引可以使用 AutoTokenizer 獲得。詳情請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- past_key_values (
Union[~cache_utils.Cache, tuple[tuple[torch.Tensor]], NoneType]
) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包含在解碼的前一階段,當use_cache=True
或config.use_cache=True
時,由模型返回的past_key_values
。允許兩種格式:
- 一個 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
,使用者可以選擇只輸入最後的input_ids
(那些沒有將其過去鍵值狀態提供給此模型的輸入),其形狀為(batch_size, 1)
,而不是所有形狀為(batch_size, sequence_length)
的input_ids
。 - attention_mask (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免在填充標記索引上執行注意力的掩碼。掩碼值選自[0, 1]
:- 1 表示標記未被遮蓋,
- 0 表示標記已被遮蓋。
- token_type_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 段標記索引,用於指示輸入的第一部分和第二部分。索引選自[0, 1]
:- 0 對應於句子 A 的標記,
- 1 對應於句子 B 的標記。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 每個輸入序列標記在位置嵌入中的位置索引。選自範圍[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_dim)
,可選) — 可選地,你可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果你希望比模型內部嵌入查詢矩陣更好地控制如何將 *input_ids* 索引轉換為關聯向量,這會非常有用。 - labels (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 語言建模的標籤。請注意,標籤在模型內部會被移動,也就是說,你可以設定labels = input_ids
。索引選自[-100, 0, ..., config.vocab_size]
。所有設定為-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 而不是一個普通的元組。 - cache_position (
torch.LongTensor
,形狀為(sequence_length)
,可選) — 描述輸入序列標記在序列中位置的索引。與position_ids
相反,此張量不受填充影響。它用於在正確的位置更新快取並推斷完整的序列長度。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithPast 或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),根據配置 (CodeGenConfig) 和輸入包含不同的元素。
-
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
CodeGenForCausalLM 的前向方法覆蓋了 __call__
特殊方法。
儘管前向傳遞的配方需要在此函式內定義,但之後應呼叫 `Module` 例項而不是此函式,因為前者會處理執行前處理和後處理步驟,而後者會靜默地忽略它們。