【论文笔记】Bert:Pre-training of Deep Bidirectional Transformers for Language Understanding

原文作者:Jacob Devlin,Ming-Wei Chang,Kenton Lee,Kristina Toutanova

原文标题:Bert:Pre-training of Deep Bidirectional Transformers for Language Understanding

原文来源:谷歌AI团队

原文链接:https://arxiv.org/pdf/1810.04805.pdf

Bert:Pre-training of Deep Bidirectional Transformers for Language Understanding

BERT本质上是通过在海量的语料的基础上运行无监督学习方法为单词学习一个好的特征表示,所谓无监督学习是指在没有人工标注的数据上运行的监督学习。在以后特定的NLP任务中,可以直接使用BERT的特征表示作为该任务的词嵌入特征。所以BERT提供的是一个供其它任务迁移学习的模型,该模型可以根据任务微调或者固定之后作为特征提取器。

背景知识

通常来说,预训练表示应用到下游任务有两种方法,feature-based和fine-tuning。Feature-based方法使用特定任务架构,将预训练得到的表示作为额外特征。Fine-tuning方法引入了最少的特定任务参数量,简单微调与训练得到的参数来训练得到最终的模型。两种方法都使用了单向的语言模型。然而标准的语言模型都是单向的,限制了预训练期间的模型架构。这种限制对于sentence-level的任务和token-level的任务都是有害无益。

本文提出的Bert模型为双向的语言模型,通过使用MLM(masked language model)这种预训练的策略,极大的改善了上述问题。MLM随机遮住输入中的某些token,目标就是基于其上下文预测遮住的单词。MLM使得word的表示融合了其左边和右边的上下文,这为预训练深度双向的Transformer提供了可能。另外这篇文章还提出了next sentence prediction的任务,该任务能够联合预训练的文本对的表示。

bert模型

本文提出的bert模型包括两部分,第一部分为pre-traing阶段,第二部分为fine-tuning阶段。在pre-traing阶段,模型在无标签数据中进行训练。而在fine-tuning阶段,模型首先使用pre-train阶段得到的参数进行初始化,然后在下游任务的标注数据上微调,不同的下游任务得到的模型不同。图一中为问答任务在bert上的运行过程。

【论文笔记】Bert:Pre-training of Deep Bidirectional Transformers for Language Understanding_第1张图片

Bert的特色就是不同任务的模型架构也是统一的,预训练的模型和最终下游的模型的差别最小。

Bert模型就是一个多层的双向Transformer编码器。模型的层数为 L L L,hidden
size为 H H H,自注意力head为 A A A。作者主要介绍了两个大小不同的模型: BERT BASE ( L = 12 , H = 768 , A = 12 , 参 数 量 = 110 M ) \text{BERT}_{\text{BASE}}(L = 12,H = 768,A = 12,参数量 = 110M) BERTBASE(L=12,H=768,A=12,=110M) BERT LARGE ( L = 24 , H = 1024 , A = 16 , 参 数 量 = 340 M ) \text{BERT}_{\text{LARGE}}(L = 24,H = 1024,A = 16,参数量 = 340M) BERTLARGE(L=24,H=1024,A=16,=340M)

为了能够处理各种下游任务,Bert的输入能够清晰地表示一个token序列中单独的句子或者句子对。这个句子可以是一个任意的连续文本,而不一定是实际的语言句子。序列指的是Bert的输入序列,可能是一个句子,也有可能是两个句子打包。

序列的开头使用[CLS]表示。句子之间使用[SEP]划分,然后给每个token加上一个embedding表示其属于句子A或B。一个token的表示最终等于其对应的token embedding、segment embedding 和position embedding之和。如图二所示。关于这三者另发文章进行介绍。

【论文笔记】Bert:Pre-training of Deep Bidirectional Transformers for Language Understanding_第2张图片

Pre-train

使用两个任务预训练Bert。一个是MLM(masked language model),一个是NSP(next sentence prediction)。如图一左侧所示。

  1. MLM

直觉上来说,深度双向的模型一定比单向的或者简单地将两个单项模型拼接起来要有效。作者选择在每个序列中随机mask15%的token,然后对这些token进行预测。但是由于[MASK]token没有出现在fine-tuning阶段,这导致pre-train和fine-tuning并不匹配。作者使用一种策略来缓解这个问题:对于每一个token,以15%的概率将其选中然后,以80%的概率使用[MASK]将其替换,10%的概率将其替换为一个随机的token,10%的概率不动。使用交叉熵损失来预测原始token。

作者在论文中提到这样做的好处是,编码器不知道哪些词需要预测的,哪些词是错误的,因此被迫需要学习每一个token的表示向量。另外作者表示,每个batchsize只有15%的词被遮盖的原因,是性能开销。双向编码器比单项编码器训练要慢。

  1. NSP

类似于QA和NLI这样的NLP下游任务都基于两个句子之间的关系,这在语言建模中不能直接得到。作者对二值化的任务NSP进行预训练。比如有两个句子A,B。B有50%的可能是A的下一句,标记为IsNext;50%的可能不是A的下一句,标记为NotNext。尽管这个任务很简单,但是对QA和NLI都非常有用。

Fine-tuning

Bert使用Fine-tuning来建模很多的下游任务。对于文本对的应用,通常先独立编码文本对,然后应用双向交叉注意力。Bert相反,使用自注意力机制统一这两个阶段。

对每一个任务,Bert使用特定的输入和输出,然后微调全部参数。在输入中,来自于pre-training的两个句子A和B和释义中的句对、蕴涵中的假设-前提对、问答中的问题-段落对或者文本分类或序列标记中的退化文本对类似。输出中,token的表示会应用于token-level的任务,[CLS]表示应用于分类任务。

相比于pre-training,fine-tuning代价较小。

实验

General Language Understanding Evaluation(GLUE)基准测试是各种自然语言理解任务的集合。在GLUE上的实验结果如表1所示。

【论文笔记】Bert:Pre-training of Deep Bidirectional Transformers for Language Understanding_第3张图片

可以看出Bert模型超过了其他所有的模型,表现最好。在准确率上有着4.5%和7%的提升。在MNLI任务上,Bert的绝对准确率提高了4.6%。

SQuADv1.1是一个由10万个问答对组成的数据集,给定一个问题和包含答案的维基百科段落,任务是预测段落中的答案文本跨度。

【论文笔记】Bert:Pre-training of Deep Bidirectional Transformers for Language Understanding_第4张图片

表二中是在SQuADv1.1上的实验结果,毫无疑问,Bert依然是表现最好的。其性能超过原有模型最高5个百分点。另外几项任务不一一赘述。

另外作者还讨论了Pre-training中NSP任务的影响,如表5所示。

【论文笔记】Bert:Pre-training of Deep Bidirectional Transformers for Language Understanding_第5张图片

关于bert使用Feature-based方法的效果如表七所示。

【论文笔记】Bert:Pre-training of Deep Bidirectional Transformers for Language Understanding_第6张图片

3.1.6 总结

通过这篇文章,个人对Bert模型的原理还不是特别清楚,需要阅读更多相关的资料进行更深入细致的了解。

你可能感兴趣的:(论文笔记,bert,transformer,自然语言处理)