【问题标题】:How does max_length, padding and truncation arguments work in HuggingFace' BertTokenizerFast.from_pretrained('bert-base-uncased') work??最大长度、填充和截断参数如何在 HuggingFace' BertTokenizerFast.from_pretrained('bert-base-uncased') 中工作?
【发布时间】:2021-03-22 14:16:33
【问题描述】:

我正在处理文本分类问题,我想使用 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'])

【问题讨论】:

    标签: python deep-learning pytorch bert-language-model huggingface-tokenizers


    【解决方案1】:

    您的假设几乎是正确的,但是几乎没有区别。

    max_length=5max_length 指定标记化文本的长度。默认情况下,BERT 执行词片标记化。比如“playing”这个词可以拆分为“play”和“##ing”(这个可能不是很精确,只是为了帮助大家理解词片分词),然后在后面加上[CLS]token句首,[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

    【讨论】:

    • 非常感谢这个详细的回答。我想要截断,因为我正在处理分类问题。所以我不能使用可变长度。我对这个词片还有一个疑问。在我看来,Vocab 已经使用 300B 文本构建了。那么它是否有可能将zaxis 更改为z axiscurrentI 更改为current I?使用Lemmatization 和/或Stemming. Also can it work with sin,cos,theta,gamma` 等会更好。我认为这些也是300B 文本的一部分,因为它仅根据这些预测正确的标签。
    • 我们无法确定currentI 是否会更改为current I。正如current这个词本身就可以分割成碎片。您无需执行词形还原,我对此有答案:stackoverflow.com/questions/57057992/…
    • 我的预处理中有 6 个元素。您能否就我应该使用哪一个提供反馈。 Lemmatization、Stemming、数字移除(任何浮点数或整数)、单长词移除(x、y、i、a、b)、将任何数字更改为“数字”(2 = 数字,123.43=数字),删除停用词,删除特殊字符?您能对此提供反馈吗?
    • 您的另一个答案非常具有描述性,并提供了很多细节。感谢您帮助像我这样的人。
    • 哦!好的。谢谢。我只使用 BERT。所以我认为这些东西不会有那么大的帮助。对于我的自定义模型,情况有所不同。
    猜你喜欢
    • 1970-01-01
    • 2013-12-28
    • 2020-12-11
    • 2017-08-23
    • 2015-11-13
    • 2020-08-10
    • 2023-03-15
    • 2020-11-04
    • 2020-09-29
    相关资源
    最近更新 更多