说,我有三个例句:
s0 = "This model was pretrained using a specific normalization pipeline available here!"
s1 = "Thank to all the people around,"
s2 = "Bengali Mask Language Model for Bengali Language"
我可以做一批像:
batch = [[s[0], s[1]], [s[1], s[2]]]
现在,如果我在句子对上应用 BERT 标记器,如果长度超过句子对长度的最终总和满足 max_length
参数,它会截断句子对,这是应该完成的,好的。这就是我的意思:
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModelForPreTraining.from_pretrained("bert-base-uncased")
encoded = tokenizer(batch, padding="max_length", truncation=True, max_length=10)["input_ids"]
decoded = tokenizer.batch_decode(encoded)
print(decoded)
>>>Output: ['[CLS] this model was pre [SEP] thank to all [SEP]', '[CLS] thank to all [SEP] bengali mask language model [SEP]']
我的问题是, truncation
如何在每对的每个句子中的标记数不相等的句子对中工作?
例如,在第一个示例中,输出 '[CLS] this model was pre [SEP] thank to all [SEP]'
两个句子中的记号数不相等,即 [CLS] 4 个记号 [SEP] 3 个记号 [SEP]。
回答1
- True 或 'longest_first':截断为使用参数 max_length 指定的最大长度,或者如果未提供该参数,则截断为模型的最大可接受输入长度。如果提供了一对序列(或一批对),这将逐个截断令牌,从该对中最长的序列中删除一个令牌。
- 'only_first':截断为使用参数 max_length 指定的最大长度,或者如果未提供该参数,则截断为模型的最大可接受输入长度。如果提供了一对序列(或一批对),这只会截断一对序列的第一个序列。
- 'only_second':截断为使用参数 max_length 指定的最大长度,或者如果未提供该参数,则截断为模型的最大可接受输入长度。如果提供了一对序列(或一批对),这只会截断一对序列的第二个序列。
- False 或 'do_not_truncate' (默认):不截断(即,可以输出序列长度大于模型最大允许输入大小的批次)。