max_length、填充和截断参数在 HuggingFace 的 BertTokenizerFast.from_pretrained('bert-base-uncased') 中如何工作?

2024-03-14

我正在处理文本分类问题,我想使用 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 个参数会做什么呢?我的想法如下:

  1. max_length=5将严格保留长度为 5 之前的所有句子
  2. padding=max_length将为第三句添加 1 的填充
  3. 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(使用前将#替换为@)

max_length、填充和截断参数在 HuggingFace 的 BertTokenizerFast.from_pretrained('bert-base-uncased') 中如何工作? 的相关文章

随机推荐