从word2vec开始,说下GPT庞大的

机器之心分析师网络

作者:王子嘉

编辑:H4O

本文从从老祖级别的word2vec开始,从头到尾梳理了GPT的「家谱」和word2vec领衔的庞大的NLP「家族集团」。

GPT不是凭空而出,它是经过了很多人的努力,以及很长一段时间的演化得来的。因此,梳理一下GPT的庞大“家族”还是很有必要的,看看他继承了什么,学习了什么,又改进了什么,这样也能更好地理解GPT各个部分的原理。

现在很多人把年(BERT提出)作为NLP元年(类似于当时ImageNet的提出),其趋势与当年的图像领域也极其类似——模型越来越大。年的BERT-large(最大的BERT模型)的参数量是M,而到了年的GPT-3,这个数字已经翻了无数倍了。很多人第一次了解到GPT大概是年,那个时候GPT还是个配角(被其兄弟BERT拉出来示众),当时的主角是BERT,BERT的成功让当时论文中作为前身的ELMo和GPT也火了一把。其实当时的GPT也没有BERT第一版论文中说的那么差,现在的BERT论文也已经没有了当时的对比图片,而最近的GPT-3总结了当时的失败经验,也开始重视媒体宣传,让GPT成功以C位出道,结结实实当了次主角。

一提到GPT3,大家第一印象大概就是异常庞大的参数量——亿,比其前身多倍,比之前最大的同类NLP模型要多10倍。事实上,如今的GPT-3是在很长一段时间的演变后得到的(汇聚了老祖宗们的优秀智慧),从word2vec开始,各式各样的语言模型就开始变得让人眼花缭乱,也有很多给GPT的诞生提供了很大的启发,我们今天就从老祖级别的word2vec开始,从头到尾梳理一下GPT的“家谱”和word2vec领衔的庞大的NLP“家族集团”。

值得注意的是,这里列出的家族成员都是跟GPT关系比较近的,所以本文列举的内容并不能完全囊括所有语言模型的发展,本文的主要目的是为了梳理GPT的原理脉络,并与一些类似的模型做必要的对比以加深理解。

家谱总览

为了更好地给GPT建立一个“家谱”,也让你们知道这篇文章会涉及什么内容,首先要宏观的比较一下这个庞大的家族各个成员的出生时间(图1)。

图1:家族成员出生日期。

有了这个出生时间表,再对他们有一定的了解(本文的主要目的),它们的关系其实就很好确定了,所以这个庞大家族的族谱大概可以画成图2的这个样子。

图2:GPT族谱。

读到这里对这些模型不够了解或者有完全没有听过的也没有关系,细心的同学可能会发现Attention的出生日期并没有列在图1中,因为Attention算是GPT的一个远方表亲,因为Attention业务的特殊性(主要是外包工作,后面会详细说),GPT对其没有完全的继承关系,但是GPT和他的兄弟姐妹们都有attention的影子。

对GPT族谱有了宏观的了解后,就可以开始正式进入正题了。

WordEmbedding[1,2]

WordEmbedding(词嵌入)作为这个庞大家族集团的创始人,为整个“集团”的蓬勃发展奠定了坚实的基础。到目前为止,词嵌入一直是NLP集团的中坚力量。Word2Vec和Glove等方法就是很好的例子,为了避免对“集团”的根基不明白,这里先对词嵌入进行简要介绍。

对于要被机器学习模型处理的单词,它们需要以某种形式的数字表示,从而在模型中使用这些数字(向量)。Word2Vec的思想就是我们可以用一个向量(数字)来表征单词的语义和词间的联系(相似或相反,比如“斯德哥尔摩”和“瑞典”这两个词之间的关系就像“开罗”和“埃及”之间的关系一样),以及语法联系(如英文中的‘had’和‘has’的关系跟‘was’和‘is’的关系一样)。

这位创始人很快意识到,他可以用大量文本数据对模型进行预训练从而得到嵌入,这样的效果比在特定的任务(数据量较少)上训练更好。所以word2vec和Glove这种可供下载的预训练词向量表(每个词都有自己对应的词向量)就出现了,图3展示了GloVe中‘stick’这个词的对应的词嵌入(部分)。

