1. 概述

随着深度学习在NLP领域的发展,产生很多深度网络模型用于求解各类的NLP问题,从word2vec词向量工具的提出后,预训练的词向量成了众多NLP深度模型中的重要组成部分。然而传统的word2vec生成的词向量都是上下文无关的,其生成的词向量式固定,不会随着上下文的改变而改变,这种固定的词向量无法解决一词多义的问题。比如“bank”这个词,既可以表示“河岸”,也可以表示“银行”。Embeddings from Language Models(ELMo)[1]是2018年提出的一种基于上下文的预训练模型,通过大量语料学习到每个词的一般性embedding形式,学习到与上下文无关的语义向量表示,以此实现对多义词的建模。

Generative Pre-Training(GPT)[2]也是在2018年提出的实现对多义词建模的语义模型,与ELMo相同的是,在GPT中,也是采用了两阶段的过程,第一阶段是利用无监督的方式对语言模型进行预训练,第二阶段通过监督的方式在具体语言任务上进行Fine-tuning。不同的是在GPT中采用的特征提取算法是transformer,且是单向的语言模型,而在ELMo中采用的双向的LSTM算法。

2. 算法原理

2.1. GPT的基本原理

与ELMo模型的训练一样,在GPT的训练过程中采用两阶段的过程,第一个阶段是GPT模型的预训练,得到与上下文无关的语义向量的表示,第二阶段在具体任务上Fine-tuning,以解决具体的下游任务。具体的两阶段过程可由下图表示:

2.2. 第一阶段——GPT模型预训练

2.2.1. 与ELMo模型的对比

GPT模型的预训练与ELMo模型的预训练的主要不同集中在两点:

  1. GPT中采用的是Transformer作为语义特征的提取,而ELMo中采用的是LSTM;
  2. GPT中采用的是单向的语言模型,即通过上文预测当前的词,而ELMo中采用的是双向的语言模型,即上下文预测当前的词。

GPT模型与ELMo模型的对比可以由下图表示:

完整的Transformer是一个典型的Seq2seq的结构,包括了Encoder和Decoder两个部分,如下图所示:

在GPT模型中使用的是Transformer结构中的Decoder结构,如上图中的右半部分,并对上述的Decoder部分进行了一些改动,原本的Decoder中包含了两个Multi-Head Attention结构,分别为Masked Multi-Head Attention和Multi-Head Attention,而在GPT中只保留了Mask Multi-Head Attention。

Q1:GPT采用的是单向的语言模型?
A1:在GPT中采用了Masked Multi-Head Attention,而Masked Multi-Head Attention只利用上文对当前位置的值预测,所以GPT被认为是单向的语言模型。

Q2:GPT中Position Encoding的操作?
A2:在Transformer中,由于Self-Attention无法捕获文本的位置信息,因此需要对输入的词的Embedding加入Position Encoding,在Transformer中采用了sin和cos的计算方法,而在GPT中,不再使用正弦和余弦的位置编码,而是采用与词向量相似的随机初始化,并在训练中进行更新。

2.2.2. GPT模型的预训练

对于GPT模型的预训练,同样采用的是语言模型,即通过上文预测当前的词。假设词的集合为U={u1,⋯,un}U=\left \{ u_1,\cdots ,u_n \right \}U={u1,,un},语言模型的目标函数为:

L1(U)=∑ilogP(ui∣ui−k,⋯,ui−1;Θ)L_1\left ( U \right )=\sum _ilog\; P\left ( u_i\mid u_{i-k},\cdots ,u_{i-1};\Theta \right )L1(U)=ilogP(uiuik,,ui1;Θ)

其中,kkk是窗口的大小。此时需要求此目标函数的最大值。在GPT模型的预训练中,采用的基本特征提取模块是Transformer中的Decoder结构,模型的输入向量h0h_0h0为:

h0=UWe+Wph_0=UW_e+W_ph0=UWe+Wp

