本帖最后由 奋斗的路上 于 2020-12-25 15:34 编辑
本⽂的⽬的是向NLP爱好者们详细解析⼀个著名的语⾔模型-BERT.
全⽂将分4个部分由浅⼊深的依次讲解.
1: Bert简介.
BERT是2018年10⽉由Google AI研究院提出的⼀种预训练模型.
BERT的全称是Bidirectional Encoder Representation from Transformers.
BERT在机器阅读理解顶级⽔平测试SQuAD1.1中表现出惊⼈的成绩: 全部两个衡量指标上全
⾯超越⼈类, 并且在11种不同NLP测试中创出SOTA表现. 包括将GLUE基准推⾼⾄80.4% (绝
对改进7.6%), MultiNLI准确度达到86.7% (绝对改进5.6%). 成为NLP发展史上的⾥程碑式的
模型成就.
2: 关于Bert的模型架构.
总体架构: 如下图所示, 最左边的就是BERT的架构图, 可以很清楚的看到BERT采⽤了Transformer
Encoder block进⾏连接, 因为是⼀个典型的双向编码模型.
3: 关于Bert训练过程中的关键点.
3.1: 四⼤关键词: Pre-trained, Deep, Bidirectional Transformer, Language Understandinga: Pre-trained: ⾸先明确这是⼀个预训练的语⾔模型, 未来所有的开发者可以直接继承!
整个Bert模型最⼤的两个亮点都集中在Pre-trained的任务部分。
b: Deep:
Bert_BASE: Layer = 12, Hidden = 768, Head = 12, Total Parameters = 110M
Bert_LARGE: Layer = 24, Hidden = 1024, Head = 16, Total Parameters = 340M
对⽐于Transformer: Layer = 6, Hidden = 2048, Head = 8, 是⼀个浅⽽宽, 说明Bert这
样深⽽窄的模型效果更好 (和CV领域的总体结论基本⼀致)。
c: Bidirectional Transformer: Bert的⼀个创新点, 它是⼀个双向的Transformer⽹络。
Bert直接引⽤了Transformer架构中的Encoder模块, 并舍弃了Decoder模块, 这样便⾃
动拥有了双向编码能⼒和强⼤的特征提取能⼒.
d: Language Understanding: 更加侧重语⾔的理解, ⽽不仅仅是⽣成 (Language
Generation)
3.2: Bert的语⾔输⼊表示包含了3个组成部分: (⻅上⾯第⼆张图)
词嵌⼊张量: word embeddings
语句分块张量: segmentation embeddings
位置编码张量: position embeddings
最终的embedding向量是将上述的3个向量直接做加和的结果
3.3: Bert的预训练中引⼊两⼤核⼼任务 (这两个任务也是Bert原始论⽂的两个最⼤的创新点)
a: 引⼊ Masked LM (带mask的语⾔模型训练)
a.1: 在原始训练⽂本中, 随机的抽取15%的token作为即将参与mask的对象。
a.2: 在这些被选中的token中, 数据⽣成器并不是把他们全部变成[MASK], ⽽是有下列3
个选择:
a.2.1: 在80%的概率下, ⽤[MASK]标记替换该token, ⽐如my dog is hairy -> my
dog is [MASK]
a.2.2: 在10%的概率下, ⽤⼀个随机的单词替换该token, ⽐如my dog is hairy ->
my dog is apple
a.2.3: 在10%的概率下, 保持该token 不变, ⽐如my dog is hairy -> my dog is
hairy
a.3: Transformer Encoder在训练的过程中, 并不知道它将要预测哪些单词? 哪些单词
是原始的样⼦? 哪些单词被遮掩成了[MASK]? 哪些单词被替换成了其他单词? 正是在这
样⼀种⾼度不确定的情况下, 反倒逼着模型快速学习该token的分布式上下⽂的语义, 尽
最⼤努⼒学习原始语⾔说话的样⼦!!! 同时因为原始⽂本中只有15%的token参与了
MASK操作, 并不会破坏原语⾔的表达能⼒和语⾔规则!!!
b: 引⼊Next Sentence Prediction (下⼀句话的预测任务)
b.1: ⽬的是为了服务问答, 推理, 句⼦主题关系等NLP任务。
b.2: 所有的参与任务训练的语句都被选中参加。
50%的B是原始⽂本中实际跟随A的下⼀句话。 (标记为IsNext, 代表正样本)
50%的B是原始⽂本中随机抽取的⼀句话。 (标记为NotNext, 代表负样本)
b.3: 在该任务中, Bert模型可以在测试集上取得97-98%的准确率。3.4: 关于基于Bert的模型微调(fine-tuning)
只需要将特定任务的输⼊, 输出插⼊到Bert中, 利⽤Transformer强⼤的注意⼒机制就可以模
拟很多下游任务。 (句⼦对关系判断, 单⽂本主题分类, 问答任务(QA), 单句贴标签(命名实体识
别))
微调的若⼲经验:
batch size: 16, 32
epochs: 3, 4
learning rate: 2e-5, 5e-5
全连接层添加: layers: 1-3, hidden_size: 64, 128
4: Bert模型本身的优点和缺点。
优点: Bert的基础建⽴在transformer之上, 拥有强⼤的语⾔表征能⼒和特征提取能⼒。在11项
NLP基准测试任务中达到了state of the art。同时再⼀次证明了双向语⾔模型的能⼒更加强⼤。
缺点:
1: 可复现性差, 基本没法做, 只能拿来主义直接⽤!
2: 训练过程中因为每个batch_size中的数据只有15%参与预测, 模型收敛较慢, 需要强⼤的算
⼒⽀撑!
引申:1:深度学习就是表征学习 (Deep learning is representation learning)
整个Bert在11项语⾔模型⼤赛中, 基本思路就是双向Transformer负责提取特征, 然后
整个⽹络加⼀个全连接线性层作为fine-tuning微调。但即便如此傻⽠式的组装, 在NLP
中著名的难任务-NER(命名实体识别)中, 甚⾄直接去除掉了CRF层, 照样⼤⼤超越
BiLSTM + CRF的组合效果, 这去哪⼉说理去???
2: 规模的极端重要性 (Scale matters)
不管是Masked LM, 还是下⼀句预测Next Sentence Prediction, 都不是⾸创的概念, 之
前在其他的模型中也提出过, 但是因为数据规模 + 算⼒局限没能让世⼈看到这个模型的
潜⼒, 那些Paper也就不值钱了。但是到了⾕歌⼿⾥, 不差钱的结果就是Paper值钱
了!!!!!!
3: 关于进⼀步的研究展示了Bert在不同的层学习到了什么。
低的⽹络层捕捉到了短语结构⽅⾯的信息。
单词和字的特征表现在3-4层, 句法信息的特征表现在6-9层, 句⼦语义信息的特征表现
在10-12层。
主谓⼀致的特征表现在8-9层 (属于句法信息的⼀种)。 |
|