Transformers 文档
填充和截断
加入 Hugging Face 社区
并获取增强的文档体验
开始使用
填充和截断
批量输入通常长度不同,因此无法转换为固定大小的张量。填充和截断是解决此问题的策略,用于从不同长度的批次创建矩形张量。填充添加一个特殊的填充标记,以确保较短的序列与批次中最长序列或模型接受的最大长度具有相同的长度。截断则朝相反方向工作,通过截断长序列。
在大多数情况下,将您的批次填充到最长序列的长度,并将序列截断到模型可以接受的最大长度效果很好。但是,如果需要,API 支持更多策略。您需要了解的三个参数是:padding
、truncation
和 max_length
。
padding
参数控制填充。它可以是布尔值或字符串
True
或'longest'
:填充到批次中最长序列的长度(如果您仅提供单个序列,则不应用填充)。'max_length'
:填充到max_length
参数指定的长度,如果未提供max_length
(max_length=None
),则填充到模型接受的最大长度。如果您仅提供单个序列,则仍将应用填充。False
或'do_not_pad'
:不应用填充。这是默认行为。
truncation
参数控制截断。它可以是布尔值或字符串
True
或'longest_first'
:截断到max_length
参数指定的长度,如果未提供max_length
(max_length=None
),则截断到模型接受的最大长度。这将逐个 token 截断,从序列对中最长的序列中删除一个 token,直到达到适当的长度。'only_second'
:截断到max_length
参数指定的长度,如果未提供max_length
(max_length=None
),则截断到模型接受的最大长度。如果提供序列对(或序列对的批次),则这将仅截断序列对中的第二个句子。'only_first'
:截断到max_length
参数指定的长度,如果未提供max_length
(max_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) |