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