Pytorch BERT Tokenizer中的max_length、padding和truncation参数如何工作

Pytorch BERT Tokenizer中的max_length、padding和truncation参数如何工作

在本文中,我们将介绍HuggingFace的BERT Tokenizer中的max_length、padding和truncation参数的工作原理,并提供一些示例说明。

阅读更多:Pytorch 教程

BERT Tokenizer简介

BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型。在使用BERT进行文本解析之前,我们需要使用BERT Tokenizer将文本数据转换成模型可接受的输入。HuggingFace的BERT Tokenizer是一个用于处理文本数据的工具,可以将文本切分为标记(tokens),并进行相应的编码和填充。

max_length参数

max_length参数用于指定切分后的文本序列的最大长度。如果输入文本的长度超过了max_length,则会进行截断(truncation)以确保序列的长度不超过max_length。如果输入文本的长度不足max_length,将会进行填充(padding)以使序列长度一致。

下面是一个示例:

from transformers import BertTokenizerFast

tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased')
text = "This is an example sentence."

encoding = tokenizer.encode_plus(
    text,
    max_length=10,
    padding='max_length',
    truncation=True,
    return_tensors='pt'
)

print(encoding)

在上述示例中,我们使用了BERT-base-uncased模型的Tokenizer,并将输入文本设置为”Thi is an example sentence.”。将max_length参数设置为10,padding参数设置为’max_length’,truncation参数设置为True。返回值encoding是一个字典对象,其中包含了切分后的编码结果。

输出结果为:

{'input_ids': tensor([[ 101, 2023, 2003, 2019, 2742, 6251,  102,    0,    0,    0]]),
 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]),
 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 0, 0, 0]])}

从输出结果可以看出,由于输入文本长度超过了max_length的限制,被截断为”Thi is an”,同时padding参数指定的最大长度为10,所以使用0进行了填充。

padding参数

padding参数用于指定填充的方式。可以使用不同的填充方式,如’max_length’、’longest’、’do_not_pad’等。

  • ‘max_length’:填充后的序列长度将与max_length参数指定的长度一致。对于超过max_length长度的序列,进行截断;对于不足max_length长度的序列,进行填充。
  • ‘longest’:填充后的序列长度将与最长的序列长度一致。所有序列都将在最长序列的基础上进行填充或截断。
  • ‘do_not_pad’:不进行填充操作。

以下是一个示例:

from transformers import BertTokenizerFast

tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased')
texts = ["This is an example sentence.",
         "Another example sentence.",
         "Yet another example sentence."]

encoding = tokenizer.encode_plus(
    texts,
    padding='max_length',
    truncation=True,
    return_tensors='pt'
)

print(encoding)

在上述示例中,我们将padding参数设置为’max_length’,即填充后的序列长度与最大长度一致。输入文本包含3个句子,返回值encoding是一个字典对象,其中包含了切分后的编码结果。

输出结果为:

{'input_ids': tensor([[  101,  2023,  2003,  2019,  2742,  6251,   102,     0,     0,     0],
        [  101,  2178,  2742,  6251,  6251,  102,     0,     0,     0,     0],
        [  101, 56856, 2178, 2742,  6251,  6251,  102,     0,     0,     0]]),
 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]),
 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 0, 0]])}

从输出结果可以看出,由于输入文本的长度不一致,最长的句子是”Yet another example sentence.”,长度为6个标记(token)。对于不足最大长度的序列,进行了填充;对于超过最大长度的序列,进行了截断。最终切分后的编码结果中,input_ids表示了每个标记的编码,token_type_ids表示了每个标记所属的句子,attention_mask表示了每个标记是否需要被关注。

truncation参数

truncation参数用于指定是否进行截断,默认为False。当truncation参数设置为True时,如果输入文本长度超过了max_length,将会进行截断操作;当truncation参数设置为False时,输入文本长度超过max_length将导致错误。

以下是一个示例:

from transformers import BertTokenizerFast

tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased')
text = "This is an example sentence. It is a very long sentence that will be truncated."

encoding = tokenizer.encode_plus(
    text,
    max_length=10,
    padding='max_length',
    truncation=True,
    return_tensors='pt'
)

print(encoding)

在上述示例中,我们将输入文本设置为长度较长的句子,并将max_length参数设置为10,padding参数设置为’max_length’,truncation参数设置为True。由于输入文本长度超过了max_length,将会进行截断操作。

输出结果为:

{'input_ids': tensor([[  101,  2023,  2003,  2019,  2742,  6251,   102,     0,     0,     0]]),
 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]),
 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 0, 0, 0]])}

从输出结果可以看出,输入文本被截断为”Thi is an”,并进行了填充操作。

总结

本文介绍了HuggingFace的BERT Tokenizer中的max_length、padding和truncation参数的工作原理。通过合理设置这些参数,可以将输入文本切分为合适长度的序列,并进行相应的填充和截断操作。了解这些参数的作用和用法将有助于我们更好地使用BERT Tokenizer进行文本处理和预训练模型的应用。

希望本文对你理解BERT Tokenizer的工作方式有所帮助。使用max_length参数可以控制序列的最大长度,如果文本长度超过了max_length,则会进行截断操作;如果文本长度不足max_length,则会进行填充操作。padding参数可以指定填充的方式,以使所有序列的长度一致。常见的填充方式有’max_length’、’longest’和’do_not_pad’。truncation参数用于控制是否进行截断操作,默认为False。如果设置为True,当文本长度超过max_length时将进行截断;如果设置为False,超过max_length的文本将导致错误。

通过灵活使用这些参数,我们可以根据任务和需求对输入文本进行合适的处理,以提供给BERT模型进行训练或推断。

希望本文对你理解BERT Tokenizer中的max_length、padding和truncation参数的工作方式有所帮助,使你可以更好地应用BERT模型进行文本处理和自然语言处理任务。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程