李宏毅2020机器学习深度学习:ELMO, BERT,GPT

由Contextualized Word Embedding引入

本篇应该与之前的笔记:Word Embedding配合使用。

在Word Embedding这篇笔记中,是要求同一个单词(one-hot编码)在不同位置输入,要得到同样的词向量。即不管对应的 word 出现在哪个句子中的哪个位置, 它在向量空间中的 representations 不变。
(In typical word embedding, each word type has an embedding)
在这里插入图片描述
在这里插入图片描述
但考虑到同一个词汇,在不同的语境可能有不同的意思。
如上图中的“bank”,出现在不同的句子中,上下文不同,词义也不同。

说明一下,这里的word token 就是 tokenization 得到的一个个 token; 而 word type, 就是字面的意思, 可以理解成一个单词的拼写形式。
'bank’这个词是一个word type,同时它是一个多义词,当在具体一句话被切出来时,得到的就是一个与上下文相关的word token。

因此希望不同意思的token,也会有不同的embedding。
通过Contextualized Word Embedding解决这一问题。
Each word token has its own embedding (even though it has the same word type)
The embeddings of word tokens also depend on its context.

在这里插入图片描述
上下文越相近的token,就有越相近的embedding。

参考论文:Contextual Word Representations: A Contextual Introduction
注1:tokenization,也叫word segmentation,是一种操作,它按照特定需求,把文本切分成一个字符串序列(其元素一般称为token,或者叫词语)。
注2:原论文注释参考
注3:tokenization的粒度有三种,字粒度、词粒度和子词粒度。

那么,怎么实现Contextualized Word Embedding呢?

Embeddings from Language Model(ELMO)

原论文链接

ELMO是一个RNN-based language models。

ELMO使用大量的句子进行训练,数据不需要标注

所做的事情就是预测下一个token是什么。

RNN的hidden layer就是token embedding(它与之前的输入有关)

为什么得到的是Contextualized Word Embedding呢?
比如对于同一个词语,“退了”
经过“ < B O S > <BOS> <BOS>, 高 烧 高烧 退 了 退了 退” 和 “ < B O S > <BOS> <BOS>, 臣 臣 退 了 退了 退” 生成的hidden layer是不同的。

为了得到“退了”这个token的embedding,可以把前向和后向RNN得到的hidden layer concat起来
在这里插入图片描述
当RNN “deep”起来的时候,到底用那一层的呢?同一个词汇用哪一层的embedding呢?
在这里插入图片描述
ELMO 进行了线性加权求和(下图中假设有两层网络)
在这里插入图片描述
加权系数如何得到?
根据不同的下游任务学习得到。
原论文中,最终的embedding有三个来源:

  • token: 没有contextualized的word embedding
  • LSTM1: 第一层得到的contextualizedword embedding
  • LSTM2: 第二层得到的contextualized word embedding

Bidirectional Encoder Representations from Transformers (BERT)

2018年,谷歌发布论文《Pre-training of Deep Bidirectional Transformers for Language Understanding》,首次提出BERT模型,在多项NLP任务中取得优异成绩。

BERT的全称是Bidirectional Encoder Representation from Transformers,即基于Transformer的双向编码器表征。

在这里插入图片描述
BERT不需要标记数据
输入一个句子, 输出每个词语(token)的embedding
其内部架构是Transformer的encoder部分

一个问题,中文是用词好还是字好?

BERT训练方法

方法1 Masked LM
将部分词汇masked,原本完整的句子就是正确数据。
将masked的词的embedding输入到一个线性多分类器中,类别数和整个词表相同,输出为被masked的词为各个词的概率。
训练BERT填回这些被masked的词。
整个过程类似于“完形填空”。

直观地看,如果两个词填在同一个地方没有违和感,那它们就有类似的embedding。
在这里插入图片描述
方法2: Next Sentence Prediction

[SEP]作为两个句子的分隔符
[CLS]表示在这个位置需要去做预测
,其输出的emebdding会输入到一个二分类器中,去预测是还是否。

给bert两个句子,bert预测两个句子是不是接在一起的。

因为我们获取了完整语料,我们是知道这两个句子是否相接的。
在这里插入图片描述
两种方法是同时使用的。

BERT的应用

case1:

在这里插入图片描述
举例来说,做情感分类任务和文本分类任务
输入一个句子,输出一个类别
做法是把[CLS]和句子一起输入BERT,将[CLS]的embedding输入线性分类器进行训练
线性分类器的参数要从头学,BERT的参数微调(fine-tune)

case2:

在这里插入图片描述
做句子中单词的slot filling
输入一个句子,输出每个单词的class
将每个word经过bert输出的embedding输入线性分类器,进行训练

case3:

在这里插入图片描述
做自然语言推理
推断两个句子之间的关系,比如一个是前提的句子和一个是假设的句子,他们的关系可以是蕴涵,中立和矛盾。在BERT中被处理为一个三分类的问题,和训练句子是否相连方法类似。

case4:

在这里插入图片描述
Extraction-based QA:
假设问题的答案均出现在原文中
输入文档和问题(均被tokenliazation),输出为答案在文章中的位置(token的位置)

文章的每个词汇的embedding都分别与图中红色和蓝色的vector做点积,并经过softmax,看哪个词汇得到的分数最高。得到最高值的词汇,分别是答案的开始和结束的token。

如果s>e则无解。
在这里插入图片描述

ERNIE

在这里插入图片描述
论文链接
https://zhuanlan.zhihu.com/p/59436589

What does BERT learn?

https://arxiv.org/abs/1905.05950
https://openreview.net/pdf?id=SJzSgnRcKX

在不同的任务中,BERT的不同层的重要性是不同的。
在这里插入图片描述

Generative Pre-Training(GPT)

原文链接
GPT的参数量非常庞大,大力出奇迹。

模型参数量
ELMO94M
BERT340M
GPT-21542M

GPT其实是Transformer的decoder

输入一个句子中的一个词,模型去预测句子中的下一个词。
这里注意GPT是顺序输入的,输入“潮水”时, k 3 k^3 k3还没有产生,不参与self-attention运算。

由 <BOS>,“潮水”预测出“退了”
在这里插入图片描述
由 <BOS>,“潮水”,“退了” 预测出“就”
在这里插入图片描述
GPT-2的attention的分析

  • 很多词和第一个输入单词之间的attention值都比较大,个人猜测时因为第一个输入每次都参与运算。
  • 一些指代性别的词和特定职业词汇产生了联系

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值