神经网络之BERT深度剖析

关于BERT


作者:白鹿(花名)

声明:以下介绍均以bert_base为基础进行介绍;

网络结构

在这里插入图片描述

  • 从上面的架构图中可以看到, 宏观上BERT分三个主要模块.
  • 最底层黄色标记的Embedding模块.
  • 中间层蓝色标记的Transformer模块.
  • 最上层绿色标记的预微调模块.

Embedding模块:

BERT中的该模块是由三种Embedding共同组成而成, 如下图
在这里插入图片描述

Token Embeddings 是词嵌入张量, 以[CLS]为起始位标志,[SEP]为结束位标识, 用于之后的分类任务.
Segment Embeddings 是句子分段嵌入张量, 是为了服务后续的两个句子为输入的预训练任务.
Position Embeddings 是位置编码张量, 此处注意和传统的Transformer不同, 不是三角函数计算的固定位置编码, 而是通过学习得出来的.
整个Embedding模块的输出张量就是这3个张量的直接加和结果.

双向Transformer模块:

BERT中只使用了经典Transformer架构中的Encoder部分, 完全舍弃了Decoder部分. 而两大预训练任务也集中体现在训练Transformer模块中.

Base:12

Large:24

预微调模块:

经过中间层Transformer的处理后, BERT的最后一层根据任务的不同需求而做不同的调整即可.
比如对于sequence-level的分类任务, BERT直接取第一个[CLS] token 的final hidden state, 再加一层全连接层后进行softmax来预测最终的标签.

  • 对于不同的任务, 微调都集中在预微调模块, 几种重要的NLP微调任务架构图展示如下

在这里插入图片描述
从上图中可以发现, 在面对特定任务时, 只需要对预微调层进行微调, 就可以利用Transformer强大的注意力机制来模拟很多下游任务, 并得到SOTA的结果. (句子对关系判断, 单文本主题分类, 问答任务(QA), 单句贴标签(NER))

BERT的预训练任务介绍

BERT包含两个预训练任务:
任务一: Masked LM (带mask的语言模型训练)
任务二: Next Sentence Prediction (下一句话预测任务)

  • 任务一: Masked LM (带mask的语言模型训练)

在这里插入图片描述

关于传统的语言模型训练, 都是采用left-to-right, 或者left-to-right + right-to-left结合的方式, 但这种单向方式或者拼接的方式提取特征的能力有限. 为此BERT提出一个深度双向表达模型(deep bidirectional representation). 即采用MASK任务来训练模型.
1: 在原始训练文本中, 随机的抽取15%的token作为参与MASK任务的对象.
2: 在这些被选中的token中, 数据生成器并不是把它们全部变成[MASK], 而是有下列3种情况.
2.1: 在80%的概率下, 用[MASK]标记替换该token, 比如my dog is hairy -> my dog is [MASK]
2.2: 在10%的概率下, 用一个随机的单词替换token, 比如my dog is hairy -> my dog is apple
2.3: 在10%的概率下, 保持该token不变, 比如my dog is hairy -> my dog is hairy
3: 个人想法: 模型在训练的过程中, 并不知道它将要预测哪些单词? 哪些单词是原始的样子? 哪些单词被遮掩成了[MASK]? 哪些单词被替换成了其他单词? 正是在这样一种高度不确定的情况下, 反倒逼着模型快速学习该token的分布式上下文的语义, 尽最大努力学习原始语言说话的样子. 同时因为原始文本中只有15%的token参与了MASK操作, 并不会破坏原语言的表达能力和语言规则.

  • 任务二: Next Sentence Prediction (下一句话预测任务)

在NLP中有一类重要的问题比如QA(Quention-Answer)需要模型能够很好的理解两个句子之间的关系, 从而需要在模型的训练中引入对应的任务. 在BERT中引入的就是Next Sentence Prediction任务. 采用的方式是输入句子对(A, B), 模型来预测句子B是不是句子A的真实的下一句话.
1: 所有参与任务训练的语句都被选中作为句子A.(此处其实是引入了是随机数来控制正负例的构造比例,样本量足够大的时候基本可以达到正负例样本均衡状态)
1.1: 其中50%的B是原始文本中真实跟随A的下一句话. (标记为IsNext, 代表正样本)
1.2: 其中50%的B是原始文本中随机抽取的一句话. (标记为NotNext, 代表负样本)
2: 在任务二中, BERT模型可以在测试集上取得97%-98%的准确率.

Bert细节概括

关于max_senquence_length, (句子对组合长度<=512)

在这里插入图片描述

关于句子对max_sentence_length构造

在这里插入图片描述

由子词mask向全词mask转变

  • 2018年首版bert发布时,mask采用子词mask
  • 2019年5月发布升级版bert,采用全词mask

Whole Word Masking (wwm),一般翻译为全词 Mask 或整词 Mask,出是 Google 在2019年5月发布的一项升级版的BERT中,主要更改了原预训练阶段的训练样本生成策略。简单来说,原有基于WordPiece的分词方式会把一个完整的词切分成若干个子词,在生成训练样本时,这些被分开的子词会随机被mask。 在全词Mask中,如果一个完整的词的部分WordPiece子词被 Mask,则同属该词的其他部分也会被 Mask,即全词Mask。

BERT预训练送入网络的数据格式

在这里插入图片描述

模型微调送入BERT的数据格式

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>