从零开始学Python自然语言处理(30)—— 宣传没做好的GPT

浏览: 2931

有一件特别有意思的事情,和大家分享一下。

上周,有个面试,我陪同技术负责人一起去了,来面试的是一个985的硕士毕业生,做了2年开发,之后2年做的NLP算法,现在来面试我们公司的NLP算法岗位。看了一下他的简历,做过挺多项目,其中也有两个NLP相关项目。

面试时候问到了很多NLP的任务如何解决,例如文本分类、实体识别,面试者都说用BERT,我们问到GPT,问了几个简单的问题,他竟然一脸茫然,全然不知。

之前面试的一些985和211应届毕业生,对这些算法原理掌握的还是很不错的,这位面试者可能长期忙于项目,感觉他论文读的比较少。

当时的问题如下:

GPT效果没之后提出的BERT效果好,可以说说原因么?

GPT中的半监督是怎样体现的?

GPT和Transformer有什么异同点?

其实这些问题并不难,只要你读过GPT的论文。

我们趁此机会详细讲讲GPT吧。

GPT是Generative Pre-Training的缩写,出自于2018年OpenAi发布的论文《Improving Language Understandingby Generative Pre-Training》之中,论文链接是:https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf

GPT采用了Pre-training(预训练)和Fine-tuning(微调)的训练方法,目标是学习一种通用的表示形式,该表示形式几乎不需要怎么调整就可以适用于各种NLP下游任务。首先,对未标记的数据建立语言模型,学习神经网络模型的初始参数。

随后,使用相应的有监督的方式将这些参数调整为NLP下游任务所需要。在四种类型的语言理解任务上评估该方法,分别是:自然语言推理,问题回答,语义相似性和文本分类任务。在12个子任务中有9个达到了当时的最先进水平(state of the art)。

整个训练过程包括两个阶段,第一阶段是在大型语料库上使用无监督的方式训练。随后是微调阶段,使用的是当前任务的有监督数据。无监督预训练

首先是有大量的语料,其中的token(词语)可以以如下方式表示:我们使用标准的语言模型的求解目标,来最大化下面式子:

其中k是内容窗口大小,也就是在预测第i个词的时候,可以看到的是i之前的k个词,同时,Θ在预测中也被考虑进去了,Θ是神经网络的参数。参数使用SGD的方法训练。论文使用的是多层的Transformer的decoder作为语言模型结构,结构如下,基本和Transformer的decoder一致,层数不太一样:

具体过程可以由下式表示:

其中U是不同词语的词向量组成的,n是层数,上面论文中的图显示的是12层,输入的数据经过乘以词嵌入参数We,再加上位置参数Wp。再经过i个层,最后经过softmax层输出。有监督微调

当我们拿到了无监督预训练好的模型后,我们在其基础上进行有监督微调,前面的部分公式和上面一样,以下这部分不同:

需要最大化的是:

作者发现,将语言模型也纳入微调时有帮助,可以提高监督模型的通用性,还能加速收敛,如下:

所以优化的目标从L2变成了L3。微调时只需要训练Wy这个参数集合。

对于不同的任务进行微调,将所有结构化输入转换为token序列,由预训练模型进行处理,然后再进行线性+softmax层。下图是不同NLP任务的处理过程:我们仔细看看上面这幅图,对于不同任务,处理的方式不同,例如文本分类任务,我们直接在预训练模型基础上微调输入线性输出层即可;对于文本蕴涵任务,将前提 p 和假设 h 序列连在一起,中间有一个分隔符($);对于相似性任务,被比较的两个句子没有固有的排序,为了反映这一点,修改输入序列,使其包含两种可能的句子排序(在两者之间有一个定界符),并对每一个序列进行独立处理,以产生两个序列表示,在输入线性输出层之前,按元素添加;对于问题回答和常识推理任务,有一个上下文文档 z 、一个问题 q和一组可能的答案{ak} 。我们将文档上下文和问题与每一个可能的答案组合,组合时中间加一个分隔符,得到 [z; q; $; ak],如上图,这些序列中的每一个都是用模型独立处理的,然后通过一个softmax层,在可能的答案上产生一个输出分布。GPT在当时的多项NLP任务中都达到了当时最好的效果。

下面分别是自然语言推理任务和问题回答和常识推理任务:

下图是语义相似性和文本分类任务:

关于GPT为什么没有BERT效果好的问题,我们在之前的文章中已经写过:面了一个工作3年程序员,这些常见面试题竟一个都答不出来!相信讲完GPT的内容后,大家对本文开始的那些问题都可以回答啦~

扫码下图关注我们不会让你失望!

image.png

推荐 2
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

1 个评论

不明觉厉

要回复文章请先登录注册