李宏毅自然语言处理——ELMO/BERT/GPT简介

引言

本文介绍如何让机器理解人类语言,主要是介绍了ELMO、BERT和GPT。

传统的方法

image-20210814114338920

最早的方法是one-hot向量,但是对于机器来说,无法了解词汇之间的关联性,以及相似性。

image-20210814114721990

后来就有了Word Class的概念,我们会对这些单词先进行分类,比如cat和dog都是动物,应该是同类。

但是这种方法又太粗糙了,无法看出dog和cat 和bird的区别。

然后又有了词嵌入技术。

image-20210814114854572

用一个向量来表示每个词汇,语义比较相近的词汇,它们的向量会比较接近。

词嵌入技术过去经常用到,但是它有一个很大的缺点。就是一词多义问题。

image-20210814115302388

用词嵌入技术的话,这四个“bank”会有一模一样的嵌入向量。

image-20210814115610458

过去是怎么解决这个问题的,过去的做法是首先去查词典,知道bank有两种不同的意思,然后训练的时候,会给bank两种不同的向量。

但是这样做有一定的问题,bank可以说有三个意思,在blood bank中,表示血库。

image-20210814115924921

还有一种常见的情况是,同名不同人的情况。

王者农药里面的李白,你能和我们以前了解的诗仙李白是同一个人吗?

image-20210814120136972

所以我们期待每一个token(输入单词)都有一个嵌入向量,哪怕单词类型相同。

ELMo

怎么做呢,还是要看上下文,根据不同的上下文,每个token有不同的意思,相近的上下文,token有相近的意思。

image-20210814120433959

这个技术叫Contextualized Word Embedding(语境词嵌入)。比如上面血库和银行中的“bank”可能会比较近,而河岸的“bank”离它们比较远。

ELMo1 (Embedding from Language Model)就可以做到这件事情。

image-20210814120840308

ELMo是一个基于RNN的语言模型,它不需要对句子进行标注,只需要简单的收集大量的文本数据。就可以训练基于RNN的语言模型。

image-20210814121016708

以“潮水退了就知道谁没穿裤子”为例,它要训练一个语言模型,输入句子开始符<BOS>,希望它输出“潮水”,然后输入“潮水”,希望它输出”退了“。

这样喂给这个模型很多个句子,让它不停的预测下一个单词是什么,学完以后,就有Contextualized Word Embedding,就是RNN的隐藏状态。

image-20210814121353112

为什么这个隐藏状态就带有语境意义呢?

可以理解为,同样的单词,它的上下文不同,输出的隐藏状态也是不同的。

比如“高烧退了”和“臣退了”。

这就是ELMO的基本概念,但是可能有人会觉得这样子只考虑到了词汇的前文,没有考虑下文信息。

还可以再训练一个逆向的RNN,然后把正向RNN的向量和逆向RNN的向量拼接起来。就可以得到考虑了整个上下文的嵌入向量。

image-20210814121829409

我们知道,如果把网络层加深的话可能可以得到更好的结果,我们也可以把RNN加深,但是又带来了一个问题。

image-20210814121918128

那多层RNN的隐藏状态,我们用哪个层来表示最终的嵌入向量呢。ELMO的做法是全都要。

image-20210814122005918

以2层RNN为例,输入一个词汇,会得到两层RNN的隐藏状态,然后把这些状态都加起来。

image-20210814123539871

但不是简单的加起来,而是做了加权平均。

加权平均的权重是学习出来的,并且是要由下游任务模型自己去学习,对于不同的任务会有不同的取值。

BERT

BERT2用到了Transformer的编码器。

BERT只要收集大量无标签的数据,就可以训练出来。

image-20210814124617208

BERT可以输入一个序列,输出这个序列每个token的编码(向量)。

注意,尽管上图用来中文的词汇(“潮水”)作为单位,但实际使用中文字符(“潮”,“水”)作为单位可能更好。

而且中文的词汇有很多,而中文字符是有限的,这样输入向量的维度也是可控的。

那如何训练BERT呢?

有两种方法。

image-20210814125158172

第一种方法叫MASK,以15%的概率盖住输入token,然后让BERT去还原这个token。

具体怎么做呢,把盖住的token输出的向量,丢给一个线性的多类别分类器,让它输出属于每个单词的概率。

image-20210814130002619

因为线性分类是一个比较弱的分类器,所以BERT一定要输出一个非常好的表示向量。

如果两个词汇填在同一个地方没有违和感,那么它们就会有类似的嵌入向量。

第二种方法让BERT做NSP(Next Sentence Prediction),给BERT输入两个句子,中间用分隔符[SEP]分开,BERT要预测这两个句子是否是相邻的。

