2020李宏毅机器学习笔记——23. ELMO,BERT,GPT (三种解决一词多意问题的方法)

ELMO,BERT,GPT (三种解决一词多意问题的模型)

摘要

本章主要在介绍ELMO、BERT和GPT 这三种解决一词多意的方法:

  • ELMO的做法是训练一个双向的RNN,每一个单词都对应两个hidden state,进行拼接便可以得到单词的Embedding表示。该Embedding不仅考虑了前文意思,也考虑了后文意思。
  • BERT 内部架构是Transformer的Encoder,常用的训练方法有两个,一个是将句子中的某些word用标志符[mask]代替,让machine去猜被代替的词是什么,如此就可以找到每个word的Embedding。另一个是输入分类标志符和句子间的分隔标志符,然后输入句子是否是可以连在一块的,让machine知道句子间的联系及含义。
  • GPT是Transformer的Dncoder,即其采用多层Transformer Decoder作为特征抽取器,它是最复杂的,占用内存最大的。

1. 提出背景

机器是如何理解我们的文字的呢? 怎样让机器读懂人类文字?

最早的技术是1-of-N encoding,把每一个词汇表示成一个向量,每一个向量都只有一个地方为1,其他地方为0。但是这个方法是有不足的,这样词汇和词汇之间的相关性反映不出来,而且过于稀疏。

接下来有Word Class:建立word class,把有相同性质的word放在同一个 class内,将词汇进行分类,这个方法也比较粗糙,比如动物也分了很多种,不能完全概况。

更进阶的想法Word Embedding:每一个的词汇也用向量来描述,相近的词汇距离较近。主流的做word embedding 算法是Word2vec,其具体训练模式有:通过上下文来预测当前词,通过当前词来预测上下文。与one-hot编码和word class相比,词嵌入可以将更多的信息塞入更低的维度中。

在这里插入图片描述
但是呢,同一个词汇是可能有不同的意思的,如下图中的bank,前两个指银行,后两个是指河堤,还有第三种意思-血库:

在这里插入图片描述
尽管有不同的意思,但使用之前传统的word embedding的方法,每一个word type有一种embedding,但是现在是每一个Word token就有一种embedding,即每一个词义就会有一个embedding。

对不同意思的bank,可以给出不同的embedding表示:(Contextualized Word Embedding根据语义对word进行编码)

在这里插入图片描述
根据上下文语境的不同,同一个单词bank我们希望能够得到不同的embedding。

那怎么样才做到这个操作呢? 基于上述思想——引出ELMO技术

2. Embeddings from Language Model(ELMO)

ELMO是一个RNN-based的语言模型,其任务是学习句子中的下一个单词或者前一个单词是什么。
在这里插入图片描述

它是train一个双向的RNN,这样每一个单词都对应两个hidden state,进行拼接便可以得到单词的Embedding表示。该Embedding不仅考虑了前文意思,也考虑了后文意思。当同一个Word ,它的上下文不一样,得到的embedding就不同。

当我们的RNN是Deep的时候,对于同一个词汇,每一层都会输出一个Embedding,这样该如何选择?
在这里插入图片描述
ELMO的做法就是我全都要:如下图所示,将每一层的的两个Embedding都加权求和,得到代表能够每一层的Embedding,权重的值是learning到的,不同的任务是会有不一样的权重。

在这里插入图片描述

3. Bidirectional Encoder Representations from Transformers(BERT)

BERT的中文意思是来自于转换器的双向编码表示,Transformer中的Encoder就是Bert 预训练的架构。

