bert模型以及其演化的模型在NLP的各个比赛中都有异常重要的表现,所以先写一篇bert的论文笔记来记录一下这个模型。本文发表于2018年,作者提出了一种基于双向Transformer的预训练深度语言模型BERT。基于预训练的BERT模型,可以更好地完成分类,标注等下游任务。文章在11个自然语言处理的任务上用BERT模型刷新了记录。

文章背景:预训练模型ElMo[1](2018),GPT[2](2018)等在许多自然语言处理的任务上取得了SOTA的效果。不同于GPT,作者使用双向Transformer进行语言模型的预训练。并使用了不同的预训练任务,提出了BERT,并在多项任务中刷新纪录。

文章贡献:

1.证明了双向预训练对语言表示的重要性。与之前使用的单向语言模型进行预训练不同,BERT使用遮蔽语言模型来实现预训练的深度双向表示。
2.论文表明,预先训练的表示免去了许多工程任务需要针对特定任务修改体系架构的需求。BERT是第一个基于微调的表示模型,它在大量的句子级和token级任务上实现了最先进的性能,强于许多面向特定任务体系架构的系统。
3. BERT刷新了11项NLP任务的性能记录。

文章细节:

BERT的使用包括pre-training和fine-tuning两个部分。在pre-training部分,BERT使用无label数据训练模型中的参数;在fine-tuning部分,BERT使用有label数据对参数进行调整,更好地用于下游任务。

BERT的结构如下图所示,不同于GPT的单向transformer,BERT使用双向transformer来进行堆叠。文章中给出了两个规格的BERT网络。BERTBASE (L=12, H=768, A=12, Total Parameters=110M)和BERTLARGE (L=24, H=1024, A=16, Total Parameters=340M)。

BERT详解,论文笔记

BERT的输入可以是单个句子也可以是一对句子,句子由多个token组成。Token为WordPiece方式(将一个单词分成几个部分,比如lover,loving分为lov,ing,这样做可以有效地捕捉单词词根的信息,减小词表容量,也可以解决OOV问题,常用的方法有BPE方法)。对于输入的序列,每一个token的embedding都由三部分求和而成,分别是token的embedding,句子分割的embedding(如果是两个句子前一个句子segment embedding为0,后一个句子为1),以及位置编码的embedding(该embedding通过训练学习)。Segment embedding提供了句子间的上下文信息,position embedding提供了句子单词位置的信息。Embedding如下图所示。

BERT详解,论文笔记

BERT预训练共有两种不同的任务,第一种是Masked LM任务,在该任务下,输入的句子会有15%的token被修改,修改的方式如下:在80%的情况下该单词会变成[mask] token,在10%的情况下;该单词会被修改为另外一个单词;在10%的情况下,该单词不会改变。(之所以不完全使用mask是因为具体输入时没有mask token,修改为另一个单词总体发生的概率只有1.5%,所以不会影响BERT的语法知识学习)BERT需要对该被修改的单词进行预测,预测其原来的单词是什么。预测的过程如下,在mask单词的输出端会连接一个全连接层,连接层的输出维度为token的词库大小、然后通过softmax层后使用交叉熵损失函数学习即可。

BERT详解,论文笔记

第二个预训练任务是对句子是否是上下连续的两句进行预测,[sep] token两侧的句子有50%的概率是前后句,有50%的概率不是前后句,预测的方法如下,在输入句子时第一个token是[cls] token,其对应的输出的token上会连接一个二分类层,同样通过损失函数对其进行训练。上述两个任务在预训练中会同时进行,如上图所示。

BERT训练完成后,就可以将BERT应用到下游任务中,BERT可应用的任务主要包括下述四类。

1. 句子对分类问题,输入句子对,输出分类标签。

对于该任务,只需在cls token对应输出端连接一个全连接层,便可以进行预测,在具体的任务中,需要用有label的数据对该全连接层进行训练,与此同时BERT的参数也会进行微调,这就是fine-tune。训练完成后就可以用BERT完成该分类任务。

2. 单句子分类问题,输入一个句子,输出句子类别。

与双句子分类的结构的方法完全一致。

3. SQuAD问题,从一个段落中找出一个问题所对应的几个词。

对于该任务,会新建两个可学习的向量vs和ve,对于paragraph输出端的向量,vs会与之每一个相乘,然后计算softmax,最大的值则为预测的答案的起始位置,同理ve为结束的位置。

4. 序列标注问题,对一个句子中的每一个单词进行标注。

对于该任务,每一个句子中的输出单词都会连接一个全连接层,输出维度为标注的标签种类数,然后同样用上述方法进行训练即可。

其对应结构如下图所示。

BERT详解,论文笔记

[1] Peters, M. E. et al. Deep contextualized word representations. naacl (2018).

[2] Radford, A. & Salimans, T. Improving Language Understanding by Generative Pre-Training. (2018).

推荐原创干货阅读:  

 聊聊近状, 唠十块钱的

【Deep Learning】详细解读LSTM与GRU单元的各个公式和区别

【手把手AI项目】一、安装win10+linux-Ubuntu16.04的双系统(全网最详细)

【Deep Learning】为什么卷积神经网络中的“卷积”不是卷积运算?

【TOOLS】Pandas如何进行内存优化和数据加速读取(附代码详解)

【TOOLS】python3利用SMTP进行邮件Email自主发送

【手把手AI项目】七、MobileNetSSD通过Ncnn前向推理框架在PC端的使用

【时空序列预测第一篇】什么是时空序列问题?这类问题主要应用了哪些模型?主要应用在哪些领域?

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

BERT详解,论文笔记

个人微信

备注:昵称+学校/公司+方向

拉你进《高质量AI交流群》

BERT详解,论文笔记

点个在看,么么哒!

BERT详解,论文笔记

相关文章: