2020李宏毅机器学习笔记-ELMO, BERT, GPT

目录

摘要

1. Background

2. ELMO

3. BERT

3.1 Training of BERT

3.1.1 Approach 1:MaskedLM

3.1.2 Approach 2:Next Sentence Prediction(NSP)

3.2 How to use BERT

3.2.1 case 1: classification

3.2.2 case 2: Slot Filling(插槽填充)

3.2.3 case 3: NLI(自然语言推理)

3.2.4 case 4: QA(问答)

3.3 What does BERT learn

4. Generative Pre-Training(GPT)

4.1 无监督的 Pretraining

4.2 GPT2

4.3 Example

结论与展望


摘要

本节主要讲的是解决一词多意问题的方法的三种方法:ELMO,BERT,GPT。首先概略地复习一下,在有ELMO, BERT, GPT这些技术前,我们如何做NLP:使用对词独热编码(one-hot),之后考虑了Word Class,Word Embedding技术。但是,一个词汇可能有不同的意义,因此,我们不考虑word type,而是word token对嵌入。

为了做到Contextualized Word Embedding,具体来说使用Embeddings from Language Model (ELMO),动态的去更新词的word embedding。之后,介绍了Bidirectional Encoder Representations from Transformers (BERT)。包括BERT的训练与用法。接下来进入Generative Pre-Training (GPT)部分,其体积巨大,BERT是Transformer的Encoder,而GPT是Transformer的Decoder。

这三种方法的在训练和使用都是分为两阶段:预训练和通过fine-tuning模式应用到下游任务。

1. Background

机器是如何理解我们的文字的呢?最早的技术是1-of-N encoding,把每一个词汇表示成一个向量,每一个向量都只有一个地方为1,其他地方为0。但是这么做词汇之间的关联没有考虑,因为不同词之间的距离都是一样的。

所以,接下来有了word class的概念,举例说dog、cat和bird都是动物,它们应该是同类。但是动物之间也是有区别的,如dog和cat是哺乳类动物,和鸟类还是有些区别的。

后来有了更进阶的想法,称作word embedding,我们用一个向量来表示一个单词,相近的词汇距离较近,如cat和dog。那word embedding怎么训练呢?比较熟知的就是word2vec方法。

但是呢,同一个词是可能有不同的意思的,如下图中的bank,前两个指银行,后两个指河堤:

尽管有不同的意思,但使用传统的word embedding的方法,相同的单词都会对应同样的embedding。但我们希望针对不同意思的bank,可以给出不同的embedding表示。

根据上下文语境的不同,同一个单词bank我们希望能够得到不同的embedding,如果bank的意思是银行,我们期望它们之间的embedding能够相近,同时能够与河堤意思的bank相距较远。

基于这个思想,首先有了ELMO。

2. ELMO

ELMO是Embeddings from Language Model的简称。它是一个RNN-based的语言模型,其任务是学习句子中的下一个单词或者前一个单词是什么。

它是一个双向的RNN网络,这样每一个单词都对应两个hidden state,进行拼接便可以得到单词的Embedding表示。当同一个单词上下文不一样,得到的embedding就不同。

当然,我们也可以搞更多层:

这么多层的RNN,内部每一层输出都是单词的一个表示,那我们取哪一层的输出来代表单词的embedding呢?ELMO的做法就是我全都要:

在ELMO中,一个单词会得到多个embedding,对不同的embedding进行加权求和,下图中只画了两层RNN输出的hidden state,其实输入到RNN的原始embedding也是需要的,所以你会看到说右下角的图片中,包含了三个embedding。

但不同的权重是基于下游任务学习出来的,上图中右下角给了5个不同的任务,其得到的embedding权重各不相同。

3. BERT

Bert是Bidirectional Encoder Representations from Transformers的缩写,中文意思就是来自于转换器的双向编码表示,它也是芝麻街的人物之一。Transformer中的Encoder就是Bert预训练的架构。李宏毅老师特别提示:如果是中文的话,可以把字作为单位,而不是词。

3.1 Training of BERT

只是Transformer中的Encoder,那Bert怎么训练呢?给出了两种训练的方法,第一个称为Masked LM,做法是随机把一些单词变为Mask,让模型去猜测盖住的地方是什么单词。假设输入里面的第二个词汇是被盖住的,把其对应的embedding输入到一个多分类模型中,来预测被盖住的单词。

3.1.1 Approach 1:MaskedLM

由于BERT需要通过上下文信息,来预测中心词的信息,同时又不希望模型提前看见中心词的信息,因此提出了一种 Masked Language Model 的预训练方式,即随机从输入预料上 mask 掉一些单词,然后通过的上下文预测该单词,类似于一个完形填空任务。

3.1.2 Approach 2:Next Sentence Prediction(NSP)

仅仅一个MLM任务是不足以让 BERT 解决阅读理解等句子关系判断任务的,因此添加了额外的一个预训练任务,即 Next Sequence Prediction。

具体任务即为一个句子关系判断任务,即判断句子B是否是句子A的下文,如果是的话输出’IsNext‘,否则输出’NotNext‘。

训练数据的生成方式是从语料中随机抽取的连续两句话,其中50%保留抽取的两句话,它们符合IsNext关系,另外50%的第二句话是随机从预料中提取的,它们的关系是NotNext的。先把两句话连起来,中间加一个[SEP]作为两个句子的分隔符。而在两个句子的开头,放一个[CLS]标志符,将其得到的embedding输入到二分类的模型,输出两个句子是不是接在一起的。

