Transformers 文件
資料整理器
並獲得增強的文件體驗
開始使用
資料整理器
資料整理器是使用資料集元素列表作為輸入來形成批次的物件。這些元素的型別與 `train_dataset` 或 `eval_dataset` 的元素型別相同。
為了能夠構建批次,資料整理器可能會應用一些處理(例如填充)。其中一些(例如 DataCollatorForLanguageModeling)還會對形成的批次應用一些隨機資料增強(例如隨機掩碼)。
預設資料整理器
一個非常簡單的資料整理器,它只是將字典式物件批次整理在一起,並對潛在的鍵進行特殊處理,這些鍵名為
- `label`: 處理每個物件的一個值(整數或浮點數)
- `label_ids`: 處理每個物件的值列表
不執行任何額外的預處理:輸入物件的屬性名稱將用作模型相應的輸入。請參閱 glue 和 ner 以瞭解其用途。
DefaultDataCollator
class transformers.DefaultDataCollator
< 來源 >( return_tensors: str = 'pt' )
一個非常簡單的資料整理器,它只是將字典式物件批次整理在一起,並對潛在的鍵進行特殊處理,這些鍵名為
- `label`: 處理每個物件的一個值(整數或浮點數)
- `label_ids`: 處理每個物件的值列表
不執行任何額外的預處理:輸入物件的屬性名稱將用作模型相應的輸入。請參閱 glue 和 ner 以瞭解其用途。
這是一個物件(像其他資料整理器一樣),而不是像 `default_data_collator` 那樣的純函式。如果您需要在初始化時設定 `return_tensors` 值,這會很有幫助。
DataCollatorWithPadding
class transformers.DataCollatorWithPadding
< 來源 >( tokenizer: PreTrainedTokenizerBase padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = True max_length: typing.Optional[int] = None pad_to_multiple_of: typing.Optional[int] = None return_tensors: str = 'pt' )
引數
- tokenizer (PreTrainedTokenizer 或 PreTrainedTokenizerFast) — 用於編碼資料的分詞器。
- padding (`bool`,`str` 或 PaddingStrategy,可選,預設為 `True`) — 選擇一種策略來填充返回的序列(根據模型的填充側和填充索引),包括:
- `True` 或 `'longest'`(預設):填充到批次中最長的序列(如果只提供一個序列,則不填充)。
- `'max_length'`:填充到由引數 `max_length` 指定的最大長度,如果未提供該引數,則填充到模型可接受的最大輸入長度。
- `False` 或 `'do_not_pad'`:不填充(即可以輸出包含不同長度序列的批次)。
- max_length (`int`,可選) — 返回列表的最大長度和可選的填充長度(見上文)。
- pad_to_multiple_of (`int`,可選) — 如果設定,將把序列填充到所提供值的倍數。
這對於在計算能力 >= 7.0 (Volta) 的 NVIDIA 硬體上啟用 Tensor Cores 特別有用。
- return_tensors (`str`,可選,預設為 `"pt"`) — 返回的張量型別。允許的值為“np”、“pt”和“tf”。
將動態填充接收到的輸入的資料整理器。
DataCollatorForTokenClassification
class transformers.DataCollatorForTokenClassification
< 來源 >( tokenizer: PreTrainedTokenizerBase padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = True max_length: typing.Optional[int] = None pad_to_multiple_of: typing.Optional[int] = None label_pad_token_id: int = -100 return_tensors: str = 'pt' )
引數
- tokenizer (PreTrainedTokenizer 或 PreTrainedTokenizerFast) — 用於編碼資料的分詞器。
- padding (`bool`,`str` 或 PaddingStrategy,可選,預設為 `True`) — 選擇一種策略來填充返回的序列(根據模型的填充側和填充索引),包括:
- `True` 或 `'longest'`(預設):填充到批次中最長的序列(如果只提供一個序列,則不填充)。
- `'max_length'`:填充到由引數 `max_length` 指定的最大長度,如果未提供該引數,則填充到模型可接受的最大輸入長度。
- `False` 或 `'do_not_pad'`:不填充(即可以輸出包含不同長度序列的批次)。
- max_length (`int`,可選) — 返回列表的最大長度和可選的填充長度(見上文)。
- pad_to_multiple_of (`int`,可選) — 如果設定,將把序列填充到所提供值的倍數。
這對於在計算能力 >= 7.0 (Volta) 的 NVIDIA 硬體上啟用 Tensor Cores 特別有用。
- label_pad_token_id (`int`,可選,預設為 -100) — 填充標籤時使用的 ID(-100 將被 PyTorch 損失函式自動忽略)。
- return_tensors (`str`,可選,預設為 `"pt"`) — 返回的張量型別。允許的值為“np”、“pt”和“tf”。
將動態填充接收到的輸入和標籤的資料整理器。
DataCollatorForSeq2Seq
class transformers.DataCollatorForSeq2Seq
< 來源 >( tokenizer: PreTrainedTokenizerBase model: typing.Optional[typing.Any] = None padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = True max_length: typing.Optional[int] = None pad_to_multiple_of: typing.Optional[int] = None label_pad_token_id: int = -100 return_tensors: str = 'pt' )
引數
- tokenizer (PreTrainedTokenizer 或 PreTrainedTokenizerFast) — 用於編碼資料的分詞器。
- model (PreTrainedModel,可選) — 正在訓練的模型。如果設定並具有 prepare_decoder_input_ids_from_labels,則使用它來準備 decoder_input_ids
這在使用 label_smoothing 時很有用,可以避免重複計算損失。
- padding (`bool`,`str` 或 PaddingStrategy,可選,預設為 `True`) — 選擇一種策略來填充返回的序列(根據模型的填充側和填充索引),包括:
- `True` 或 `'longest'`(預設):填充到批次中最長的序列(如果只提供一個序列,則不填充)。
- `'max_length'`:填充到由引數 `max_length` 指定的最大長度,如果未提供該引數,則填充到模型可接受的最大輸入長度。
- `False` 或 `'do_not_pad'`:不填充(即可以輸出包含不同長度序列的批次)。
- max_length (`int`,可選) — 返回列表的最大長度和可選的填充長度(見上文)。
- pad_to_multiple_of (`int`,可選) — 如果設定,將把序列填充到所提供值的倍數。
這對於在計算能力 >= 7.0 (Volta) 的 NVIDIA 硬體上啟用 Tensor Cores 特別有用。
- label_pad_token_id (`int`,可選,預設為 -100) — 填充標籤時使用的 ID(-100 將被 PyTorch 損失函式自動忽略)。
- return_tensors (`str`,可選,預設為 `"pt"`) — 返回的張量型別。允許的值為“np”、“pt”和“tf”。
將動態填充接收到的輸入和標籤的資料整理器。
DataCollatorForLanguageModeling
class transformers.DataCollatorForLanguageModeling
< 來源 >( tokenizer: PreTrainedTokenizerBase mlm: bool = True mlm_probability: typing.Optional[float] = 0.15 mask_replace_prob: float = 0.8 random_replace_prob: float = 0.1 pad_to_multiple_of: typing.Optional[int] = None tf_experimental_compile: bool = False return_tensors: str = 'pt' seed: typing.Optional[int] = None )
引數
- tokenizer (PreTrainedTokenizer 或 PreTrainedTokenizerFast) — 用於編碼資料的分詞器。
- mlm (`bool`,可選,預設為 `True`) — 是否使用掩碼語言建模。如果設定為 `False`,則標籤與輸入相同,並忽略填充標記(透過將它們設定為 -100)。否則,非掩碼標記的標籤為 -100,掩碼標記的值為要預測的值。
- mlm_probability (`float`,可選,預設為 0.15) — 當 `mlm` 設定為 `True` 時,用於(隨機)掩碼輸入中標記的機率。
- mask_replace_prob (`float`,可選,預設為 0.8) — 掩碼標記被分詞器的掩碼標記(例如 `[MASK]`)替換的機率。預設為 0.8,表示 80% 的掩碼標記將被 `[MASK]` 替換。僅當 `mlm` 設定為 `True` 時有效。
- random_replace_prob (`float`,可選,預設為 0.1) — 掩碼標記被分詞器詞彙表中隨機標記替換的機率。預設為 0.1,表示 10% 的掩碼標記將被隨機標記替換。剩餘的掩碼標記(1 - mask_replace_prob - random_replace_prob)保持不變。僅當 `mlm` 設定為 `True` 時有效。
- pad_to_multiple_of (`int`,可選) — 如果設定,將把序列填充到所提供值的倍數。
- return_tensors (`str`) — 返回的張量型別。允許的值為“np”、“pt”和“tf”。
- seed (`int`,可選) — 用於掩碼的隨機數生成器的種子。如果未提供,將使用全域性 RNG。
用於語言建模的資料整理器。如果輸入不都具有相同的長度,它們將被動態填充到批次的最大長度。
為了獲得最佳效能,此資料整理器應與資料集一起使用,該資料集的專案為字典或 BatchEncoding,並帶有 `special_tokens_mask` 鍵,如 PreTrainedTokenizer 或 PreTrainedTokenizerFast 使用引數 `return_special_tokens_mask=True` 返回的那樣。
<示例選項和預期>預設行為
- `mask_replace_prob=0.8`,`random_replace_prob=0.1`。
- 預期 80% 的掩碼標記被 `[MASK]` 替換,10% 被隨機標記替換,10% 保持不變。
所有掩碼標記都被 `[MASK]` 替換
- `mask_replace_prob=1.0`,`random_replace_prob=0.0`。
- 預期所有掩碼標記都被 `[MASK]` 替換。沒有標記保持不變或被隨機標記替換。
無 `[MASK]` 替換,僅隨機標記
- `mask_replace_prob=0.0`,`random_replace_prob=1.0`。
- 預期所有掩碼標記都被隨機標記替換。無 `[MASK]` 替換或不變的標記。
均衡替換
- `mask_replace_prob=0.5`,`random_replace_prob=0.4`。
- 預期 50% 的掩碼標記被 `[MASK]` 替換,40% 被隨機標記替換,10% 保持不變。
注意:`mask_replace_prob` 和 `random_replace_prob` 的總和不得超過 1。如果它們的總和小於 1,則剩餘的比例將由保持不變的掩碼標記組成。
numpy_mask_tokens
< 來源 >( inputs: typing.Any special_tokens_mask: typing.Optional[typing.Any] = None )
為掩碼語言建模準備掩碼標記輸入/標籤:80% MASK,10% 隨機,10% 原始。
tf_mask_tokens
< 來源 >( inputs: typing.Any vocab_size mask_token_id special_tokens_mask: typing.Optional[typing.Any] = None )
為掩碼語言建模準備掩碼標記輸入/標籤:80% MASK,10% 隨機,10% 原始。
torch_mask_tokens
< 來源 >( inputs: typing.Any special_tokens_mask: typing.Optional[typing.Any] = None )
為掩碼語言建模準備掩碼標記輸入/標籤:80% MASK,10% 隨機,10% 原始。
DataCollatorForWholeWordMask
class transformers.DataCollatorForWholeWordMask
< 來源 >( tokenizer: PreTrainedTokenizerBase mlm: bool = True mlm_probability: typing.Optional[float] = 0.15 mask_replace_prob: float = 0.8 random_replace_prob: float = 0.1 pad_to_multiple_of: typing.Optional[int] = None tf_experimental_compile: bool = False return_tensors: str = 'pt' seed: typing.Optional[int] = None )
用於掩碼整個單詞的語言建模的資料整理器。
- 整理張量批次,尊重其分詞器的 `pad_token`
- 為掩碼語言建模預處理批次
此整理器依賴於 BertTokenizer 的子詞分詞實現細節,特別是子詞標記以 `##` 為字首。對於不遵循此方案的分詞器,此整理器將生成大致相當於 `DataCollatorForLanguageModeling` 的輸出。
為掩碼語言建模準備掩碼標記輸入/標籤:80% MASK,10% 隨機,10% 原始。設定“mask_labels”意味著我們使用全詞掩碼 (wwm),我們根據其引用直接掩碼索引。
為掩碼語言建模準備掩碼標記輸入/標籤:80% MASK,10% 隨機,10% 原始。設定“mask_labels”意味著我們使用全詞掩碼 (wwm),我們根據其引用直接掩碼索引。
為掩碼語言建模準備掩碼標記輸入/標籤:80% MASK,10% 隨機,10% 原始。設定“mask_labels”意味著我們使用全詞掩碼 (wwm),我們根據其引用直接掩碼索引。
DataCollatorForPermutationLanguageModeling
class transformers.DataCollatorForPermutationLanguageModeling
< 源 >( tokenizer: PreTrainedTokenizerBase plm_probability: float = 0.16666666666666666 max_span_length: int = 5 return_tensors: str = 'pt' )
用於排列語言建模的資料收集器。
- 整理張量批次,尊重其分詞器的 `pad_token`
- 使用 XLNet 特定的程式對排列語言建模的批次進行預處理
用於特定序列的待預測掩碼標記由以下演算法確定
- 從序列的開頭開始,設定
cur_len = 0
(已處理的標記數)。 - 從區間
[1, max_span_length]
中取樣一個span_length
(要掩碼的標記跨度長度) - 保留長度為
context_length = span_length / plm_probability
的上下文,以包圍要掩碼的跨度 - 從區間
[cur_len, cur_len + context_length - span_length]
中取樣一個起始點start_index
,並掩碼標記start_index:start_index + span_length
- 設定
cur_len = cur_len + context_length
。如果cur_len < max_len
(即序列中還有未處理的標記),則從步驟 1 重複。
用於特定序列的待預測掩碼標記由以下演算法確定
- 從序列的開頭開始,設定
cur_len = 0
(已處理的標記數)。 - 從區間
[1, max_span_length]
中取樣一個span_length
(要掩碼的標記跨度長度) - 保留長度為
context_length = span_length / plm_probability
的上下文,以包圍要掩碼的跨度 - 從區間
[cur_len, cur_len + context_length - span_length]
中取樣一個起始點start_index
,並掩碼標記start_index:start_index + span_length
- 設定
cur_len = cur_len + context_length
。如果cur_len < max_len
(即序列中還有未處理的標記),則從步驟 1 重複。
用於特定序列的待預測掩碼標記由以下演算法確定
- 從序列的開頭開始,設定
cur_len = 0
(已處理的標記數)。 - 從區間
[1, max_span_length]
中取樣一個span_length
(要掩碼的標記跨度長度) - 保留長度為
context_length = span_length / plm_probability
的上下文,以包圍要掩碼的跨度 - 從區間
[cur_len, cur_len + context_length - span_length]
中取樣一個起始點start_index
,並掩碼標記start_index:start_index + span_length
- 設定
cur_len = cur_len + context_length
。如果cur_len < max_len
(即序列中還有未處理的標記),則從步驟 1 重複。
DataCollatorWithFlattening
class transformers.DataCollatorWithFlattening
< 源 >( *args return_position_ids = True separator_id = -100 return_flash_attn_kwargs = False return_seq_idx = False **kwargs )
用於無填充方法的資料收集器。執行以下操作:
- 將整個小批次連線成形狀為 [1, total_tokens] 的單個長序列
- 使用
separator_id
在連線的labels
中分隔序列,預設值為 -100 - 不新增填充,預設返回
input_ids
、labels
和position_ids
- 可選地返回 FlashAttentionKwargs 中包含的 kwargs
- 可選地返回表示每個標記所屬序列的 seq_idx
使用 DataCollatorWithFlattening
會將整個小批次展平為單個長序列。請確保您的注意力計算能夠處理它!
DataCollatorForMultipleChoice
class transformers.DataCollatorForMultipleChoice
< 源 >( tokenizer: PreTrainedTokenizerBase padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = True max_length: typing.Optional[int] = None pad_to_multiple_of: typing.Optional[int] = None return_tensors: str = 'pt' )
引數
- tokenizer (PreTrainedTokenizer 或 PreTrainedTokenizerFast) — 用於編碼資料的分詞器。
- padding (
bool
,str
或 PaddingStrategy, 可選, 預設為True
) — 根據模型的填充側和填充索引選擇填充返回序列的策略,包括:True
或'longest'
:填充到批次中最長的序列(如果只提供一個序列,則不填充)。'max_length'
:填充到由引數max_length
指定的最大長度,如果未提供該引數,則填充到模型可接受的最大輸入長度。False
或'do_not_pad'
(預設):不填充(即,可以輸出包含不同長度序列的批次)。
- max_length (
int
, 可選) — 返回列表的最大長度和可選的填充長度(見上文)。 - pad_to_multiple_of (
int
, 可選) — 將序列填充到提供值的倍數。這對於在計算能力 >= 7.5 (Volta) 的 NVIDIA 硬體上啟用 Tensor Cores 的使用特別有用。
- return_tensors (
str
, 可選, 預設為"pt"
) — 要返回的 Tensor 型別。允許的值為“np”、“pt”和“tf”。
用於多項選擇的動態填充巢狀示例批次的資料收集器,以便所有示例的所有選擇都具有相同的長度。