1.引言

前面我们介绍了ELMo算法的思想,通过在大量的语料上预训练语言模型,然后再将预训练好的模型迁移到具体的下游NLP任务,从而提高模型的能力。但是ELMo预训练的语言模型结构和下游的NLP任务的模型经常会不一致,因此,做迁移学习时经常没法将两者的模型直接进行融合,因此,本文将介绍OpenAI在2018年提出来的一个方法——GPT,该模型在预训练语言模型的基础上,只需要做一些微改即可直接迁移到各种NLP任务中,因此,其迁移能力更强。

2.GPT原理介绍

GPT模型主要包含两个阶段,第一个阶段,先利用大量未标注的语料预训练一个语言模型,接着,在第二个阶段对预训练好的语言模型进行微改,将其迁移到各种有监督的NLP任务,并对参数进行fine-tuning。

2.1 预训练模型(无监督)

给定一个没有标注的大语料,记每一个序列为GPT 总体架构 gpt模型_GPT 总体架构,GPT通过最大化以下似然函数来训练语言模型:
GPT 总体架构 gpt模型_窗口大小_02
其中,GPT 总体架构 gpt模型_全连接_03表示上下文窗口的大小,这里计算每个单词的预测概率时,只考虑左侧窗口大小的词汇信息,在GPT中,作者采用的是一个12层的Transformer decoder作为语言模型的结构,其计算过程如下:
GPT 总体架构 gpt模型_GPT 总体架构_04
其中,GPT 总体架构 gpt模型_窗口大小_05表示左侧窗口的词汇向量,GPT 总体架构 gpt模型_窗口大小_06表示Transformer的层数,GPT 总体架构 gpt模型_GPT 总体架构_07表示词向量矩阵,GPT 总体架构 gpt模型_全连接_08表示position embedding矩阵,在GPT中,作者对position embedding矩阵进行随机初始化,并让模型自己学习,而不是采用正弦余弦函数进行计算。

从GPT的计算公式来看,其实跟Transformer基本是一样的,只是对每个时间步,都只考虑左侧窗口大小的上下文信息。

2.2 fine-tuning(有监督)

当语言模型训练结束后,就可以将其迁移到具体的NLP任务中,假设将其迁移到一个文本分类任务中,记此时的数据集为GPT 总体架构 gpt模型_GPT 总体架构_09,对于每一个样本,其输入为GPT 总体架构 gpt模型_语言模型_10,输出为GPT 总体架构 gpt模型_GPT 总体架构_11。对于每一个输入,经过预训练后的语言模型后,可以直接选取最后一层Transformer最后一个时间步的输出向量GPT 总体架构 gpt模型_语言模型_12,然后在其后面接一层全连接层,即可得到最后的预测标签概率:
GPT 总体架构 gpt模型_GPT 总体架构_13
其中,GPT 总体架构 gpt模型_全连接_14为新引入的全连接层的参数矩阵。因此,可以得到在分类任务中的目标函数:
GPT 总体架构 gpt模型_GPT 总体架构_15
在具体的NLP任务中,作者在fine-tuning时也把语言模型的目标引入到目标函数中,作为辅助函数,作者发现这样操作可以提高模型的通用能力,并且加速模型收敛,其形式如下:
GPT 总体架构 gpt模型_语言模型_16 其中,GPT 总体架构 gpt模型_GPT 总体架构_17一般取0.5。

可以发现,在fine-tuning阶段,此时新增的参数只有最后一层全连接层的参数GPT 总体架构 gpt模型_全连接_14,这比ELMo算法要容易得多。

不过,上面这个例子只是对于文本分类任务,如果是对于其他任务,比如文本蕴涵、问答、文本相似度等,那么GPT该如何进行微改呢?针对这几种情况,作者提出了以下的修改方法:

  • 文本蕴涵:对于文本蕴涵任务,作者用一个“$”符号将文本和假设进行拼接,并在拼接后的文本前后加入开始符“start”和结束符“end”,然后将拼接后的文本直接传入预训练的语言模型,在模型再接一层线性变换和softmax即可。
  • 文本相似度:对于文本相似度任务,由于相似度不需要考虑两个句子的顺序关系,因此,为了反映这一点,作者将两个句子分别与另一个句子进行拼接,中间用“$”进行隔开,并且前后还是加上起始和结束符,然后分别将拼接后的两个长句子传入Transformer,最后分别得到两个句子的向量表示GPT 总体架构 gpt模型_窗口大小_19,将这两个向量进行元素相加,然后再接如线性层和softmax层。
  • 问答和常识推理:对于问答和常识推理任务,首先将背景信息与问题进行拼接,然后再将拼接后的文本依次与每个答案进行拼接,最后依次传入Transformer模型,最后接一层线性层得多每个输入的预测值。

具体的方法可以查看下图,可以发现,对这些任务的微改主要是新增线性层的参数以及起始符、结束符和分隔符三种特殊符号的向量参数。

GPT 总体架构 gpt模型_GPT 总体架构_20

3.总结

最后总结一下:

  • GPT其实跟ELMO非常相似,只是把语言模型直接迁移到具体的NLP任务中,因此,更容易进行迁移学习。
  • 不过GPT主要还是针对文本分类和标注性任务,如果对于生成任务,比如机器翻译等,则其结构也没法进行很好的迁移。