文献阅读笔记—BERT: Pretraining of Deep Bidirectional Transformers for Language Understanding

迁移学习在nlp领域的应用之pretrain language representation,四连载,建议按顺序看,看完对该方向一定会非常清楚的!

(一)ELMO:Deep contextualized word representations

(二)Universal Language Model Fine-tuning for Text Classification

(三)openAI GPT:Improving Language Understanding by Generative Pre-Training

(四)BERT: Pretraining of Deep Bidirectional Transformers for Language Understanding

这篇paper对细节描述的很清楚,建议直接看原文!!!建议直接看原文!!!

一、问题描述

nlp任务一般分为两类:

        sentence-level:预测句子间的关系,如natural language inference和paraphrasing。

        token-level:需要在token层面上生成输出,如named entity recognition和SQuAD question answering。

迁移学习在nlp的应用主要是采用无标注数据预训练language representation,分为两类:

        feature-based:将预训练的language representation用作额外的输入和原词向量拼接在一起,不参与整个task模型的fine-tuning,不同的task有自己的模型,如ELMO

        fine-tuning:在预训练的language representation后面加上一层全连接和softmax组成分类器,用有标注数据fine-tuning整个分类器,这样的话不同task都可以使用类似的模型,不同的部分比较少,如openAI GPT

这篇google的神作,语言模型是采用Transformer encoder(openAI GPT使用的是Transformer decoder,所以只能从左到右),引入masked LM促成双向深层语言模型(每一层都可以利用双向context,而不像ELMO一样只是在最后一层concat双向context),采用双向LM对token-level的任务很有效使用了next sentence prediction模拟以句子对为输入的情况。并且在sentence-level和token-level共11个问题上做了实验。

二、模型

1. 输入词向量(input representation)

 和openAI GPT类似处理输入句子之间的连接,注意起始这个[CLS]的最后一层hidden state,在分类任务中是用这个hidden state作为整个输入的表示输入到全连接层的。

图中token embedding就是普通的词向量啦,segment embedding是句子A中所有token用的是学到的句子A的embedding(这个具体是用什么恐怕要看代码),句子B中所有token用的是学到的句子B的embedding,position embedding就是token位于句子的第几个单词。将这三种embedding加起来即可。

2. 双向语言模型(masked LM)

随机将输入中15%的token换成[mask]这个字符,相应的也使用这个字符的词向量,在这个字符的最后一层接上全连接+softmax预测原本的token的概率,使这个概率最大(这就是语言模型啦)。只需预测换成[mask]的token,不用像ELMO和openAI GPT一样预测所有token。但是这样的话在inference的时候[mask]从来不会出现在输入中,这样就不同分布了,怎么办呢?

80%的时间将token换成[mask],10%的时间换成其他某个token,10%还是这个token。

那这样需要更多的迭代会收敛吗?看下面的实验结果。

至于为什么transformer encoder可以利用双向context,而transformer decoder不行,看attention is all you need

3. 下一个句子预测(next sentence prediction)

从一篇文档中,找出句子对,其中50%一个句子是另一个句子的下一句,50%不是。就用语言模型预测句子对是不是下一个这种关系。这样语言模型可以学到句子间的关系。

 4. 最后整个模型的fine-tuning

如上图所示,蓝色的框是语言模型,如图a、b,对于分类模型,将[CLS]的最后一层hidden state,作为整个input的表示输入到全连接层,后面跟softmax输出属于某一类的概率。如图c,对于需要输出答案的start和end位置,是token level,预测start时,将所有paragraph token的最后一层hidden state送入全连接层,得到一个值,比如共有500个token,那么就有500个值,将这500个值送入softmax输出start属于某一token的概率,end也是一样预测,只是end的全连接和start的全连接权重不共享。在inference时,因为end的预测没有依赖start,那么需设一个限制end一定要在start之后。如图d,命名实体识别,也是token level,将每个token的最后一层hidden state送入全连接层+softmax,得到输入某个tag的概率,权重共享。

三、实验

在11个task上效果都非常好,并且验证了双向模型的有效性以及transformer相对于lstm的优越性。

模型越深,效果越好(即使模型以及很深了,效果依然有提升)。

masked 语言模型虽然收敛略微慢一点点,但是效果好很多。

 BERT像ELMO一样用作feature效果也比较好(也就是说语言模型不参与最后整个task模型的fine-tuning或者只有少数层参与)

最后的fine-tining对于task数据较少的不友好,数据量大的对超参数的变化不太敏感。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值