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),则截断到模型接受的最大长度。这将逐个标记地截断,从序列对中最长的序列中移除标记,直到达到适当的长度。'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) |