我正在处理文本分类问题,我想使用 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
将为第三句添加 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
, the max_length
指定的长度标记化文本。默认情况下,BERT 执行单词片段标记化。例如,单词“playing”可以分为“play”和“##ing”(这可能不是很精确,但只是为了帮助您理解单词片段标记化),然后添加[CLS]
句子开头的标记,以及[SEP]
句子末尾的标记。因此,它首先对句子进行标记,将其截断为max_length-2
(if truncation=True
),然后在前面加上[CLS]
在开始时和[SEP]
令牌在末尾。(所以总长度为max_length
)
padding='max_length'
,在这个例子中,第三个例子将被填充并不是很明显,因为长度超过5
追加后[CLS]
and [SEP]
代币。但是,如果您有max_length
共 10 个。标记化文本对应于[101, 2026, 2171, 2003, 11754, 102, 0, 0, 0, 0]
,其中 101 是 id[CLS]
102 是 id[SEP]
代币。因此,用零填充以使所有文本的长度为max_length
同样地,truncate=True
将确保严格遵守 max_length,即较长的句子被截断为max_length
除非truncate=True
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)