Transformers 文件
Starcoder2
並獲得增強的文件體驗
開始使用
Starcoder2
概述
StarCoder2 是一系列用於程式碼的開源 LLM,有 3 種不同大小,引數分別為 3B、7B 和 15B。旗艦模型 StarCoder2-15B 在 The Stack v2 的 4 萬億多個 token 和 600 多種程式語言上進行訓練。所有模型都使用分組查詢注意力(Grouped Query Attention),上下文視窗為 16,384 個 token,滑動視窗注意力為 4,096 個 token,並使用中間填充(Fill-in-the-Middle)目標進行訓練。這些模型已隨 Anton Lozhkov、Raymond Li、Loubna Ben Allal、Federico Cassano、Joel Lamy-Poirier、Nouamane Tazi、Ao Tang、Dmytro Pykhtar、Jiawei Liu、Yuxiang Wei、Tianyang Liu、Max Tian、Denis Kocetkov、Arthur Zucker、Younes Belkada、Zijian Wang、Qian Liu、Dmitry Abulkhanov、Indraneil Paul、Zhuang Li、Wen-Ding Li、Megan Risdal、Jia Li、Jian Zhu、Terry Yue Zhuo、Evgenii Zheltonozhskii、Nii Osae Osae Dade、Wenhao Yu、Lucas Krauß、Naman Jain、Yixuan Su、Xuanli He、Manan Dey、Edoardo Abati、Yekun Chai、Niklas Muennighoff、Xiangru Tang、Muhtasham Oblokulov、Christopher Akiki、Marc Marone、Chenghao Mou、Mayank Mishra、Alex Gu、Binyuan Hui、Tri Dao、Armel Zebaze、Olivier Dehaene、Nicolas Patry、Canwen Xu、Julian McAuley、Han Hu、Torsten Scholak、Sebastien Paquet、Jennifer Robinson、Carolyn Jane Anderson、Nicolas Chapados、Mostofa Patwary、Nima Tajbakhsh、Yacine Jernite、Carlos Muñoz Ferrandis、Lingming Zhang、Sean Hughes、Thomas Wolf、Arjun Guha、Leandro von Werra 和 Harm de Vries 撰寫的論文 StarCoder 2 和 The Stack v2:下一代一同釋出。
論文摘要如下:
BigCode 專案是一個專注於程式碼大型語言模型 (Code LLMs) 負責任開發的開放科學協作專案,它推出了 StarCoder2。我們與 Software Heritage (SWH) 合作,在他們的原始碼檔案的數字公共基礎上構建了 The Stack v2。除了涵蓋 619 種程式語言的 SWH 倉庫之外,我們還精心選擇了其他高質量的資料來源,例如 GitHub 拉取請求、Kaggle Notebooks 和程式碼文件。這使得訓練集比第一個 StarCoder 資料集大了 4 倍。我們訓練了 3B、7B 和 15B 引數的 StarCoder2 模型,資料量從 3.3 萬億到 4.3 萬億個 token,並在一整套 Code LLM 基準測試中對其進行了徹底評估。我們發現,我們的小型模型 StarCoder2-3B 在大多數基準測試中優於其他類似大小的 Code LLM,並且也優於 StarCoderBase-15B。我們的大型模型 StarCoder2-15B 顯著優於其他同等大小的模型。此外,它還與 CodeLlama-34B(一個比它大兩倍的模型)持平或超越。儘管 DeepSeekCoder-33B 是高資源語言程式碼補全的最佳模型,但我們發現 StarCoder2-15B 在數學和程式碼推理基準測試以及幾種低資源語言上優於它。我們根據 OpenRAIL 許可證提供模型權重,並透過釋出原始碼資料的 SoftWare Heritage 持久識別符號 (SWHID) 確保訓練資料的完全透明。
許可證
這些模型根據 BigCode OpenRAIL-M v1 許可協議獲得許可。
使用技巧
StarCoder2 模型可在 HuggingFace Hub 上找到。您可以在 StarCoder2 的 GitHub 倉庫中找到推理和微調的示例。
這些即用型檢查點可以透過 HuggingFace Hub 下載和使用
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> model = AutoModelForCausalLM.from_pretrained("bigcode/starcoder2-7b", device_map="auto")
>>> tokenizer = AutoTokenizer.from_pretrained("bigcode/starcoder2-7b")
>>> prompt = "def print_hello_world():"
>>> model_inputs = tokenizer([prompt], return_tensors="pt").to("cuda")
>>> generated_ids = model.generate(**model_inputs, max_new_tokens=10, do_sample=False)
>>> tokenizer.batch_decode(generated_ids)[0]
'def print_hello_world():\n print("Hello World!")\n\ndef print'
Starcoder2Config
class transformers.Starcoder2Config
< 來源 >( vocab_size = 49152 hidden_size = 3072 intermediate_size = 12288 num_hidden_layers = 30 num_attention_heads = 24 num_key_value_heads = 2 hidden_act = 'gelu_pytorch_tanh' max_position_embeddings = 4096 initializer_range = 0.018042 norm_epsilon = 1e-05 use_cache = True bos_token_id = 50256 eos_token_id = 50256 rope_theta = 10000.0 rope_scaling = None sliding_window = None attention_dropout = 0.0 residual_dropout = 0.0 embedding_dropout = 0.0 use_bias = True **kwargs )
引數
- vocab_size (
int
, 可選, 預設為 49152) — Starcoder2 模型的詞彙表大小。定義了呼叫 Starcoder2Model 時可以由inputs_ids
表示的不同 token 的數量 - hidden_size (
int
, 可選, 預設為 3072) — 隱藏表示的維度。 - intermediate_size (
int
, 可選, 預設為 12288) — MLP 表示的維度。 - num_hidden_layers (
int
, 可選, 預設為 30) — Transformer 編碼器中的隱藏層數量。 - num_attention_heads (
int
, 可選, 預設為 24) — Transformer 編碼器中每個注意力層的注意力頭數量。 - num_key_value_heads (
int
, 可選, 預設為 2) — 用於實現分組查詢注意力(Grouped Query Attention)的關鍵值頭數量。如果num_key_value_heads=num_attention_heads
,模型將使用多頭注意力(Multi Head Attention (MHA));如果num_key_value_heads=1
,模型將使用多查詢注意力(Multi Query Attention (MQA)),否則使用 GQA。將多頭檢查點轉換為 GQA 檢查點時,每個分組鍵和值頭應透過對其組內的所有原始頭進行均值池化來構建。有關更多詳細資訊,請檢視此論文。如果未指定,預設為8
。 - hidden_act (
str
或function
, 可選, 預設為"gelu_pytorch_tanh"
) — 解碼器中的非線性啟用函式(函式或字串)。 - max_position_embeddings (
int
, 可選, 預設為 4096) — 此模型可能使用的最大序列長度。Starcoder2 的滑動視窗注意力允許序列長度達到 4096*32 個 token。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的截斷正態分佈初始化器的標準差。 - norm_epsilon (
float
, 可選, 預設為 1e-05) — 層歸一化的 epsilon 值 - use_cache (
bool
, 可選, 預設為True
) — 模型是否應返回最後一個鍵/值注意力(並非所有模型都使用)。僅當config.is_decoder=True
時才相關。 - bos_token_id (
int
, 可選, 預設為 50256) — 序列開始標記的 ID。 - eos_token_id (
int
, 可選, 預設為 50256) — 序列結束標記的 ID。 - rope_theta (
float
, 可選, 預設為 10000.0) — RoPE 嵌入的基週期。 - rope_scaling (
Dict
, 可選) — 包含 RoPE 嵌入縮放配置的字典。注意:如果您應用新的 RoPE 型別並期望模型在更長的max_position_embeddings
上工作,我們建議您相應地更新此值。預期內容:rope_type
(str
): 要使用的 RoPE 子變體。可以是 [‘default’, ‘linear’, ‘dynamic’, ‘yarn’, ‘longrope’, ‘llama3’] 之一,其中 ‘default’ 是原始 RoPE 實現。factor
(float
, 可選): 除了 ‘default’ 之外的所有 RoPE 型別都使用。應用於 RoPE 嵌入的縮放因子。在大多數縮放型別中,x 的factor
將使模型能夠處理長度為 x * 原始最大預訓練長度的序列。original_max_position_embeddings
(int
, 可選): 與 ‘dynamic’、‘longrope’ 和 ‘llama3’ 一起使用。預訓練期間使用的原始最大位置嵌入。attention_factor
(float
, 可選): 與 ‘yarn’ 和 ‘longrope’ 一起使用。應用於注意力計算的縮放因子。如果未指定,則預設為實現建議的值,使用factor
欄位推斷建議值。beta_fast
(float
, 可選): 僅與 ‘yarn’ 一起使用。用於設定線性斜坡函式中(僅)外推邊界的引數。如果未指定,則預設為 32。beta_slow
(float
, 可選): 僅與 ‘yarn’ 一起使用。用於設定線性斜坡函式中(僅)插值邊界的引數。如果未指定,則預設為 1。short_factor
(list[float]
, 可選): 僅與 ‘longrope’ 一起使用。應用於短上下文(<original_max_position_embeddings
)的縮放因子。必須是與隱藏大小除以注意力頭數除以 2 長度相同的數字列表long_factor
(list[float]
, 可選): 僅與 ‘longrope’ 一起使用。應用於長上下文(<original_max_position_embeddings
)的縮放因子。必須是與隱藏大小除以注意力頭數除以 2 長度相同的數字列表low_freq_factor
(float
, 可選): 僅與 ‘llama3’ 一起使用。應用於 RoPE 低頻分量的縮放因子high_freq_factor
(float
, 可選): 僅與 ‘llama3’ 一起使用。應用於 RoPE 高頻分量的縮放因子 - sliding_window (
int
, 可選) — 滑動視窗注意力視窗大小。如果未指定,預設為None
(無滑動視窗)。 - attention_dropout (
float
, 可選, 預設為 0.0) — 注意力機率的 dropout 比率。 - residual_dropout (
float
, 可選, 預設為 0.0) — 殘差連線的 dropout 值。 - embedding_dropout (
float
, 可選, 預設為 0.0) — 嵌入 dropout。 - use_bias (
bool
, 可選, 預設為True
) — 是否在模型的線性層上使用偏差項。
這是一個配置類,用於儲存Starcoder2Model的配置。它用於根據指定的引數例項化一個Starcoder2模型,定義模型架構。使用預設值例項化配置將生成與bigcode/starcoder2-7b模型相似的配置。
配置物件繼承自PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱PretrainedConfig的文件。
>>> from transformers import Starcoder2Model, Starcoder2Config
>>> # Initializing a Starcoder2 7B style configuration
>>> configuration = Starcoder2Config()
>>> # Initializing a model from the Starcoder2 7B style configuration
>>> model = Starcoder2Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
Starcoder2Model
class transformers.Starcoder2Model
< 來源 >( config: Starcoder2Config )
引數
- config (Starcoder2Config) — 模型配置類,包含模型的所有引數。使用配置檔案進行初始化不會載入與模型相關的權重,只加載配置。請檢視from_pretrained()方法來載入模型權重。
裸露的Starcoder2模型,輸出原始的隱藏狀態,沒有頂部的任何特定頭部。
此模型繼承自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 past_key_values: typing.Union[transformers.cache_utils.Cache, list[torch.FloatTensor], NoneType] = 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 cache_position: typing.Optional[torch.LongTensor] = None **flash_attn_kwargs: typing_extensions.Unpack[transformers.modeling_flash_attention_utils.FlashAttentionKwargs] ) → transformers.modeling_outputs.BaseModelOutputWithPast 或 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]
。 - past_key_values (
Union[~cache_utils.Cache, list[torch.FloatTensor], NoneType]
) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的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
,使用者可以選擇只輸入最後一個input_ids
(那些沒有將其過去的鍵值狀態提供給此模型的)形狀為(batch_size, 1)
,而不是所有input_ids
形狀為(batch_size, sequence_length)
。 - 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
。 - 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
),包含根據配置(Starcoder2Config)和輸入而異的各種元素。
-
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
Starcoder2Model 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但在此之後應呼叫 `Module` 例項而不是該函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
Starcoder2ForCausalLM
class transformers.Starcoder2ForCausalLM
< 來源 >( config )
引數
- config (Starcoder2ForCausalLM) — 模型配置類,包含模型的所有引數。使用配置檔案進行初始化不會載入與模型相關的權重,只加載配置。請檢視from_pretrained()方法來載入模型權重。
用於因果語言建模的Starcoder2模型。
此模型繼承自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 past_key_values: typing.Optional[transformers.cache_utils.Cache] = 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 cache_position: typing.Optional[torch.LongTensor] = None logits_to_keep: typing.Union[int, torch.Tensor] = 0 **kwargs: typing_extensions.Unpack[transformers.models.starcoder2.modeling_starcoder2.KwargsForCausalLM] ) → transformers.modeling_outputs.CausalLMOutputWithPast 或 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]
。 - past_key_values (
~cache_utils.Cache
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的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
,使用者可以選擇只輸入最後一個input_ids
(那些沒有將其過去的鍵值狀態提供給此模型的)形狀為(batch_size, 1)
,而不是所有input_ids
形狀為(batch_size, sequence_length)
。 - inputs_embeds (
torch.FloatTensor
形狀為(batch_size, sequence_length, hidden_size)
, 可選) — 可選地,你可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果你想對如何將input_ids
索引轉換為相關向量有比模型內部嵌入查詢矩陣更多的控制,這會很有用。 - labels (
torch.LongTensor
形狀為(batch_size, sequence_length)
, 可選) — 用於計算掩碼語言模型損失的標籤。索引應在[0, ..., config.vocab_size]
或 -100 之間(參見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
。 - cache_position (
torch.LongTensor
形狀為(sequence_length)
, 可選) — 表示輸入序列標記在序列中位置的索引。與position_ids
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整序列長度。 - logits_to_keep (
Union[int, torch.Tensor]
, 預設為0
) — 如果是一個int
,則計算最後logits_to_keep
個標記的 logits。如果為0
,則計算所有input_ids
的 logits(特殊情況)。生成時只需要最後一個標記的 logits,只計算該標記可以節省記憶體,這對於長序列或大詞彙量來說非常重要。如果是一個torch.Tensor
,則必須是 1D,對應於在序列長度維度中要保留的索引。這在使用打包張量格式(批處理和序列長度的單維度)時很有用。
返回
transformers.modeling_outputs.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
transformers.modeling_outputs.CausalLMOutputWithPast 或 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或 config.return_dict=False
),包含根據配置(Starcoder2Config)和輸入而異的各種元素。
-
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
Starcoder2ForCausalLM 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但在此之後應呼叫 `Module` 例項而不是該函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, Starcoder2ForCausalLM
>>> model = Starcoder2ForCausalLM.from_pretrained("meta-starcoder2/Starcoder2-2-7b-hf")
>>> tokenizer = AutoTokenizer.from_pretrained("meta-starcoder2/Starcoder2-2-7b-hf")
>>> prompt = "Hey, are you conscious? Can you talk to me?"
>>> inputs = tokenizer(prompt, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
Starcoder2ForSequenceClassification
class transformers.Starcoder2ForSequenceClassification
< 來源 >( config )
引數
- config (Starcoder2ForSequenceClassification) — 模型配置類,包含模型的所有引數。使用配置檔案進行初始化不會載入與模型相關的權重,只加載配置。請檢視from_pretrained()方法來載入模型權重。
帶有序列分類頭(線性層)的Starcoder2模型轉換器。
Starcoder2ForSequenceClassification 使用最後一個標記進行分類,與其他因果模型(例如 GPT-2)一樣。
由於它對最後一個標記進行分類,因此需要知道最後一個標記的位置。如果在配置中定義了 pad_token_id
,它會在每行中找到不是填充標記的最後一個標記。如果未定義 pad_token_id
,它只取批處理中每行的最後一個值。由於當傳入 inputs_embeds
而不是 input_ids
時它無法猜測填充標記,因此它會執行相同的操作(取批處理中每行的最後一個值)。
此模型繼承自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 past_key_values: typing.Optional[transformers.cache_utils.Cache] = 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 ) → transformers.modeling_outputs.SequenceClassifierOutputWithPast
或 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]
。 - past_key_values (
~cache_utils.Cache
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的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
,使用者可以選擇只輸入最後一個input_ids
(那些沒有將其過去的鍵值狀態提供給此模型的)形狀為(batch_size, 1)
,而不是所有input_ids
形狀為(batch_size, sequence_length)
。 - 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
。
返回
transformers.modeling_outputs.SequenceClassifierOutputWithPast
或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.SequenceClassifierOutputWithPast
或一個 torch.FloatTensor
元組(如果傳入了 return_dict=False
或 config.return_dict=False
),包含根據配置(Starcoder2Config)和輸入而異的各種元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。 -
logits (形狀為
(batch_size, config.num_labels)
的torch.FloatTensor
) — 分類(如果 config.num_labels==1,則為迴歸)分數(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 後的注意力權重,用於計算自注意力頭中的加權平均值。
Starcoder2ForSequenceClassification 的 forward 方法,它會覆蓋 `__call__` 特殊方法。
儘管前向傳播的實現需要在該函式中定義,但在此之後應呼叫 `Module` 例項而不是該函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
單標籤分類示例
>>> import torch
>>> from transformers import AutoTokenizer, Starcoder2ForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("bigcode/starcoder2-7b")
>>> model = Starcoder2ForSequenceClassification.from_pretrained("bigcode/starcoder2-7b")
>>> 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 = Starcoder2ForSequenceClassification.from_pretrained("bigcode/starcoder2-7b", num_labels=num_labels)
>>> labels = torch.tensor([1])
>>> loss = model(**inputs, labels=labels).loss
>>> round(loss.item(), 2)
...
多標籤分類示例
>>> import torch
>>> from transformers import AutoTokenizer, Starcoder2ForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("bigcode/starcoder2-7b")
>>> model = Starcoder2ForSequenceClassification.from_pretrained("bigcode/starcoder2-7b", 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 = Starcoder2ForSequenceClassification.from_pretrained(
... "bigcode/starcoder2-7b", 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
Starcoder2ForTokenClassification
class transformers.Starcoder2ForTokenClassification
< source >( config )
引數
- config (Starcoder2ForTokenClassification) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化時,不會載入與模型相關的權重,只會載入配置。請檢視 from_pretrained() 方法以載入模型權重。
Starcoder2 轉換器,頂部帶有一個 token 分類頭(隱藏狀態輸出頂部的一個線性層),例如用於命名實體識別 (NER) 任務。
此模型繼承自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 past_key_values: typing.Optional[transformers.cache_utils.Cache] = 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 ) → transformers.modeling_outputs.TokenClassifierOutput 或 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)
,可選) — 用於避免對填充 token 索引執行注意力操作的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示未被掩蓋的 token,
- 0 表示被掩蓋的 token。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 每個輸入序列 token 在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - past_key_values (
~cache_utils.Cache
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的 `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`(這些 `input_ids` 沒有將其過去的鍵值狀態提供給此模型),而不是形狀為(batch_size, sequence_length)
的所有 `input_ids`。 - 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`。
返回
transformers.modeling_outputs.TokenClassifierOutput 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.TokenClassifierOutput 或一個 torch.FloatTensor
元組(如果傳入 `return_dict=False` 或 `config.return_dict=False`),其中包含根據配置 (Starcoder2Config) 和輸入而變化的各種元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失。 -
logits (形狀為
(batch_size, sequence_length, config.num_labels)
的torch.FloatTensor
) — 分類分數(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 後的注意力權重,用於計算自注意力頭中的加權平均值。
Starcoder2ForTokenClassification 的 forward 方法,它會覆蓋 `__call__` 特殊方法。
儘管前向傳播的實現需要在該函式中定義,但在此之後應呼叫 `Module` 例項而不是該函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, Starcoder2ForTokenClassification
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("bigcode/starcoder2-7b")
>>> model = Starcoder2ForTokenClassification.from_pretrained("bigcode/starcoder2-7b")
>>> 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)
...