【笔记】GPT
文章目录
- 【笔记】GPT
- 介绍
- 原理
- 预训练过程
- fine-tuning
GPT和ELMO非常相似,把语言模型直接迁移到具体的NLP任务中,因此,更容易迁移学习;不过也有弊端,这种将结构带入下游任务中的模式,不一定对每个任务都适用,GPT主要还是针对分类任务和标注性任务,对于生成任务,比如机器翻译,则它的结构也没办法进行很好的迁移;
介绍
GPT在2018年由OpenAI提出,通过在大量的语料上预训练语言模型,然后再将训练好的模型迁移到具体的下游NLP任务,从而提高模型的能力;
论文地址 : Improving Language Understanding by Generative Pre-Training
原理
GPT模型主要包含两个阶段,第一个阶段,先利用大量未标注的语料预训练一个语言模型,接着,在第二个阶段对预训练好的语言模型进行微改,将其迁移到各种有监督的NLP任务,并对参数进行fine-tuning。
预训练过程
给定一个没有标注的大型语料库,使用上下文窗口来预测最后一个词,即,通过单词前N个词来预测当前的单词,预测时,只考虑左侧窗口大小的词汇信息, 在GPT中,作者采用的是一个12层的Transformer decode作为语言模型的结构;GPT中使用的是Transformer结构,其中pos embedding和bert一样,使用位置编码,而非正弦余弦进行计算;
从GPT的计算公式来看,其实跟Transformer基本是一样的,只是对每个时间步,都只考虑左侧窗口大小的上下文信息。
fine-tuning
当语言模型训练结束之后,就可以将其迁移到具体的NLP任务中;和BERT不同的是,GPT在下游任务中也会把语言模型的目标引入到目标函数中,作为辅助函数,因为作者发现这样操作可以提高模型的通用能力,并且加速模型的收敛;
针对不同的下游任务,作者提出了以下的修改方法,GPT的输入同样带有特殊字符 start
, end
, Delim
; 可以看做一个输入模板;
- 文本分类:选取最后一层Transformer最后一个时间步的输出向量,作为分类向量,后面接全连接,得到预测标签;
- 文本蕴涵:对于文本蕴涵任务,作者用一个
$
符号将文本和假设进行拼接,并在拼接后的文本前后加入开始符start
和结束符end
,然后将拼接后的文本直接传入预训练的语言模型,在模型再接一层线性变换和softmax即可。 - 文本相似度:判断两个句子的相似度,或者是否相似,按照模板拼接两个句子输入,由于是单向语言模型,输入句子的顺序有很重要了,为了避免这个问题,调换两个句子顺序再拼接一遍;最后提取Transformer输出序列的最后一个位置,编码输出;
- 问答和推理: 对于问答和常识推理任务,首先将背景信息与问题进行拼接,然后再将拼接后的文本依次与每个答案进行拼接,最后依次传入Transformer模型,最后接一层线性层得多每个输入的预测值。
具体的方式可以看论文中的这张图: