赞
踩
作者 | 周俊贤
整理 | NewBeeNLP
之前我们梳理了NLP预训练家族系列文章,今天继续来看看另外一个分支,GPT系列!
GPT2论文全称及链接:《Language Models are Unsupervised Multitask Learners》[1]
GPT3论文全称及链接:《Language Models are Few-Shot Learners》[2]
通过GPT2和GPT3的标题,初步判断Open AI发布的一系列GPT模型,想干的一件事就是坚持用autoregressive的方式训练一个「大一统」的语言模型。这个语言模型有通用、强大的表征能力,能在应用到具体下游任务时,即使没有或只有少量任务相关的labeled数据时,语言模型也能取得不俗的表现。(把语言模型类比成人,给这个人不断喂百科全书、文学经典、网络上的内容等等,打造成一个博览群书的人,那这个人起码有应付语义相关任务的能力,例如让他做一个情感分析的任务,就算在没有任务参考的情况下,他也不会表现得太差)。
下面从三个问题,来总结一下自己看完这两篇论文的收获。
A:GPT考虑的策略有很多。如
之前看BERT、RoBERTa、ALBERT等的论文时,最多的数据量也就100多G,而且大部分是维基百科,小说、新闻这些语料,但GPT认为还不够通用,更通用的应该是「网上爬取的所有数据」。
大家想想网上的数据有哪些,新闻、小说、评论,甚至产品说明书、通告、法律法典、政府政策等等等等,这些内容应该是包含训练BERT等的语料的。此外,全世界的网络上可以爬的东西都有可能纳进GPT的训练语料中,即爬取的语料是多语言的,从这些角度讲,用网络上爬取的东西作为训练语言模型的语料,确实是更大一统的感觉。
但是,存在一个问题,这样爬取的数据可能有很多脏乱、重复的数据,相对BERT等的训练语料来讲,质量稍差。因此,GPT论文也有怎么对爬取的数据进行过滤、处理的操作。具体的可以看论文。
GPT3 1750亿个参数,这也是没办法的,既然想让语言模型能有更强的语言表征能力,模型参数肯定要够大,总不能奢望一个只有1K个参数的模型能有多强的语义表征能力吧。
不过GPT3步子也迈得太大了,直接把之前常用语言模型的参数数量级别提高了10x倍,以至于普通人、普通公司根本无法复现。好吧,甚至连Open AI都说,他们自己也无法复现。
如字典采用unicode的BPE编码,因为GPT想大一统,那肯定不会只考虑能解决英文问题,这样就与大一统理念相违背了,而且,训练语料是网络爬取的内容,会包含西班牙语、德文、中文等等,因此GPT2、GPT3采用的都是unicode 的BPE编码,还能有效解决oov问题,缺点是由于vocabulary太大了,会影响训练效果。
GPT2、GPT3论文观点是只要训练语料足够大、足够丰富,模型参数足够多,模型能学习到如最常见的词法、语义、指代消解、角色标注,甚至一些具体的任务,如情感分析、阅读理解、对话、翻译等具体任务。是的,没看错,意思是,即使不做下游任务的fine funing,语言模型在预训练的时候就能学到这些能力。虽然有一些是通过「隐式」学习到的。
如下图,展示的是GPT2的部分训练语料,通过学习这些语料,其实模型就能「隐式」学习到英语和法语对应的关系、也能掌握这两种语言之间的翻译能力。
为什么说这种学习是隐式的呢?
因为没有具体给出从一个英语句子到一个法语句子这种样本让模型进行监督学习(如常见有监督方式训练一个翻译模型,通常输入一个英语-法语句子对,通过seq2seq的方式进行训练),而这里有种「无心插柳柳成荫」的感觉,通过训练语言模型的方式,通过喂入下图这样的语料,模型不知不觉中有了英语和法语之间互译的能力。
只要语料足够丰富,模型就能可能学习到英语-中文、西班牙语-德文、韩语-日文等等等等的互译技能。
首先解释下什么是Zero-shot、One-shot、Few-shot,其实就是小样本学习
Zero-shot就是现在你要做一个具体任务,如英语转成法语,但是你没有labeled数据来训练模型;
One-shot就是你只有一条英语到法语的labeled数据;
Few-shot就是有10-1K条的labeled数据。
GPT怎么在这些情况下应用到具体任务?不同情况下差异如何?
首先说说Zero-shot的情况,顺便可以思考一个问题:怎么能让GPT模型直接做下游任务?如分类、回归等等?
GPT2、GPT3应用到具体任务需要一些巧妙的设计,举一些例子
应用到英语翻译法语任务,首先给一句话描述任务是英翻法,然后给待翻译的英语,最后通过语言模型的方法生成对应的法文,如下图
应用到情感分析任务,如某个样本"这个电影太冗长了",在这个样本后接上"真__",这里__用语言模型的方式进行预测,假如预测"好"比预测"差"的概率高,则这个样本就是正向的,反则就是反向的。是不是有点像PET范式的感觉。
这里只是举了两个例子,来阐明「通过巧妙的设计,用语言模型训练的方式可以直接用来解决诸如文本分类、句子相似度、文本生成等任务」,这样的好处是,即使没有labeled数据,也能把训练好有语义表征能力的语言模型直接应用到具体任务,即Zero-shot场景。
One-shot场景相对于Zero-shot场景多了一条labeled数据,按理来说,多了一条labeled数据,模型的效果应该会更好,但具体应该怎么应用这条labeled数据呢?
下图就是一个例子,把这条labeled数据也加入到输入中,此时模型不仅知道具体的任务描述,还能有一条参考案例,这样模型输出会更准
这里再把语言模型类比成一个博览群书的人,虽然这个人很厉害,但你给他一些具体任务让他解决时,他还是会蒙蔽。例如我现在叫这个人做一个情感分析的任务,输入"请给下面影评做情感分析,判断正面还是负面:这个电影有点冗长,但是画面还是不错的,属于__"。这个人是蒙的,即使他博览群书,但他不知道评价标准,这句话即有正面的因素,也有负面的因素,究竟是分到正面还是负面好?但这时候,你给任务的时候,顺便给多一个参考案例,输入变成“请给下面影评做情感分析,判断正面还是负面:这个电影剧情很差,幸好选的演员把电影撑起来了,属于正面。这个电影有点冗长,但是画面还是不错的,属于__” ,这时候,这个博览群书的人就知道该把这个样本分到正面了。
Few-shot,就是给多几个案例,如下图
值得注意的是,论文里把这种称为"in-context learning",就是跟出一些参考案例的情况下,模型能根据当前任务描述、参考案例明白到当前的语境,即使在下游任务和预训练的数据分布不一致情况下,模型也能表现很好。
具体的,看论文里的这幅图,这里红色箭头是我标的,参数最多1750亿个参数的GPT3版本,在给出一个labeled样本的时候,相对于Zero-shot场景,模型的效果有一个很大的跃增,作者认为这能体先GPT3模型的 in-context learning 能力,这个一个非常棒的能力!
当然,也可以对预训练完的GPT3做传统的有监督fine tuning,但论文里提到留给以后研究,毕竟论文的主旨还是在于研究语言模型对小样本学习的效果。
GPT一系列论文致力于大一统的语言模型解决大部分问题,也许随着硬件、算力、比transformer更强的模型架构等等的发展,在不久的将来,一个巨无霸的语言模型确实能直接应用到下游任务,这时候,大家做具体业务的时候,只需要调用就行了,不需要提供大批量的labeled任务数据,也不需要研究怎么进行fine tuning(但到那个时候,是不是就有大批算法工程师失业了hh)。
但目前个人认为未来2~3年,还是预训练模型+fine tuning的范式在真实业务场景中表现更好吧!
想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定要备注信息才能通过)
[1]
《Language Models are Unsupervised Multitask Learners》: https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
[2]《Language Models are Few-Shot Learners》: https://arxiv.org/abs/2005.14165
- END -
NLP预训练家族 | Transformer-XL及其进化XLNet
我从吴恩达AI For Everyone中学到的十个重要AI观
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。