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) |