其中,U=(u−k,⋯,u−1)U=\left ( u_{-k},\cdots ,u_{-1} \right )U=(uk,,u1)表示的当前词uuu的以kkk为窗口的上文,WeW_eWe表示的词向量,WpW_pWp表示的是位置向量,通过上文的词向量和位置向量的和得到当前词的输入向量。经过多个Transformer结构,得到第lll层的输出:

hl=transformer_block(hl−1)h_l=transformer\_block\left ( h_{l-1} \right )hl=transformer_block(hl1)

由于是decoder结构,我们希望得到当前词的位置是词uuu的概率,即为:

P(u)=softmax(hnWeT)P\left ( u \right )=softmax\left ( h_nW_e^T \right )P(u)=softmax(hnWeT)

以此,我们便可以得到预训练的GPT模型,同时WeW_eWe即为训练好的词向量。

2.3 第二阶段——Fine-tuning

2.3.1. Fine-tuning具体计算

在GPT模型的下游任务中,需要根据GPT的网络结构,对下游任务做适当的修改,具体如下图所示:

假设带有标签的数据集为CCC,其中,词的序列为x1,⋯,xmx^1,\cdots ,x^mx1,,xm,标签为yyy。实际上就是通过标签yyy的上文预测当前词是yyy,假设通过上述第一阶段,得到最后一个词的输出hlmh_l^mhlm,此时需要预测标签yyy,即为:

P(y∣x1,⋯,xm)=softmax(hlmWy)P\left ( y\mid x^1,\cdots ,x^m \right )=softmax\left ( h_l^mW_y \right )P(yx1,,xm)=softmax(hlmWy)

此时,目标函数为:

L2(C)=∑(x,y)logP(y∣x1,⋯,xm)L_2\left ( C \right )=\sum _{\left ( x,y \right )}log\; P\left ( y\mid x^1,\cdots ,x^m \right )L2(C)=(x,y)logP(yx1,,xm)

此时需要使得L2L_2L2取得极大值,为了能够对原先的网络结构fine-tuning,对具体任务可结合目标函数L1L_1L1L2L_2L2

L3(C)=L2(C)+λ∗L1(C)L_3\left ( C \right )=L_2\left ( C \right )+\lambda \ast L_1\left ( C \right )L3(C)=L2(C)+λL1(C)

2.3.2. 不同的下游任务构造

对于不同的下游任务,在Fine-tuning的过程中,需要不同的改造方法以适应GPT的模型结构,如上图所示:

  1. 对于分类任务,只需要在特征序列前后分别加上开始(Start)和结束(Extract)标记;
  2. 对于句子关系判断任务,如Entailment,除了开始和结束标记,在两个句子中间还需要加上分隔符(Delim);
  3. 对文本相似性判断任务,与句子关系判断任务相似,不同的是需要对两个句子的位置做变换;
  4. 对于多项选择任务,则需要根据Context与不同的Answer组合出不同的句子对,分别输入到模型中,句子对的形式与句子关系判断一致。

3. 总结

GPT模型中通过采用Transformer结构中的Decoder作为语义模型的提取模型,可以显著提升文本语义的学习能力,同时两阶段的学习方法对于可以方便的将GPT应用在不同的任务中。

参考文献

[1] Peters M , Neumann M , Iyyer M , et al. Deep Contextualized Word Representations[J]. 2018.

[2] Radford A, Narasimhan K, Salimans T, et al. Improving language understanding by generative pre-training[J]. 2018.

