max_length、填充和截断参数如何在 HuggingFace' BertTokenizerFast.from_pretrained('bert-base-uncased') 中工作?
How does max_length, padding and truncation arguments work in HuggingFace' BertTokenizerFast.from_pretrained('bert-base-uncased') work??
我正在处理文本分类问题,我想使用 BERT 模型作为基础,然后是密集层。我想知道这 3 个参数是如何工作的?例如,如果我有 3 个句子:
'My name is slim shade and I am an aspiring AI Engineer',
'I am an aspiring AI Engineer',
'My name is Slim'
那么这 3 个参数有什么作用?我的想法如下:
max_length=5
将严格保留长度为 5 的所有句子
padding=max_length
将在第三句中添加 padding 1
truncate=True
将截断第一句和第二句,使它们的长度严格为 5。
如有错误请指正
下面是我使用过的代码。
! pip install transformers==3.5.1
from transformers import BertTokenizerFast
tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased')
tokens = tokenizer.batch_encode_plus(text,max_length=5,padding='max_length', truncation=True)
text_seq = torch.tensor(tokens['input_ids'])
text_mask = torch.tensor(tokens['attention_mask'])
您的假设几乎是正确的,但是,几乎没有什么不同。
max_length=5
,max_length
指定 标记化文本的长度。默认情况下,BERT 执行分词标记化。例如“playing”这个词可以拆分为“play”和“##ing”(这可能不是很精确,但只是为了帮助你理解词片标记化),然后添加 [CLS]
标记在句子的开头,[SEP]
标记在句子的结尾。因此,它首先对句子进行标记,将其截断为 max_length-2
(如果 truncation=True
),然后在开头添加 [CLS]
并在末尾添加 [SEP]
标记。(所以总共max_length
)
的长度
padding='max_length'
,在这个例子中,第三个例子将被填充不是很明显,因为在附加 [CLS]
和 [SEP]
标记后长度超过 5
.但是,如果您的 max_length
为 10。标记化文本对应于 [101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0]
,其中 101 是 [CLS]
的 ID,102 是 [SEP]
标记的 ID。因此,用零填充以使所有文本的长度为 max_length
同样,truncate=True
将确保严格遵守 max_length,即只有在 truncate=True
时,较长的句子才会被截断为 max_length
我正在处理文本分类问题,我想使用 BERT 模型作为基础,然后是密集层。我想知道这 3 个参数是如何工作的?例如,如果我有 3 个句子:
'My name is slim shade and I am an aspiring AI Engineer',
'I am an aspiring AI Engineer',
'My name is Slim'
那么这 3 个参数有什么作用?我的想法如下:
max_length=5
将严格保留长度为 5 的所有句子padding=max_length
将在第三句中添加 padding 1truncate=True
将截断第一句和第二句,使它们的长度严格为 5。
如有错误请指正
下面是我使用过的代码。
! pip install transformers==3.5.1
from transformers import BertTokenizerFast
tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased')
tokens = tokenizer.batch_encode_plus(text,max_length=5,padding='max_length', truncation=True)
text_seq = torch.tensor(tokens['input_ids'])
text_mask = torch.tensor(tokens['attention_mask'])
您的假设几乎是正确的,但是,几乎没有什么不同。
max_length=5
,max_length
指定 标记化文本的长度。默认情况下,BERT 执行分词标记化。例如“playing”这个词可以拆分为“play”和“##ing”(这可能不是很精确,但只是为了帮助你理解词片标记化),然后添加 [CLS]
标记在句子的开头,[SEP]
标记在句子的结尾。因此,它首先对句子进行标记,将其截断为 max_length-2
(如果 truncation=True
),然后在开头添加 [CLS]
并在末尾添加 [SEP]
标记。(所以总共max_length
)
padding='max_length'
,在这个例子中,第三个例子将被填充不是很明显,因为在附加 [CLS]
和 [SEP]
标记后长度超过 5
.但是,如果您的 max_length
为 10。标记化文本对应于 [101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0]
,其中 101 是 [CLS]
的 ID,102 是 [SEP]
标记的 ID。因此,用零填充以使所有文本的长度为 max_length
同样,truncate=True
将确保严格遵守 max_length,即只有在 truncate=True
max_length