基于Transformers的自然语言处理入门【三】-Bert

基于Transformers的自然语言处理入门【三】-Bert

  • 1 Bert模型
  • 2 模型结构
  • 3 预训练任务:Masked Language Model
  • 4 Bert特征提取

1 Bert模型

2018年是自然语言处理技术的一个转折点,运用深度学习技术处理文本的能力通过预训练模型被极大的发挥了出来。同时,伴随着NLP开源社区的贡献,很多强大的模型被封装成组件,让NLP初学者也有机会在各种NLP任务上取得非常好的效果。在众多NLP预训练模型里,最经典的基本就是BERT和GPT了。

BERT在2018年被提出,BERT模型一出现就打破了多个自然语言处理任务的最好记录。BERT的论文发布不久后,BERT团队公开了模型的代码,并提供了基于大规模新书预训练完成的模型下载。BERT的模型代码和模型参数的开源,使得任何一个NLP从业者,都可以基于这个强大的模型组件搭建自己的NLP系统,也节省了从零开始训练语言处理模型所需要的时间、精力、知识和资源。

  • BERT模型首先在大规模无监督语料上进行预训练,然后在预训练好的参数基础上增加一个与任务相关的神经网络层,并在该任务的数据上进行微调训练,最终取得很好的效果,BERT的训练过程:预训练+微调(finetune)
    基于Transformers的自然语言处理入门【三】-Bert_第1张图片

2 模型结构

BERT原始论文提出了BERT-base和BERT—large两个模型,base的参数量比large少一些。BERT模型结构基本上就是Transformer的encoder部分,BERT-base对应的是12层encoder,BERT-large对应的是24层encoder。

  • 模型输入:BERT模型输入有一点特殊的地方是在一句话最开始拼接了一个[CLS] token,这个特殊的[CLS] token经过BERT得到的向量表示通常被用作当前的句子表示。除了这个特殊的[CLS] token,其余输入的单词类似Transformer。BERT将一串单词作为输入,这些单词多层encoder中不断向上流动,每一层都会经过 Self-Attention和前馈神经网络。
  • 模型输出:BERT输入的所有token经过BERt编码后,会在每个位置输出一个大小为 hidden_size(在 BERT-base中是 768)的向量。
    基于Transformers的自然语言处理入门【三】-Bert_第2张图片

3 预训练任务:Masked Language Model

BERT是基于Masked language model进行预训练的:将输入文本序列的部分(15%)单词随机Mask掉,让BERT来预测这些被Mask的词语。这种训练方式最早可以追溯到Word2vec时代,典型的Word2vec算法便是:基于词C两边的A、B和D、E词来预测出词C。
基于Transformers的自然语言处理入门【三】-Bert_第3张图片
除了masked language model,BERt在预训练时,还引入了一个新的任务:判断两个句子是否是相邻句子。如下图所示:输入是sentence A和sentence B,经过BERT编码之后,使用CLS token的向量表示来预测两个句子是否是相邻句子。
注意事项:为了本文的描述方便,在前面的叙述中,均省略了BERT tokenize的过程,但读者朋友需要注意BERT实际上使用的是WordPieces作为最小的处理单元(采用的是wordpiece算法分词):token,而不是使用单词本身。在 WordPiece中,有些词会被拆分成更小的部分。可以阅读和学习subword tokenizer

4 Bert特征提取

由于BERT模型可以得到输入序列所对应的所有token的向量表示,因此不仅可以使用最后一程BERT的输出连接上任务网络进行微调,还可以直接使用这些token的向量当作特征。比如,可以直接提取每一层encoder的token表示当作特征,输入现有的特定任务神经网络中进行训练。
Bert应用可以用来判断两个句子是否相似,判断单个句子的情感,用来做抽取式问答,用来做序列标注。

【参考】Datawhale

你可能感兴趣的:(自然语言处理,bert,自然语言处理,深度学习)