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”。
用于多项选择的动态填充嵌套示例批次的数据收集器,以便所有示例的所有选择都具有相同的长度。