3.2 How to use BERT

训练BERT后不但可以获得词向量表示,由于训练BERT一般和下游任务模型一起训练,所以还会获得别的信息,下面看四种使用BERT的方法。

3.2.1 case 1: classification

如果现在的任务是 classification,首先在输入句子的开头加一个代表分类的符号 [CLS],然后将该位置的 output,丢给 Linear Classifier,让其 predict 一个 class 即可。整个过程中 Linear Classifier 的参数是需要从头开始学习的,而 BERT 中的参数微调(fine-tuning)就可以了。

3.2.2 case 2: Slot Filling(插槽填充)

如果现在的任务是 Slot Filling,将句子中各个字对应位置的 output 分别送入不同的 Linear,预测出该字的标签。其实这本质上还是个分类问题,只不过是对每个字都要预测一个类别。

3.2.3 case 3: NLI(自然语言推理)

如果现在的任务是 NLI(自然语言推理)。即给定一个前提,然后给出一个假设,模型要判断出这个假设是 正确、错误还是不知道。这本质上是一个三分类的问题,和 Case 1 差不多,对 [CLS] 的 output 进行预测即可。

3.2.4 case 4: QA(问答)

如果现在的任务是 QA(问答),举例来说,如上图,将一篇文章,和一个问题(这里的例子比较简单,答案一定会出现在文章中)送入模型中,模型会输出两个数 s,e,这两个数表示,这个问题的答案,落在文章的第 s 个词到第 e 个词。具体流程我们可以看下面这幅图。

首先将问题和文章通过 [SEP] 分隔,送入 BERT 之后,得到上图中黄色的输出。此时我们还要训练两个 vector,即上图中橙色和蓝色的向量。首先将橙色和所有的黄色向量进行 dot product,然后通过 softmax,看哪一个输出的值最大,例如上图中d2对应的输出概率最大,那我们就认为 s=2。同样地,我们用蓝色的向量和所有黄色向量进行 dot product,最终预测得 d3的概率最大,因此 e=3。最终,答案就是 s=2,e=3

3.3 What does BERT learn

4. Generative Pre-Training(GPT)

GPT是Generative Pre-Training 的简称。从名字上就可以看出其是一个生成式的预训练模型,即与ELMo类似,是一个自回归语言模型。与ELMo不同的是,其采用多层Transformer Decoder作为特征抽取器,它的思想也很简单,使用单向 Transformer 学习一个语言模型,对句子进行无监督的 Embedding,然后根据具体任务对 Transformer 的参数进行微调。

4.1 无监督的 Pretraining

我们知道transformer里有encoder层和decoder层,而GPT里主要用的是decoder层。

整个过程如上图所示,词向量(token embedding)和位置向量(position embedding)的和作为输入,经过12层的Masked Multi-Head Attention和Feed Forward(当然中间也包括Layer Norm),得到预测的向量和最后一个词的向量,最后一个词的词向量会作为后续fine-tuning的输入。

4.2 GPT2

GPT-2依然沿用GPT单向transformer的模式,只不过做了一些改进与改变。那GPT-2相对于GPT有哪些不同呢?看看下面几方面:

  1. GPT-2去掉了fine-tuning层
  2. 增加数据集
  3. 增加网络参数
  4. 调整transformer

4.3 Example

输入一个句子中的上一个词,我们希望模型可以得到句子中的下一个词。

由于GPT-2的模型非常巨大,它在很多任务上都达到了惊人的结果,甚至可以做到zero-shot learning,如阅读理解任务,不需要任何阅读理解的训练集,就可以得到很好的结果。

结论与展望

本节讲的ELMO、BERT和GPT这三种解决一词多意的方法的总结:

1.ELMO的提出就是为了解决语境问题,动态的去更新词的word embedding。ELMO的本质思想是:事先用语言模型在一个大的语料库上学习好词的word embedding,但此时的多义词仍然无法区分,不过没关系,我们接着用我们的训练数据(去除标签)来微调 预训练好的ELMO 模型。这样利用我们训练数据的上下文信息就可以获得词在当前语境下的word embedding。

ELMO的缺点是

  • 使用LSTM特征抽取方式而不是transformer
  • 使用向量拼接方式融合上下文特征融合能力较弱

 

2.GPT从名字上就可以看出其是一个生成式的预训练模型,即与ELMo类似,是一个自回归语言模型。与ELMo不同的是,其采用多层Transformer Decoder作为特征抽取器,因为Transformer的特征抽取能力是强于LSTM的。它的思想是使用单向 Transformer 学习一个语言模型,对句子进行无监督的 Embedding,然后根据具体任务对 Transformer 的参数进行微调。

GPT的缺点是

  •  虽然使用了使用transformer提取特征,但使用单项的语言模型,即单向transformer
  • 占用内存大

3.BERT使用masked language model(MLM)的方法来预训练,这种方法能够训练一个双向的语言模型。除了masked language model的预训练的方法(将句子中的一些word用标志符[mask]代替,让machine去猜被代替的词是什么,这样就可以找到每个word Embedding),BERT还使用了next sentence prediction的预训练方法。BERT主要应用在自然语言推断(natural language inference)和复述(paraphrasing)和问答(question answering)。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值