记录对于Bert的了解从无到有的过程,完善ing
Day1 [2.5h] 看博客简介,大概了解BERT做什么的、在哪里创新、模型的大概架构
博客入门
背景知识
- 预训练模型目标是输出单词的表示。包括两大类,context-free或者是contextual,前者无论在什么语境下都会输出相同的表达,典型为word2vec;后者会与语境有关。
- Vaswani et al. (2017) 中描述的原始实现multi-layer bidirectional Transformer编码器
缺点:有许多参数需要训练
特点:聚焦机制——不仅仅采用从前往后/从后往前的预测顺序,而是对于一个语句,可以同时启用多个聚焦点,使用上下文全向进行预测。
论文贡献
BERT是第一个深度双向无监督语言表示模型。
- 证明双向预训练对于语言表示的重要性。
- 预训练的表示免去了针对特定任务修改体系架构的需求。
模型简介
BERT,即Bidirectional Encoder Representations from Transformers。
作者认为单向标准语言模型严重限制了预训练模型表示的能力,所以这也是本文改进的目标。
深度学习四要素
训练数据
每一篇文章,都能算是语料,并且不需要标注。
根据自然语言的连贯性,语言模型根据前面的词,去预测后边会出现的词。
模型
算力
应用
为小样本NLP任务(如QA和情感分析)提供训练基础,使用时只需要在训练好的模型上finetuning即可;比起从头训练,可以大大提高准确性。(作为预训练模型本身的目的)
模型架构
基础架构:
Vaswani et al. (2017) 中描述的原始实现multi-layer bidirectional Transformer编码器
绿色盒子代表单词最终的上下文相关表示。
输入表示:
token + segment + position embeddings
其中,区分句子对采用两种方式:一是使用特殊标记SEP,二是添加sentenceA到第一个句子的每一个token当中、添加sentenceB到第二个句子的每一个token当中。
关键创新
提出两项新的预训练任务目标。
预训练是对于上图所示的BERT模型加入全连接层后进行训练,预训练之后去掉全连接层即可以被用来实现各种NLP任务。
任务一: Masked LM
双向模型的困难之处在于,不能简单的效仿单向模型,简单的基于上一个单词和下一个单词来预测中间的单词;这是因为这种操作会使得当前中心词的下一个单词能够间接的在前边预测的时候看到自己。而MLM解决了这个问题。该思路并不是谷歌原创。
缺点一,预训练和finetuning之间不匹配,因为在finetuning期间从未看到[MASK]token。
解决办法是不总是用实际的[MASK]token替换被“masked”的词汇。由于Transformer encoder并不知道哪个词需要被预测,哪个词是被随机替换的,这样就强迫每个词的表达需要参照上下文信息。
缺点二,每个batch只预测了15%的token,这表明模型可能需要更多的预训练步骤才能收敛。
但MLM模型在实验上获得的提升远远超过增加的训练成本。
任务二:下一句预测
方法,将50%句子对的下一句随机替换,然后训练预测B是否为A的下一句。
目的,获取句子间的信息。
参考链接:
官方幻灯片
- 预训练模型的背景知识了解
- 架构没有明白,待补充
参考链接: