【PLM—1】——2019-NAACL-Bert

来自2019年NAACL的BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,进一步点燃了文本数据的大规模自监督预训练时代,虽然此前自监督训练、无监督训练很常见,例如Word2Vec的Cbow和Skipgram或者ELMO这些,但是我觉得Bert主要是规模比较大,利用了Transformer模型,效果比较好。

在【PLM-3】中,我们对BERT的模型结构实现进行具体讲解。

1.提出背景:

NLP任务相比于CV任务,我们明显可以感受到其符号的结构性强,需要符号推理系统,也需要统计信息参与,其它还有很多固定用法、常识背景的参与,使得语言现象极端复杂。一些基于统计的方法以及现在的神经网络方法,本质上还是对普遍的,大规模信息进行建模。
在Imagenet上训练(pre-training)的用于classification的CNN可以有效地帮助高级任务,而此前NLP中的大部分模型都是特殊问题,特殊设计。

  • 注意,哪些思想帮助了Bert的产生,哪些是自己的思想呢?

Bert模型借鉴了Elmo的工作,以及GPT工作的建模,在摘要中就已经引用了。

两类密切相关的pre-trained language representations。The two approaches share the same objective function during pre-training, where they use unidirectional language models to learn general language representations.

1.1 无监督feature-based

The feature-based approach, such as ELMo (Peters et al., 2018a), uses task-specific architectures that include the pre-trained representations as additional features.
其它比如很多词向量,word2vec和GLOVE等等

1.2 无监督fine-tuning:

The fine-tuning approach, such as the Generative Pre-trained Transformer (OpenAI GPT)introduces minimal task-specific parameters, and is trained on the downstream tasks by simply fine-tuning all pretrained parameters.

1.3 有监督的迁移学习

例如机器翻译和nature laguage inference,(但是似乎效果并不理想,感觉其实是数据不够多)本文其实也证明了,无监督的大量数据比有监督的少量数据,训练得到的效果更好。

2.存在问题

NLP任务中虽然已经有一些预训练的方法了,比如在sentence-level和token-level上都可以进行应用。

本文针对于一般的language Understanding的问题,利用Transformer架构实现了双向语言模型的建模,构造了预训练的 language representation模型

3.主要的工作、模型

在GLUE任务和MultiNLI和SQuAD几个任务上做了很大的提升,无论是绝对值还是相对值(都写在了摘要中)。总之,Bert让NLP的大量无监督数据下的预训练,火出圈了。

主要运用的时候,分为预训练和fine-tune两步,预训练后的模型参数用于fine-tune,fine-tune的具体任务各自使用有监督的数据和少部分不同的参数,进行训练。这是预训练方面的,本领域标准的pipeline

  • 从写论文的方面,介绍一下是很好的。

  • 这里呢,主要有 B e r t B a s e Bert_{Base} BertBase B e r t L a r g e Bert_{Large} BertLarge两个模型。

Bert模型的复杂度(计算复杂度?)很层数是线性关系,和宽度是平方关系,因此,深度变为两倍,那么宽度大概应该是 2 \sqrt 2 2 倍,头的个数随着模型的宽度增加而增加。

3.1 输入输出的表示

  • 输入格式
  • 词典构造
  • how to embedding?

考虑到使得模型对于一般数据的方便的处理,因此只有一个编码器,无论输入的是句子对,还是句子,都可以将它们处理成一个序列(sequence),即输入的。相比之下,Transformer的输入是句子对。

这里使用WordPiece的embedding方法,构建词典,避免词典过于庞大。如何把两个句子放在一起?序列的头部,为【CLS】(因为注意力可以看到所有词,所以也不一定放到最后),而句子间使用【SEP】记号分割。

对于一个输入的token(词元),我们实际上的embedding是词语"本身embedding(token embedding)"+“句子embedding(segment embedding)”+“位置embedding(position embedding,在序列中的位置)”,确实是相加,不是拼接。。这里三个embedding都是学的,Transformer的位置是人工构造的。

3.2 预训练Bert

双向为什么好?比较容易理解吧,但是之前不用双向的原因是,实际上,我们不能在看到答案的时候,再去预测,因此之前很多模型都是单向的。不过这里由于是完形填空,因此不用担心这个问题。不过Transformer双向确实比较诡异。

3.2.1 MLM(masked language model)

随机对wordpiece生成的token进行15%概率的掩码,将他们替换为【MASK】即【CLS】、【SEQ】这些特殊的token就不进行掩码。
但是注意,我们在微调的时候,【MASK】是没有的,因此在pre-train和fine-tuning的时候,输入数据其实就不同了,可能会造成问题。因此实际上构造训练数据的时候,在这选中的15%的token中,有80%的概率真的变为【MASK】,10%的概率变为其它随机的token(噪音,类似denoise autoencoder),还有10%的概率保持不变(这就很幽默了。。,真的在做finetune)

  • 我们的目标是,通读序列后,对这些【mask】进行预测

3.2.2 NSP(next sentence prediction)

在QA和Nature language Inference都需要一些句子层面的理解,因此作者认为需要学习一些句子层面的关系。
对于输入序列其中的句子,其中各个用【SEP】分割的句子,用50%的概率将序列(句子A,句子B),随机换成(句子A,句子C),也就是next sentence的随机替换。

3.2.3 预训练的数据:

使用BookCorpus(800M词语)和English Wikipedia(2500M 个词语)
值得注意的是,使用document_level的语料,而不是随机的打乱的句子,因为实际上Transformer对于长句子的处理,还确实不错,因此可以使用比较长的连续的句子。

3.3 fine-tune

和Transformer的decoder和encoder架构有区别,直接把所有信息都读到encoder里,而self-attention也允许我们直接读到所有信息。代价就是,似乎不能做机器翻译。

At the input, sentence A and sentence B from pre-training are analogous(相似的) to(与下列形式上相似的是)

  1. sentence pairs in paraphrasing, (改写)
  2. hypothesis-premise(假设-前提) pairs in entailment(蕴含)
  3. question-passage pairs in question answering, (QA)
  4. a degenerate text-∅ pair in text classification or sequence tagging. (分类或者tagging标注)

At the output:
1.the token representations are fed into an output layer for token level tasks, such as sequence tagging or question answering,
2.the [CLS] representation is fed into an output layer for classification, such as entailment or sentiment analysis.(稍微有点神奇?)

4.主要的创新,

  1. 提出一种基于fine-tune的模型,使用Transoformer,对双向的语言模型的建模,使用masked language model的目标函数方法(inspired by CLoze task,完形填空)。即,掩码后的句子,完全允许双向地看一个句子,并对词语做出预测。此外引入Next sentence prediction的方法。
  2. 本模型减少了对于任务具体设计的必要性;
  3. 大幅度提高了多个任务的成绩。

5.实验

5.1 GLUE(NLU)

认为最后隐藏层的【CLS】向量蕴含了整个序列的信息:
we represent the input sequence (for single sentence or sentence pairs)
as described in Section 3, and use the final hidden vector C ∈ R H C \in R^H CRH corresponding to the first input token ([CLS]) as the aggregate representation.

5.2 SQuAd(QA)

任务:给定一段话,问一个问题,需要找出答案所对应的片段。因此我们只需要学一个开头向量和结尾向量,即作为开头词语的概率和结尾词语的概率。

  • 注意,后来发现Bert做微调的结果不太稳定。据说是因为优化器使用了“Adam的不完全版本”,使得Bert在短时间训练下,效果不稳定。

5.3 SWAG:(sentence inference)

略,大致方法和上面类似,也只需要对输出改变相应的输出层。

5.4 Abalation

首先模型变大,效果会变好;而本文将模型变的特别大,会使得language model的效果好。(Bert参数1个亿很大,但是现在GPT已经可以达到1000亿参数。。)

5.5 不微调:

直接利用特征,不微调,效果比微调的差。因此还是要微调(直接用特征不微调,是指freeze这个)

6. 评价

  • 总结和主要贡献还是不太一样的,一个是自己提出的方法上的创新和结果上的创新,总结的话可以提出一些对于未来工作可能做出的贡献。

GPT是用language modeling的方法做自监督(next word prediction),而bert相当于denoising的自监督方法,完型填空。

本文是一个很好的A+B式的工作,把ELMO的双向建模和GPT的Transformer用在一起,效果很好。

李沐对文章写法的评价

整体结构中规中矩,卖点(解决问题)最好只有1个,实际上一篇文章的卖点可能有很多,这里作者给出的卖点是:双向性。但是本文的贡献,实际上,对于解决问题的思路有很好的贡献,以及使得大量无监督数据度的大型预训练效果很好,满足深度学习的研究者期望——简单、暴力效果好。

  • 如果我们选用了双向性作为卖点,可以说说好、坏的两面性。可能带来更好地MLM的理解,但是使得翻译、摘要、生成等任务,不太好。
  • Bert和GPT在做任务的思路上,差不多,但是Bert的效果上好不少,因此引用量更多。

其实此前预训练在CV方面应用很多,无监督预训练也常常用于RBM等等网络参数初始化上。在NLP上相对不太多,但是一定注意pretrain+finetune本身,不是个新概念,只不过Bert带火了NLP领域的自监督式的预训练。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值