Transformers 文档

填充和截断

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

开始使用

填充和截断

批量输入通常长度不同,因此无法转换为固定大小的张量。填充和截断是解决此问题的策略,用于从不同长度的批次创建矩形张量。填充添加一个特殊的填充标记,以确保较短的序列与批次中最长序列或模型接受的最大长度具有相同的长度。截断则朝相反方向工作,通过截断长序列。

在大多数情况下,将您的批次填充到最长序列的长度,并将序列截断到模型可以接受的最大长度效果很好。但是,如果需要,API 支持更多策略。您需要了解的三个参数是:paddingtruncationmax_length

padding 参数控制填充。它可以是布尔值或字符串

  • True'longest':填充到批次中最长序列的长度(如果您仅提供单个序列,则不应用填充)。
  • 'max_length':填充到 max_length 参数指定的长度,如果未提供 max_lengthmax_length=None),则填充到模型接受的最大长度。如果您仅提供单个序列,则仍将应用填充。
  • False'do_not_pad':不应用填充。这是默认行为。

truncation 参数控制截断。它可以是布尔值或字符串

  • True'longest_first':截断到 max_length 参数指定的长度,如果未提供 max_lengthmax_length=None),则截断到模型接受的最大长度。这将逐个 token 截断,从序列对中最长的序列中删除一个 token,直到达到适当的长度。
  • 'only_second':截断到 max_length 参数指定的长度,如果未提供 max_lengthmax_length=None),则截断到模型接受的最大长度。如果提供序列对(或序列对的批次),则这将仅截断序列对中的第二个句子。
  • 'only_first':截断到 max_length 参数指定的长度,如果未提供 max_lengthmax_length=None),则截断到模型接受的最大长度。如果提供序列对(或序列对的批次),则这将仅截断序列对中的第一个句子。
  • False'do_not_truncate':不应用截断。这是默认行为。

max_length 参数控制填充和截断的长度。它可以是整数或 None,在这种情况下,它将默认为模型可以接受的最大长度。如果模型没有特定的最大输入长度,则将停用截断或填充到 max_length

下表总结了设置填充和截断的推荐方法。如果您在以下任何示例中使用输入序列对,则可以将 truncation=True 替换为从 ['only_first', 'only_second', 'longest_first'] 中选择的 STRATEGY,即 truncation='only_second'truncation='longest_first' 以控制如何截断序列对中的两个序列,如前所述。

截断 填充 说明
不截断 不填充 tokenizer(batch_sentences)
填充到批次中的最大序列长度 tokenizer(batch_sentences, padding=True)
tokenizer(batch_sentences, padding='longest')
填充到最大模型输入长度 tokenizer(batch_sentences, padding='max_length')
填充到特定长度 tokenizer(batch_sentences, padding='max_length', max_length=42)
填充到某个值的倍数 tokenizer(batch_sentences, padding=True, pad_to_multiple_of=8)
截断到最大模型输入长度 不填充 tokenizer(batch_sentences, truncation=True)
tokenizer(batch_sentences, truncation=STRATEGY)
填充到批次中的最大序列长度 tokenizer(batch_sentences, padding=True, truncation=True)
tokenizer(batch_sentences, padding=True, truncation=STRATEGY)
填充到最大模型输入长度 tokenizer(batch_sentences, padding='max_length', truncation=True)
tokenizer(batch_sentences, padding='max_length', truncation=STRATEGY)
填充到特定长度 不可能
截断到特定长度 不填充 tokenizer(batch_sentences, truncation=True, max_length=42)
tokenizer(batch_sentences, truncation=STRATEGY, max_length=42)
填充到批次中的最大序列长度 tokenizer(batch_sentences, padding=True, truncation=True, max_length=42)
tokenizer(batch_sentences, padding=True, truncation=STRATEGY, max_length=42)
填充到最大模型输入长度 不可能
填充到特定长度 tokenizer(batch_sentences, padding='max_length', truncation=True, max_length=42)
tokenizer(batch_sentences, padding='max_length', truncation=STRATEGY, max_length=42)
< > 在 GitHub 上更新