image-20210814160823155

那要预测这两个句子是否相邻,还要再输入另一个符号[CLS],表示这是一个分类任务。

image-20210814161034268

这个符号一般放在句子的开头,然后得到的输出作为分类结果的向量,再输入到一个线性分类器中,得到最终结果。

为什么要放在句子的开头呢,放在句子结尾不是更好吗。别忘了BERT是基于Transformer的,所以放在哪个位置无关。

这样输入上面两个句子就要输出YES,而输入下面这两个无关的句子,就要输出No。

image-20210814161318992

在原文中方法1和方法2是同时使用的。

假设我们根据方法1和方法2训练好了BERT以后,那怎么应用呢

下面介绍几种用法。第一种是输入一个句子,输出一个类别。

image-20210814161842780

其实是很简单,上面也介绍过。第一个输入是[CLS],然后输出一个句子,在[CLS]得到的输出向量,丢到一个线性分类器中,让这个线性分类器判断句子所属的类别。

其中线性分类器的参数是随机初始化的,并且线性分类器和BERT接着可以一起学习,对BERT进行微调。

第二种用法是用于输入单个句子,输出句子中每个单词的类别。比如填槽(Slot filling)任务。

image-20210814162118495

此时还是输入[CLS]表示分类任务,但是用的是每个输入单词的输出,喂给一个线性分类器,分别来判断每个单词所属的类别。

第三种用法是输入两个句子,输出一个类别。比如NLI(Natural Language Inference,自然语言推理)任务。

image-20210814162259834

此时输入两个句子,中间用[SEP]分隔,在[CLS]的输出向量,接入一个线性分类器,来判断输入的两个句子所具有的关系。是否能从第一句话推出第二句话,或者回答不知道。其实是一个三分类问题。

第四种用法是基于抽取的问答(Extraction-based Question Answering)。

image-20210814182547246

输入问题和文章,输出答案的起始位置和结束位置索引。

image-20210814182705509

输入[CLS]和问题以及答案,经过BERT后,得到每个输入token对应的向量,然后再初始化两个向量,用来计算起始位置和结束位置索引。

假设红色的向量用于计算起始索引,与文章中每个token输出计算点积,最后经过softmax,得到某个索引。

蓝色的计算结位置索引。

如果输出的结束位置在起始位置之前,就说明没有答案。

红色和蓝色的向量也是可以学习的。

以上就是BERT的四种用法。

image-20210814183210952

也有人分析了BERT每一层做了什么,从中可以看到,每一层就像做一个NLP任务。首先决定每个词汇的词性,然后是句法分析,然后是指代消歧等。

上面举例的BERT有24层,假设要做词性标注任务,我们看上图右上角那个POS,对应的11层到13层比较重要,如果我们把11层到13层抽出来,可以发现能比较好的做词性标注任务。

BERT也有多语言的版本。给BERT看过了104中语言的文章后,它似乎学到了不同语言间的对应关系。

image-20210814184004951

如果要做文章分类,只需要给他英文文章,让它去做文章分类;然后它竟然学会了中文文章分类。

GPT

image-20210814184202458

ELMO有9400万个参数,而BERT有3.4亿个参数,感觉很大了吧,但是在GPT-23之前都是弟弟,它有15.4亿个参数。

而GPT-2的升级版,GPT-3更是大哥中的大哥,它有1700亿参数。

我们知道BERT是Transformer的编码器,而GPT其实是Transformer的解码器。

那GPT的原理是什么

GPT要做的事情和一般的语言模型一样,给它一些词汇,它要预测接下来要输出什么词汇。

假设输入句子开始标志<BOS>和“潮水”这两个词汇,希望它能输出“退了”这个词汇。

那要怎么输出“退了”这个词汇呢,同样要做自注意。

image-20210814185047846

预测出“退了”这个词汇后,就把“退了”当成输出,然后继续做自注意,得到下一个输出。

image-20210814185133188

注意它有很多个自注意层,模型非常巨大。然后因此展示了很多有趣的事情。

image-20210814185521945

比如它可以做到完全没有训练资料的情况下,做到阅读理解、摘要生成和翻译。

比如阅读理解,只要输入一篇文章和一个问题,再输入“A:”,它就会自己输出答案。

摘要的话,输入一篇文章,再输入一个特殊的符号“TL;DR:”,然后它就自动输出摘要。

对于翻译来说,只要输入两个英文句子和一个等号,接一个法文句子;再输入第三个英文句子和一个等号,它就会输出对应的翻译。

image-20210814185552060

对于阅读理解来说,这个图表表示,给定1542M个参数量,它的表现和DrQA一样好,神奇的是,根本就没有进行过这方面的训练,它就自己学会了。

