使用 BERT 进行文本分类 (01/3)

摄影:Max Chen on Unsplash

一、说明

        这是使用 BERT 语言模型的一系列文本分类演示的第一部分。以文本的分类作为例,演示它们的调用过程。

二、什么是伯特?

        BERT 代表 来自变压器的双向编码器表示。

        首先,转换器是一种深度学习模型,它使用自我注意机制,根据每个单词与其他单词的关系对其进行加权。根据注意力得分,模型可以“注意”序列中的有价值的部分。其次,BERT是双向的,这意味着它在训练时会同时考虑左上下文和右上下文。从这个意义上说,BERT模型可以从两个方向理解上下文。

三、BERT BASE 和 BERT LARGE

        BERT BASE:更少的变压器块和隐藏层大小,具有与OpenAI GPT相同的模型大小。[12个变压器块,12个注意头,768个隐藏层尺寸]

        BERT LARGE:庞大的网络,其注意力层是BERT BASE的两倍,在NLP任务上实现了最先进的结果。[24个变压器块,16个注意头,1024隐藏层尺寸]

        区别:Bert base的参数比Bert large少,因此可以用更少的计算机内存使用。Bert large具有更多的参数,因此它比Bert基数更准确。

四、伯特输入和输出

        输入:[CLS]令牌序列[SEP]

  • [CLS] 代表 分类令牌
  • [SEP] 让 BERT 知道哪个令牌属于哪个序列
  • 可以输入BERT模型的令牌的最大大小为512。因此,如果令牌小于 512,我们可以使用填充来填充空令牌;如果序列中的令牌长度超过 512,那么我们需要截断令牌。
  • BERT 模型的输出将是每个令牌中大小为 768 的嵌入向量。然后,这些令牌将成为分类器的输入。

五、 尝试一个简单的文本

        拥抱脸是一个很棒的学习场所。它提供语言模型、数据集,您甚至可以在那里学习自然语言处理!浏览其网站以获取更多信息:

让我们从拥抱脸中导出一个语言模型,看看它对一个简单的句子有什么作用。我们需要先导入自动标记器来启动语言模型。

pip install transformers
from transformers import AutoTokenizer
tokenizer= AutoTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-v2')
example_text = '今日は一日サッカーをしました'
##('I played soccer for the whole day')##
BERT_input = tokenizer(example_text,padding='max_length', max_length = 20, 
                       truncation=True, return_tensors="pt")


print(BERT_input['input_ids'])
print(BERT_input['token_type_ids'])
print(BERT_input['attention_mask'])
tensor([[    2, 13711,   897,  1031,  2719, 11731,   932,   873, 13276,   881,
             3,     0,     0,     0,     0,     0,     0,     0,     0,     0]])
tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]])

六、解释

  • 填充 :将每个序列填充到指定的最大长度。
  • max_length:每个序列的最大长度。在这个例子中,我们使用 20,但对于我们的实际数据集,我们将使用 512,这是 BERT 允许的最大序列长度。
  • 截断 :如果为 True,则每个序列中超过最大长度的标记将被截断。
  • return_tensors:将返回的张量类型。如果你使用 Pytorch,那么你将使用 pt。如果你使用Tensorflow,那么你需要使用tf。

七 什么是input_ids

我们可以解码令牌以查看input_ids是什么。

example_text = tokenizer.decode(bert_input.input_ids[0])
print(example_text)
[CLS] 今日 は 一 日 サッカー を し まし た [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD]

八、 什么是token_type_ids和attention_mask?

  • token_type_ids是一个二进制掩码,用于标识哪些令牌属于哪个序列。因为我们只有一个序列,所以所有代币都属于类 0。
  • attention_mask是一个二进制掩码,如果令牌是实词,则为 [CLS]、[SEP] 或填充。如果令牌是实词 [CLS]、[SEP],则掩码将为 1。否则,掩码将为 0。

九、总结

        在这篇文章中,我简要介绍了BERT是什么,并使用一个简单的文本来显示使用BERT的标记化结果。达门·

猜你喜欢

转载自blog.csdn.net/gongdiwudu/article/details/132286944
今日推荐