论文《Improving Language Understanding by Generative Pre-Training》

Pytorch代码实现:

huggingface/pytorch-openai-transformer-lm

一、论文原理

GPT的核心思想是先通过无标签的文本去训练生成语言模型,再根据具体的NLP任务(如文本蕴涵、QA、文本分类等),来通过有标签的数据对模型进行fine-tuning

具体来说,在这篇论文中提出了半监督的方法,即结合了无监督的预训练和有监督的fine-tuning。论文采用两阶段训练。首先,在未标记数据集上训练语言模型来学习神经网络模型的初始参数。随后,使用相应NLP任务中的有标签的数据地将这些参数微调,来适应当前任务。

二、模型结构

模型的结构是使用了多层的单向Transformer结构(《Attention is All you need》提出)。下图是GPT语言模型的结构:

【NLP】OpenAI GPT算法理解

训练的两个阶段如下:

  1. 无监督的预训练

对于无标签的文本 【NLP】OpenAI GPT算法理解,最大化语言模型的极大似然函数:

【NLP】OpenAI GPT算法理解

 

这里的 【NLP】OpenAI GPT算法理解是文本上下文窗口的大小。

论文中使用的是多层Transformer的decoder的语言模型,input为词嵌入以及单词token的位置信息;再对transformer_block的输出向量做softmax,output为词的概念分布。具体公式如下:

【NLP】OpenAI GPT算法理解

2. 有监督的fine-tuning

在对模型预训练之后,采用有监督的目标任务对模型参数微调。假设一个有标签的数据集,假设每一条数据为一个单词序列 【NLP】OpenAI GPT算法理解 以及相应的标签 【NLP】OpenAI GPT算法理解 ,通过之前预训练的模型获得输出向量 【NLP】OpenAI GPT算法理解,再送入线性输出层,来预测标签 【NLP】OpenAI GPT算法理解

【NLP】OpenAI GPT算法理解

Loss函数为:

【NLP】OpenAI GPT算法理解

最后,将两阶段的目标函数通过超参 【NLP】OpenAI GPT算法理解 相加训练整个模型:

【NLP】OpenAI GPT算法理解

三、具体任务的模型微调

【NLP】OpenAI GPT算法理解

对于文本分类,只需要在预训练模型上微调。对于QA任务或者文本蕴含,因为预训练模型是在连续序列上训练,需要做一些调整,修改输入结构,将输入转化为有序序列输入

 1)文本蕴含 :将前提 【NLP】OpenAI GPT算法理解 和假设 【NLP】OpenAI GPT算法理解 序列拼接,中间用($)符号来分隔两个序列。

2)文本相似度:分别将两个序列输入,通过模型输出两个序列的特征向量,再逐元素相加输入线性层。

3)问答和常识推理:给定上下文文本 【NLP】OpenAI GPT算法理解 ,问题 【NLP】OpenAI GPT算法理解q,一组可能的候选答案 【NLP】OpenAI GPT算法理解,将上下文文本、问题以及每个候选答案拼接起来,得到这样一个序列 【NLP】OpenAI GPT算法理解,再将该序列输入预训练模型,经softmax层得到候选答案的概率分布。

四、总结

通过预训练的语言模型学习文本的长距离依赖信息,再用有标签数据集微调,迁移到不同的NLP任务上。

 

 

 

相关文章:

  • 2021-04-20
  • 2019-11-14
  • 2021-07-16
  • 2022-01-15
  • 2023-03-19
  • 2022-12-23
  • 2021-12-16
猜你喜欢
  • 2021-11-02
  • 2021-06-28
  • 2021-05-07
  • 2021-08-25
  • 2021-07-22
  • 2021-09-27
  • 2021-10-03
相关资源
相似解决方案