然后在自动摘要和翻译任务的表现就没有这么好了。

image-20210814185837554

有人把GPT-2做了可视化,右边可以看到“she”注意到“nurse”;“He”注意到了“The docter”。

左边可以看到,很多不同的词汇,都注意到了第一个词汇,可能在不需要做注意的时候,机器就自动注意到第一个词汇。

为什么GPT用一个独角兽来表示,因为GPT生成了一个完整的独角兽故事。

人类输入

image-20210814190536480

翻译转自:https://zhuanlan.zhihu.com/p/56783766

科学家们有个令人震惊的发现,在安第斯山脉一个偏远且没被开发过的山谷里,生活着一群独角兽。更加让人讶异的是,这些独角兽说着完美的英文。

然后GPT生成了一个独角兽的故事(以下是AI生成的):

The scientist named the population, after their distinctive horn, Ovid’s Unicorn. These four-horned, silver-white unicorns were previously unknown to science.

Now, after almost two centuries, the mystery of what sparked this odd phenomenon is finally solved.

Dr. Jorge Pérez, an evolutionary biologist from the University of La Paz, and several companions, were exploring the Andes Mountains when they found a small valley, with no other animals or humans. Pérez noticed that the valley had what appeared to be a natural fountain, surrounded by two peaks of rock and silver snow.

Pérez and the others then ventured further into the valley. “By the time we reached the top of one peak, the water looked blue, with some crystals on top,” said Pérez.

Pérez and his friends were astonished to see the unicorn herd. These creatures could be seen from the air without having to move too much to see them – they were so close they could touch their horns.

While examining these bizarre creatures the scientists discovered that the creatures also spoke some fairly regular English. Pérez stated, “We can see, for example, that they have a common ‘language,’ something like a dialect or dialectic.”

Dr. Pérez believes that the unicorns may have originated in Argentina, where the animals were believed to be descendants of a lost race of people who lived there before the arrival of humans in those parts of South America.

While their origins are still unclear, some believe that perhaps the creatures were created when a human and a unicorn met each other in a time before human civilization. According to Pérez, “In South America, such incidents seem to be quite common.”

However, Pérez also pointed out that it is likely that the only way of knowing for sure if unicorns are indeed the descendants of a lost alien race is through DNA. “But they seem to be able to communicate in English quite well, which I believe is a sign of evolution, or at least a change in social organization,” said the scientist.

这些生物长着独特的角,科学家们就以此为它们命名,叫Ovid’s Unicorn。长着四只角的银白色生物,在这之前并不为科学界所知。

现在,过了近两个世纪,这个奇异的现象到底是怎么发现的,谜底终于解开了。

来自拉巴斯大学的进化生物学教授Jorge Pérez和他的几个小伙伴,在探索安第斯山脉的时候发现了一个小山谷,没有其他动物也没有人类。

Pérez注意到,这山谷看上去曾是个喷泉的所在,旁边是两座石峰,上面有银白的雪。

然后,Pérez他们就深入探寻这个山谷。“我们爬上其中一座山峰的时候,下面的水很蓝,上面还有一些结晶。”Pérez说。

发现独角兽种群的时候,Pérez和他的小伙伴都惊呆了。都不用靠近,从高空就可以望见这些生物——看上去离得很近,就快摸到它们的角了

在查看这些奇怪生物的时候,科学家们发现它们讲着普通的英文。Pérez说:“比如说,我们注意到,它们有一种共同‘语言’,有点接近方言。”

Pérez认为,这些独角兽起源于阿根廷。在那里,人们相信这些动物是一个消失种族的后裔,在人类到达之前,这个种族就生活在那里。

虽然,这些生物的起源还不清楚,但有些人相信,它们是一个人类和一个独角兽相交而诞生的,那时人类文明还不存在。Pérez说:“在南美洲,这样的事情是很常见的。”

然而,Pérez也指出,要确认它们是不是那个消失种族的后裔,DNA检测可能是唯一的方法。“不过,它们看上去能用英语交流,我相信这也是一种进化的信号,或者至少也是社会组织的一种变化。”他说。

为了防止产生所谓的假新闻,OPEN AI没有释放出参数里最大的模型,不知道现在释放出来了没有。

Dzak2U-VYAA1b3J

这个图片很有意思,BERT是你可以下载下来的模型,而GPT-2或GPT-3参数量太大了,或者是没有把训练好的参数释放出来,总之就是你无法得到的人。

参考


  1. Deep contextualized word representations ↩︎

  2. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding ↩︎

  3. Language Models are Unsupervised Multitask Learners ↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愤怒的可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值