在这里插入图片描述
我们要记住BERT做的事情是:将一个句子丢进BERT(输入word),然后输出word对应的Embedding。BERT里面的架构是与Transformer中的Encoder是一样的。(如果是中文的话,可以把字作为单位,而不是词,用字为单位是更为恰当的。

3.1 Training of BERT

  1. Masked LM
    它就是随机的将句子中间的词用[Mask]替代,然后让machine去找合适的词填好,通过的上下文预测该单词,类似于一个完形填空任务。这样如果是多个词填在一起没有违和感时,那么它们就会有非常接近的Embedding。
    在这里插入图片描述

  2. Next Sentence Prediction(NSP)
    它做的事情是,给machine两个句子,在句子开头,输入标志符[CLS],句子间用标志符[SEP]表示两个句子的分隔符,[CLS]标志符得到的Embedding会送给一个二分类model,该线性model判断这两个句子该不该连在一块,是连在一起的即输出yes。在这里插入图片描述
    BERT 内部架构是Transformer,即是Self-attition机制,所以[CLS]放在开头或末尾结果都可以,即 [CLS] 的 output 里面肯定含有整句话的完整信息。

3.2 How to use BERT

case 1: classification

如果现在的任务是 classification,首先在输入句子的开头加一个代表分类的符号 [CLS],将分类标志符的对应位置的Embedding丢给Linear Classifier,让其 predict 一个 class 即可。

在这里插入图片描述
整个过程中 Linear Classifier 的参数是需要从头开始学习的,而 BERT 中的参数微调(fine-tuning)就可以了。

case 2: Slot Filling(classification)
比如:Slot Filling问题,向BERT输入word和分类标志符[CLS],然后将句子中各个字对应位置的 output 分别送入不同的 Linear,预测出该字的标签。其实这本质上还是个分类问题,只不过是对每个字都要预测一个类别。

在这里插入图片描述
case 3: NLI(自然语言推理)
它的做法是输入两个句子和分类标志符[CLS],句子间用标志符[SEP]隔开。即给定一个前提,然后给出一个假设,模型要判断出这个假设是 正确、错误还是不知道。这本质上是一个三分类的问题,和 Case 1 差不多,对 [CLS] 的 output 进行预测即可。

在这里插入图片描述
case 4: QA(问答)
实际任务如下:在这里插入图片描述
具体流程:

首先将问题q和文章d通过 [SEP] 分隔,丢入 BERT 之后,得到上图中黄色的输出。(此时我们还要训练两个 vector,即上图中红色和蓝色的向量。)将红色vector和所有的黄色向量进行 dot product,然后通过 softmax,看哪一个输出的值最大,例如上图中d2对应的输出概率最大,那我们就认为 s=2。
在这里插入图片描述

我们用蓝色的向量和所有黄色向量进行 dot product,最终预测得d3 的概率最大,因此 e=3。最终,答案就是 s=2,e=3。

在这里插入图片描述
其中两个红蓝vector是怎么学出来的呢?

4. Generative Pre-Training(GPT)

Generative Pre-Training是一个生成式的预训练模型与ELMO不同的是,GPT是一个Transformer Decoder架构,其采用多层Transformer Decoder作为特征抽取器,多项研究也表明,Transformer的特征抽取能力是强于LSTM的。它的思想也很简单,使用单向 Transformer 学习一个语言模型,对句子进行无监督的 Embedding,然后根据具体任务对 Transformer 的参数进行微调。
在这里插入图片描述
它做的事情是自动填词。GPT是最复杂的,是非常巨大的,神奇的,但是它也是很有效,相比其他model。

由于GPT-2的模型非常巨大,它在很多任务上都达到了惊人的结果,甚至可以做到zero-shot learning(简单来说就是模型的迁移能力非常好),如阅读理解任务,不需要任何阅读理解的训练集,就可以得到很好的结果。比如给一篇文章,然后给一个问题,直接就给答案,
还可以做翻译,特别快。

5.总结与展望

ELMO在处理一词多意的问题上是很有效的,当同一个Word ,它的上下文不一样,得到的embedding就不同,可以适当增加Deep来提高准确率。相比这三个model,ELMO所占内存也是最小的。BERT则是更适合用在处理文本分类的问题上,以及自然语言推理,阅读问答。在文本分类问题的比赛中常常被应用。GPT是这三个model最复杂,占用内存最大的,使用更少的训练数据完成同样的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值