图3:“stick”的词向量(图源:[15])

ELMo[3]——语境很重要!

在爷爷创建了这个家族企业之后,后续也有很多很多后代在对其进行发展,GPT的近亲中也有这么一位——ELMo(年2月)。这位GPT-3的叔叔在年跟GPT-1一起被BERT拉出来示众(作比较),所以大家应该也比较耳熟。ELMo创业的时候,Transformer还未经打磨,Transformer的儿子Transformer-decoder(年1月)同样还没有火起来,所以他还没有用Transformer(也因此被BERT在最开始的论文里拉出来作对比),但是他注意到了词向量不能是不变的,比如一开始学习词嵌入的时候是用下面这两句话:

“哦!你买了我最爱的披萨,我爱死你了!”“啊,我可真爱死你了!你把我最爱的披萨给蹭到地上了?”

这里的“爱”明显意思是不同的,但是因为训练的时候没有看到“爱”后面的话,所以“爱”就在词嵌入的空间里被定义为褒义词了。首先我们要知道的是ELMo(EmbeddingfromLanguageModel)中也是使用了“语言模型”任务来完成语境的学习,这也是我在这篇文章里提到ELMo的一个重要原因(另一个就是其为了解决上面提出的问题的方法),为了防止有人对语言模型不熟悉,这里给出一个语言模型的定义——语言模型其实就是给定一个模型一串词,然后让模型预测下一个词。

了解了语言模型的概念,上面问题出现的原因就不难理解了——模型看到的是前文,看不到后文。为了解决这个问题,ELMo就用双向LSTM来获取双向语境。同时,上面涉及的问题不只是双向语境问题,还有一个很严重的问题——词嵌入不应该是不变的。也就是说,不同的句子里同一个词可能有不同的意思,那么词嵌入肯定也该不一样。

因此ELMo又提出要在看完整个句子的前提下再给定这个词的嵌入。也就是说词嵌入的来源不再是过去的查表了,而是通过预训练好的模型来获得(是不是很像图像领域的transferlearning?)。看一下原论文中对ELMo的定义:

Ourwordvectorsarelearnedfunctionsoftheinternalstatesofadeepbidirectionallanguagemodel(biLM),whichispretrainedonalargetextcorpus.

最终,这些思想都给他的侄子们(GPT,BERT等)带来了很大的启发。如果对ELMo的计算细节感兴趣,本文最后也贴了reference,可以去看一下原论文,还是有很多很聪明的想法的,不过它不是我们今天的主角,因此这里就不多做赘述了。

Attention

在说完ELMo之后,本来就应该开始介绍现在家族集团的中流砥柱BERT和GPT了,但是在这之前还是要简要回顾一下attention和selfattention,我猜很多加入NLP不久的人应该跟我一样,一上来从各大科普文中接收到的概念就是self-attention和self-attention的计算过程,对于self-attention名字的由来还是很迷糊,甚至很多科普文的作者对这个概念都是迷迷糊糊的,导致我在求证自己的理解的时候都发现很多不同的版本,不过我们还是要忠于原论文,因此这个问题还是从最开始论文对Attention的定义开始说起,很多attention的科普文的第一部分都会对attention的原理进行很形象的描述,顾名思义就是我们希望我们的模型在给我们结果的时候不要傻乎乎的给它什么他就都看,而是只看重要的那一点,机器之心对于注意力还有很多很有趣的解释,这里就不浪费篇幅做重复的工作了,直接上正式的定义:

Anattentionfunctioncanbedescribedasmappingaqueryandasetofkey-valuepairstoanoutput,wherethequery,keys,values,andoutputareallvectors.Theoutputis

转载请注明:http://www.abuoumao.com/hyls/2166.html

网站简介| 发布优势| 服务条款| 隐私保护| 广告合作| 网站地图| 版权申明

当前时间: 冀ICP备19029570号-7