【李宏毅机器学习】Introduction of ELMO、BERT、GPT(p25) 学习笔记
文章目录
- Putting Words into Computers——Introduction of ELMO、BERT、GPT
- Review
- A word can have multiple senses.
- Contextualized 语境化 Word Embedding
- Embedding from Language Model(ELMO)
- Bidirectional Encoder Representatioins from Transformers(BERT)
- Enhance Representation through Knowledge Integration(ERNIE)
- Generative Pre-Training(GPT)
Putting Words into Computers——Introduction of ELMO、BERT、GPT
Review
- 1-of-N Encoding:词和词之间没有任何关联,把每个词汇当作独立的东西来看显然是不够的。
- Word Class
- Word Embedding:相当于soft的word class,每一个词汇用一个向量来表示,向量的每个维度可能表示了词汇的某种含义,语义相近的词汇的向量会比较接近。训练方法:通过词汇上下文来得到。
A word can have multiple senses.
下图中bank是不同的token,同样的type。
过去在word embedding时候,每一个word type有一个embedding,所以不同的token属于同一个type时,他们的embedding vector是一模一样的。
但是这样是不合理的。
Contextualized 语境化 Word Embedding
期望每一个token都有一个embedding,根据token的上下文来实现
如何根据是上下文来为word token给出不同的word embedding呢?——ELMO
Embedding from Language Model(ELMO)
- RNN-based language models
收集很多的句子,就可以进行训练,训练过程所做的事情就是预测下一个token是什么。
学习之后,就可以得到Contextualized 语境化 Word Embedding,RNN中的hidden layer就是现在输入的词汇的Contextualized Word Embedding(是根据前文来预测的,所以是语境化的)
好像这样只考虑了前文,但是没有考虑后文
再训练一个反向的RNN。这样就考虑了上下文。
所以现在,要得到“退了”这个词的Contextualized Word Embedding,就要把“退了”在正向RNN与反向RNN的embedding拿出来拼接起来。
这个RNN可以是deep的,训练deep的时候,会遇到问题,有很多层,有很多层都要embedding,那么应该要用哪一层呢?同一个词汇要用哪一个embedding呢?
ELMO做法
现在每层都会给一个Contextualized Word Embedding,每个词放进去都会吐出来不止一个embedding,因为每一层RNN都会给出一个embedding,把这些embedding结合起来一起使用。
和都是要学习的参数。
不同任务的和是不同的。
Coref和SQuAD特别需要第一层的Contextualized Word embedding(颜色最浅,权重最大),而其他的任务就没那么需要(每一种不同的embedding的weight是比较平均的)
Bidirectional Encoder Representatioins from Transformers(BERT)
BERT = Encoder of Transformer
在BERT中,只需要收集很大数量的没有标注的文本。
虽然投影片上使用词作为单位,但是在实战中,用中文的字来作为单位更好。中文的字是有限的。
Training of BERT
Approach 1:Masked LM
给Bert的任务是把输入的句子随机有15%的词汇被置换为特殊的token——MASK。
BERT就需要对遮住的词汇进行猜测。
Approach 2:Next Sentence Prediction
让BERT做Next Sentence Prediction,给BERT两个句子,让BERT判断这两个句子是否是连接在一起的。
[SEP]代表两个句子中的边界。
[CLS] 在这个位置要输出分类结果,把他的输出传入到一个线性二元分类器中,让其输出这两个句子是否应该连接在一起。
两种方法是要同时使用的。
把BERT当作抽取feature的工具,拿产生的新的embedding去做想做的任务。
How to use BERT
在BERT论文中:把BERT模型和接下来要解决的任务一起做训练。给出了四个例子。
Case 1
- 输入:一个单句子
- 输入:类别
- 例子: 文本分类,句子分析(正面/负面句子)
在训练的时候,线性分类器的参数是是随机初始化的,从头开始计算的。
BERT的参数可以跟着Fine-tune,即BERT的参数是可以和线性分类器一起学习的,线性分类器从头学,BERT只需要微调。
所以,实际上需要从头学的参数很少,多数参数都已经在BERT里训练好了。
Case 2
- 输入:一个单句字
- 输出:每个单词的类别
- 例子:Slot filling,输入一个句子,得到句子中的每个词汇属于什么slot/class
BERT输入一个句子,每个词都会输出一个embedding,把每一个embedding丢入线性分类器中,输出class。
训练也是一起训练。线性分类器从头学,BERT微调。
Case 3
- 输入:两个句子
- 输出:类别
- 例子:自然语言推断,给一个前提和一个假设,让机器判断是对还是错还是不知道。其实是一个只有三个类别的分类问题。
把第一个句子丢给BERT,再加入一个[SEP],再丢入第二个句子,在开头地方加入一个代表分类的符号[CLS],在开头的地方输出embedding,拿他去做分类,输入线性分类器,输出类别。
Case 4
用于解决Extraction-based Question Answering的问题。即,给模型读一篇文章,提出一个问题,希望模型得到正确答案,但是需要保证答案一定出现在文章里面。
给出文章和问题的token sequence,输出s和e两个整数,代表答案落在第s个token到第e个token之间。
输入问题,加入[SEP],再输入文章
再去另外训练两个embedding(红色和蓝色)
Enhance Representation through Knowledge Integration(ERNIE)
- Designed for Chinese
What does BERT learn?
Multilingual 多语言 BERT
使用104种语言训练,看过中文但是没有被教中文文章分类,只是被教英文文章分类,但是可以自动学到了中文文章的分类。
Generative Pre-Training(GPT)
GPT很大
BERT是Transformer的encoder
GPT是Transformer的decoder
Generative Pre-Training(GPT)
weighted sum
GPT2很巨大,所以功能很强大!
可以做到在完全没有训练资料的情况下,做到:
- Reading Comprehension
Reading Comprehension指的是QA,BERT也可以做,但是需要训练资料,而GPT2可以在完全没有与QA有关的训练资料的情况下,就可以硬做Reading Comprehension,输入文章和问题,就可以强行给出答案。 - Summarization
给GPT2一篇文章,输入“TL;DR”符号(too long;don’t read),GPT2自动输出文章摘要 - Translation
输入很多英文句子,写等号,后面接法语句子,重复两次,接下来给第三个英文句子,就可以自动输出他的法语翻译句子。
在GPT2中,右边图中,左边是下一层的结果,右边是前一层要被attention的对象。
左边图,是对不同层的不同head做分析。很多不同词汇都要看第一个词汇,可能在不知道要和谁做attention或者不需要attention的时候就看第一个词,所以也许或许可以在句子里加一个特殊词汇,在不知道attend到哪里就attend(append?听不清)到这里。
GPT太强了!可以做问答,编故事,写python和C的代码!!
其实很自然 因为它预训练的任务是预测下一个可能的词汇
训练过的,但是没用过针对性的语料数据,就迁移学习的思想
GPT 语料库很大,所以training data里面有很多类似的例子…
1、GPT很强!
2、BERT可以下载下来,但是GPT2是你无法得到的人。2333333