GPT:Generative Pre-Training相关推荐

  1. 深度学习论文阅读:Generative Pre-Training(GPT)

    文章目录 GPT Abstract 1 Introduction 6 Conclusion 2 Related Work 3 Framework 3.1 Unsupervised pre-traini ...

  2. 深入理解深度学习——GPT(Generative Pre-Trained Transformer):基础知识

    分类目录:<深入理解深度学习>总目录 相关文章: · GPT(Generative Pre-Trained Transformer):基础知识 · GPT(Generative Pre-T ...

  3. 深入理解深度学习——GPT(Generative Pre-Trained Transformer):GPT-3与Few-shot Learning

    分类目录:<深入理解深度学习>总目录 相关文章: · GPT(Generative Pre-Trained Transformer):基础知识 · GPT(Generative Pre-T ...

  4. 深入理解深度学习——GPT(Generative Pre-Trained Transformer):GPT-2与Zero-shot Learning

    分类目录:<深入理解深度学习>总目录 相关文章: · GPT(Generative Pre-Trained Transformer):基础知识 · GPT(Generative Pre-T ...

  5. 文献阅读课13-DSGAN: Generative Adversarial Training for (远程监督关系抽取,句子级去噪)

    文章目录 Abstract 1.Introduction 2.相关工作 3 Adversarial Learning for Distant Supervision 3.1 Pre-Training ...

  6. 【LLM系列之GPT】GPT(Generative Pre-trained Transformer)生成式预训练模型

    GPT模型简介 GPT(Generative Pre-trained Transformer)是由OpenAI公司开发的一系列自然语言处理模型,采用多层Transformer结构来预测下一个单词的概率 ...

  7. GPT:人工智能的重要突破,从“人工智障”到“人工智能”

    最近,由OpenAI公司推出的chatGPT引发了社会广泛的议论.人们惊叹于GPT所表现出来的智能以及超快的更新速度. 在印象中,AI的表现距离拥有智能还有很长的路要走.虽然在特定领域中,我们能看到A ...

  8. tensorflow sigmoid 如何计算训练数据的正确率_量化训练:Quantization Aware Training in Tensorflow(一)...

    本文的内容包括对神经网络模型量化的基本介绍.对Tensorflow量化训练的理解与上手实操. 此外,后续系列还对量化训练中的by pass和batch norm两种情况进行补充解释,欢迎点击浏览,量化 ...

  9. 2018:MIXED PRECISION TRAINING OF CONVOLUTIONAL NEURAL NETWORKS USING INTEGER OPERATIONS利用整数运算对卷积神经网络

    @[TOC](2018:MIXED PRECISION TRAINING OF CONVOLUTIONAL NEURAL NETWORKS USING INTEGER OPERATIONS(利用整数运 ...

最新文章

  1. 大数据时代涉军网络舆情引导的“5个结合”
  2. 帝国CMS后台前台上传大小和类型限制的解决方法!
  3. socket.io html5 聊天,socket.io实现在线聊天页面
  4. php curl获取404,php使用curl判断网页404(不存在)的方法
  5. Electron IPC(进程间通信)之ipcMain和ipcRenderer
  6. 注册cad中文件未找到html,acad(2014CAD出现未找到acad文件 求解)
  7. Ruby语言快速入门
  8. matlab求princomp,matlabprincomp用法
  9. jenkins构建报错: ssh: connect to host github.com port 22: Connection timed out
  10. 论计算机基础的重要性
  11. PPT里面的工具都是宝,用好不得了,这10个技巧你不得不知!
  12. 初识Calcite——使用实例
  13. [转帖]Office全版本零售版转换VOL
  14. BUGKU-成绩查询
  15. 内置函数 ,匿名函数
  16. 实用功能#用Python给你的微信升升级吧
  17. 【neutron】OpenStack Neutron -- 学习资料
  18. Java基础以及变量和运算符、包机制、javadoc生成
  19. 权益证明问题 —— Proof of Stake FAQ
  20. 2020年10月-北京-天眼查面试题(已offer)

热门文章

  1. AVPlayer 循环播放本地视频
  2. SPSS计算极值、平均值、中位数、方差、偏度、峰度、变异系数
  3. 女朋友科普|男女朋友吵架竟然是为了……脑控机器人
  4. neovim安装配置
  5. 模拟Scratch的可视化脚本编辑器(一)
  6. 学无止境·MySQL③
  7. 【报告分享】7.5-7.11两大消费赛道——抖音、快手直播带货周报-果集数据(附下载)
  8. 腾讯云服务器小白保姆级教程
  9. pip安装的模块cmd及VsCode中可以使用,PyCharm中不能使用
  10. 网易Java岗社招面试经历分享