Des*_*wal 23 python deep-learning pytorch bert-language-model huggingface-tokenizers
我正在处理文本分类问题,我想使用 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'
Run Code Online (Sandbox Code Playgroud)
那么这 3 个参数会做什么呢?我的想法如下:
max_length=5将严格保留长度为 5 之前的所有句子padding=max_length将为第三句添加 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'])
Run Code Online (Sandbox Code Playgroud)
Ash*_*'Sa 30
您的假设几乎是正确的,但是几乎没有差异。
max_length=5,max_length 指定标记化文本的长度。默认情况下,BERT 执行单词片段标记化。例如,单词“playing”可以拆分为“play”和“##ing”(这可能不是很精确,只是为了帮助您理解单词片段标记化),然后在[CLS]开头添加标记句子,以及[SEP]句子末尾的标记。因此,它首先对句子进行标记,将其截断为max_length-2(if truncation=True),然后[CLS]在开头添加前缀,[SEP]在末尾添加标记。(因此总长度为max_length)
padding='max_length',在这个例子中,第三个例子将被填充并不是很明显,因为5在附加[CLS]和[SEP]标记之后长度超过了。但是,如果您的 amax_length为 10。标记化文本对应于[101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0],其中 101 是 id of [CLS],102 是 id of [SEP]tokens 。因此,用零填充以使所有文本的长度为max_length
同样,truncate=True将确保严格遵守 max_length,即,max_length只有在以下情况下才将较长的句子截断:truncate=True