GPT:Improving Language Understanding by Generative Pre-Training(2018-6-12)
模型介绍
自然语言理解包括各种各样的任务,例如文本蕴含,问题回答,语义相似性评估和文档分类。 尽管大型的未标记文本语料库很丰富,但是学习这些特定任务的标记数据却很少,这使得经过严格训练的模型难以充分发挥作用。
通过在各种未标记文本的语料库上对语言模型进行生成式预训练(GPT,genertive pre-training),然后对每个特定任务进行判别性微调(DFT,discriminative fine-tuning),这些任务实现了巨大收益。与以前的方法相比,我们在微调过程中利用了任务感知的输入转换来实现有效的迁移,同时只要求模型架构的更改最小。
模型改进
训练过程包括两个阶段。第一阶段是学习大量文本语料库上的高容量语言模型;第二阶段是微调,使模型适应带有标签数据的判别性任务。
无监督预训练
给定无监督的分词语料 U={u1,...,un}U=\{u_1,...,u_n\}U={u1,...,un},使用标准的语言建模目标,最大化似然估计:
L1(U)=∑ilogP(ui∣ui−k,...,ui−1;Θ)L_1(U)=\displaystyle\sum_i\log P(u_i|u_{i-k},...,u_{i-1};\Theta)L1(U)=i∑logP(ui∣ui−k,...,ui−1;Θ)
其中 k 是上下文窗口的大小,以及条件概率 P,这些参数使用随机梯度下降训练。
实验使用多层Transformer解码器作为语言模型,这是Transformer的一种变体如Transformer)。模型对输入上下文分词应用多头自注意操作,继之以位置相关前馈层,在目标分词上产生输出分布:
h0=UWe+Wph_0=UW_e+W_ph0=UWe+Wp
hl=transformer_block(hl−1),∀i∈[1,n]h_l=transformer\_block(h_{l-1}),\forall i \in[1,n]hl=transformer_block(hl−1),∀i∈[1,n]
P(u)=softmax(hnWeT)P(u)=softmax(h_nW^T_e)P(u)=softmax(hnWeT)
其中UUU为上下文分词向量,nnn 为层数,WeW_eWe 是分词,WpW_pWp 为位置嵌入矩阵。
有监督微调
在经过预训练后,将使模型参数适应有监督的目标任务。假设一个标记数据集 CCC,其中每个实例由一系列输入分词组成的序列 x1,...,xmx^1,...,x^mx1,...,xm,以及标签 yyy。输入经过预训练模型,获得最终的Transformer-Block的激活 hlmh_l^mhlm,最后送入带参数 WyW_yWy 的线性输出层去预测 yyy:
P(y∣x1,...,xm)=softmax(hlmWy)P(y|x^1,...,x^m)=softmax(h^m_lW_y)P(y∣x1,...,xm)=softmax(hlmWy)
然后最大化目标函数:
L2(C)=∑(x,y)logP(y∣x1,...,xm)L_2(C)=\displaystyle\sum_{(x,y)} \log P(y|x^1,...,x^m)L2(C)=(x,y)∑logP(y∣x1,...,xm)
通过实现还发现,将语言建模作为微调的辅助目标,有助于通过学习改进监督模型的泛化,加速收敛。使用这种辅助目标可以改善性能。具体而言,优化了以下目标:
L3(C)=L2(C)+λ∗L1(C)L_3(C)=L_2(C)+\lambda * L_1(C)L3(C)=L2(C)+λ∗L1(C)
总之,在微调期间唯一需要的额外参数是 WyW_{y}Wy ,以及定界符标记的嵌入。
具体任务的输入
对于某些任务,例如文本分类,可以直接微调模型。其他任务,例如问题解答或文本蕴含,具有结构化的输入,例如有序句子对、<文档,问题,答案>
三元组。由于我们的预训练模型是在连续的文本序列上训练的,因此我们需要进行一些修改才能将其应用于这些任务。这种方法重新引入了大量的特定于任务的定制化,并且不将迁移学习用于这些额外的架构组件。
替代方案,可以使用遍历样式的方法,其中将结构化输入转换为我们的预训练模型可以处理的有序序列。这些输入转换使我们能够避免跨越任务对架构进行大量更改。在下面提供了这些输入转换的简短描述,上图提供了直观的图示。所有转换都包括添加随机初始化的起始符号和结束符号(<s>,<e>)。
文本蕴含
对于蕴含任务,我们连接前提p和假设h为符号序列,在在两者之间插入定界符($)。
相似度
对于相似度任务,没有两个被比较句子的固有顺序。为了反映这一点,我们修改了输入序列以包含两个可能的句子顺序(之间有一个定界符),并分别进行独立处理以产生两个序列表示 ,它们在被馈送到线性输出层之前逐个元素地添加。
问题解答和常识推理
对于这些任务,我们获得了上下文文档 zzz,问题 qqq 和一组可能的答案 ak{a_k}ak。我们将文档上下文和问题与每个可能的答案连接起来,在两者之间添加定界符标记 [z;q;[z; q;[z;q;$;ak];a_k];ak]。这些序列中的每一个都由我们的模型独立处理,然后通过softmax层进行归一化以在可能的答案上产生输出分布。
模型参考
论文地址:https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf
代码地址1:https://github.com/openai/finetune-transformer-lm
代码地址2:https://openai.com/blog/language-unsupervised
GPT:Improving Language Understanding by Generative Pre-Training(2018-6-12)相关推荐
- 阅读文献:“Improving Language Understanding by Generative Pre-Training”(GPT模型)
阅读文献:"Improving Language Understanding by Generative Pre-Training" Introduction 从原始文本中有效学习 ...
- 文献阅读:Improving Language Understanding by Generative Pre-Training
文献阅读:Improving Language Understanding by Generative Pre-Training 1. 文章简介 2. 模型介绍 3. 实验考察 1. 训练数据 2. ...
- 【GPT】Improving Language Understanding by Generative Pre-Training
Paper Link: Improving Language Understanding by Generative Pre-Training GPT系列文章解读: [GPT2]Language Mo ...
- Paper:GPT之《Improving Language Understanding by Generative Pre-Training》翻译与解读
Paper:GPT之<Improving Language Understanding by Generative Pre-Training>翻译与解读 目录 GPT之<Improv ...
- 论文阅读《Improving Language Understanding by Generative Pre-Training》
论文地址:<Improving Language Understanding by Generative Pre-Training> 文章目录 论文介绍 相关工作 框架 预训练阶段 微调阶 ...
- Improving Language Understanding by Generative Pre-Training
Abstract 由于标注数据的缺乏,直接训练判别式模型效果不是很理想. 本文展示了先在大规模未标注语料上预训练生成式语言模型然后在每个判别式任务上进行fine-tuning可以获得较大的效果提升. ...
- Python Qt GUI设计:QPushButton、QRadioButton和QCheckBox按钮类(基础篇—12)
目录 1.QPushButton按钮类 2.QRadioButton按钮类 3.QCheckBox按钮类 在GUI设计中,按钮都是最重要的和常用的触发动作请求的方式,用来与用户进行交互操作.在PyQt ...
- 《Improving Langugage Understanding by Generative Pre-Tranining》 —— GPT
目录 <Improving Langugage Understanding by Generative Pre-Tranining> 1.GPT历史意义 2.无监督预训练--通过大量未标记 ...
- TED:Grit: The power of passion and perseverance(Angela Lee Duckworth)
视频: TED 中英双语字幕: Angela Lee Duckworth 成功的要诀是什么?是意志力 Grit: The power of passion and perseverance When ...
最新文章
- Android Jetpack组件App Startup简析
- 产品治理体系:产品顶层框架
- JdbcTemplate+PageImpl实现多表分页查询
- 云服务器Linux安装,配置,使用nginx
- python是什么?python该怎么学?一招告诉你!!
- 微信小程序css之线性渐变
- 自定义广播增加权限控制
- 广义多目标算法探索实践
- HTTP请求中,几种常见的Content-Type类型
- qt.qpa.screen: QXcbConnection: Could not connect to display(vnpy,云主机,图形界面)
- html5文字收起,科技常识:HTML5给汉字加拼音收起展开组件的实现代码
- 当红“元宇宙”需要冷思考,听听科幻作家、清华教授和阿里专家怎么说
- 如何用计算机算标准偏差,标准差计算器怎样安装使用?标准差计算器使用教程介绍...
- matlab课表编排程序实例,编排课程表的一点心得
- 【NDN转发】Community Aware Content Retrieval in Disruption Tolerant Networks 全文翻译
- 安装Ubuntu的几十次坑的经验
- 无限地图生成的制作,一直跑酷一直爽!
- AM437x——RTC驱动
- 什么是JIT,JDK17移除了JIT?
- springboot配置进行https请求访问demo
热门文章
- 华为matepad 鸿蒙,鸿蒙阵营再添一员猛将!华为全新平板曝光
- 【协议分析】Gzip格式与解析
- Certificate for <xxx.xxx.xxx.com> doesn‘t match any of the subject alternative names: [xxx..com]
- 预测学习:深度生成式模型、DcGAN、应用案例、相关paper
- AD采集中常用的Ksps什么意思
- windows安装软件出现“command line option syntax error”错误
- C++语言程序设计(第5版 郑莉、董渊)学习笔记(自用~)
- csp怎么给线条描边,插画师要失业了?还在纠结阴影怎么画?CSP软件能直接自动生成...
- PS-怎么用ps查看精灵图(雪碧图)的位置?
- ubuntu20.04开机后出现 /dev/sdb3 xxx files xxxx/xxxxx blocked,无法进入桌面问题