参考论文:Improving Language Understanding by Generative Pre-Training
这篇论文是基于文本分类的这篇论文上进行改进,这篇论文所提出的方法称之为GPT
前言
在之前的博客中讲过预训练的好处,并且预训练可以以多种方式参与到后续的下游任务中,这里就不再赘述。在这篇论文中,探索出了一种对自然语言理解任务的半监督方法,融合了无监督的预训练(pre-training)和有监督的微调(fine-tuning)过程。本文提出了一种通用表示,能够在范围广泛的任务中稍加修改、适应就能快速进行transfer.整个过程分成两个阶段。
阶段一:在无标签的海量数据中训练语言模型,学习神经网络模型的参数。
阶段二:应用阶段一训练完成模型参数用相关标签数据训练target task。
文本分类这篇论文采用了3层的单向LSTM,无attention,带有少量dropout 参数,而本文的模型结构采用了Transformer,在多个任务中,比如机器翻译, 文档生成和句法分析都表现更好。选择这个模型相对与rnn网络能更好地解决长依赖的问题,在跨多样任务迁移模型时能够高效适用。在迁移过程中,这篇论文基于traversal-style将结构化文本处理为单一连续词条序列,这样的处理使得fine-tune对pre-trained model做小改动就可以兼容多种不同任务。
并且经实验验证,本文所采用的方法在12种nlp任务中有9种任务的效果都有显著提高。
框架
Unsupervised pre-training
给定无标签语料,我们采用标准语言模型去极大化下式:
k是基于语境窗口的大小,条件概率P表示在参数下采用神经网络建模的可能性。训练参数可以通过梯度下降获得。
在本文的实验中,我们采用了多层的Transformer decoder来建立语言模型,模型采用多头自注意力
是上下文窗口的token 序列,n是层的个数,We是词项量矩阵,Wp是位置嵌入矩阵。
Supervised fine-tuning
基于公式1训练的模型,本文将训练获得的参数应用于有监督的目标任务。假定有带标签的数据集C,包含的每个实例是词序列,如,带有标签y,首先作为输入通过已经预训练好的pre-trained model获得最终transformer block's activation ,然后输入带有Wy的线性输出层来预测y
在处理输入序列时,可以针对不同任务进行拼接来进行fine-tuning, 如下图:
从上图可以看出,对于不同的任务有不同的处理方式。
实验
有效因子分析
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1kwv48wjolc3j