NLP发展关键模型:BERT,GPT

chat bot重大进展

  • ToolFormer:可以连API,一部分知识用LLM回复,也可以联网,使用现有的API(比如计算问题)进行解答,避免了LLM训练以后知识库无法更新的短板;
  • meta LLaMA:参数量从 70 亿到 650 亿不等,13B参数的 LLaMA 模型「在大多数基准上」可以胜过参数量达 175B的 GPT-3,而且可以在单块 V100 GPU 上运行;
  • Visual ChatGPT:可以接受图像输入,进行理解,但是还无法生成图像;多模态的一步进展。
  • GigaGAN:10亿参数的GAN网络,在生成效果上媲美diffusion,DALL-E,而且速度也有优势;
  • 斯坦福的Alpha:7B参数的模型+52k数据,和open AI175B的模型效果相媲美;
  • 谷歌Claude:号称安全性更高
  • 微软Copilot:自动生成报表,PPT,写文档,解放(代替)打工人

基于编码器的预训练模型

word embedding

  • word embedding:每个单词one-hot编码的向量矩阵,在大语言训练之后,该矩阵可以直接提取出来,作为word embedding提取器,用于计算单词的相似度等;其中提取word embedding的方式word2vec的训练有两种:(1)提供上下文,预测目标单词,CBOW(continuous bag-of-word model);(2)当前单词预测前后的单词。
  • 缺点:当同一单词有不同含义的时候无法区分

ELMO

  • 在word embedding的基础上,对上下文信息进行编码,对于当前单词提供出来的是word embedding, 双向LSTM前向编码的结果,反向编码的结果(其中后两项有比较强的语义信息)。

BERT

在这里插入图片描述

通过掩码语言建模和下一句预测任务,对 Transformer 模型的参数进行预训练。

  • 使用transformer结构,且使用了双向编码的结果
  • 使用了CBOW的方法,训练的时候,对于一个句子,随机mask一定比例的单词,作为预测目标。(为了避免训练把mask映射,部分mask不是替换成【mask】的方式,而是随机换成其他的单词,或者不做mask)
  • in-context学习的能力,对于下游任务,只需要对数据结构作一定的修改,仍然使用此结构,在重多任务上都取得比较好的结果。

GPT:基于解码器的预训练模型

  • 使用transformer结构,长距离编码的能力显著优于BLSTM
  • 但是只提供了前向编码的结果,没有考虑上下文信息

在这里插入图片描述

GPT1:Improving Language Understanding by Generative Pre-Training

  • 设计逻辑:使用大量无标注的文本进行预训练,训练的时候通过自回归的方式,(x1,x2,x3)预测下一个token x4;然后对特殊任务进行有标签数据的finetune;
  • 传统的NLP不同子任务需要设计不同的模型结构,GPT提出可以通过不同的数据构造方式,不需要改变模型结构。
  • 无监督数据训练的难点:(1)选择损失函数。——自监督学习(论文中当时称呼的是半监督学习)
    在这里插入图片描述
  • 模型是transformer-decoder的结构,只能看见前k-1个词,然后预测第k个词;(相对更难的问题)
  • BERT是一个完形填空问题,在一个句子中间mask掉某个词,然后该词前后的文本都可见,预测mask的单词内容是什么。

finetune如何实现

在这里插入图片描述

  • finetune的任务定义,给定输入序列 [ x 1 , x 2 , . . . , x m ] [x^1, x^2,..., x^m] [x1,x2,...,xm],预测他们对应的label y y y
    在这里插入图片描述
  • 该问题对应的loss函数设计
    在这里插入图片描述
  • 真正在训练的时候,把 L 1 L_1 L1 loss也考虑进去,会提升模型的性能。
    在这里插入图片描述
  • transformer是预训练的模型,参数freeze;linear是在finetune阶段添加的特定层,与设置的任务有关;对于不同的任务,构造不同形式的输入,但是都送给预训练的transformer中;
  • NLP四大经典任务:(1)分类;(2)蕴含关系;(3)相似度计算:a+b=b+a;(4)问答:同一问题,多个备选答案,softmax多分类,计算不同答案的置信度;

实验

  • 12层transformer,unit size=768
  • 7000本未发表的书,BooksCorpus

GPT2:Language Models are Unsupervised Multitask Learners

abstract

  • 模型更大,数据量更多。
  • 提出的新意:对于下游任务,不需要额外的finetune,zero-shot的场景可用;预测从GPT1的 P ( o u t p u t ∣ i n p u t ) P(output|input) P(outputinput) P ( o u t p u t ∣ i n p u t ; t a s k ) P(output|input;task) P(outputinput;task)
  • 提出prompt的使用:因为下游任务不再finetune,不同任务的数据构造方式不一样,像GPT1中出现的起止符,分割符对于模型而言是unseen,会造成问题。为了解决这一问题,给到prompt这样的提示,举例说明((translate to
    french, english text, french text)——任务:把英语翻译成法语,英语文本,对应的法语文本。

数据集

  • reddit(美国的新闻聚合网页),选取有三条评论以上的网页;数据集中有类似prompt提示的组合(并非严格的格式一致)。

  • 结果:和其他zero-shot的base相比,会好一些;但是和sota的任务对比,只有在生成摘要的任务上达到相近的效果,其他的都还有差距。(但是能看到,随着模型参数的增加,效果是一直在变好的)

GPT3:Language Models are Few-Shot Learners

abstract

  • 自回归的大模型,在子任务上不需要finetune;可以生成fake news
  • 预训练+finetune存在的问题:(1)子任务仍然需要大量的标注数据;(2)如果微调的任务是unseen的,finetune之后结果好(有可能过拟合了)并不能说明pre-trained model效果好;——如果不允许finetune,效果好才说明是预训练模型效果好。

method

在这里插入图片描述
在这里插入图片描述

  • in-context learning:如上图所示,可以根据给到的任务描述&example&prompt,给出真实的预测结果。上下文范围内的内容理解。
  • 存在的问题:不能很好的利用到few-shot的样本(如果样本数量比较多的话)
  • 层数增加,每一层的multi-head也要增加。GPT3做成一个宽的模型。大的模型用更大的bs,lr降低(这些有相对应的研究在)。(小模型更容易过拟合,小的bs会引入噪音)
  • 分类问题:回答是true/false,代替二分类;
  • 问答问题:beam search找到一个最好的答案

dataset

在这里插入图片描述

  • common crawl:数据清洗:(1)gpt2的reddit数据作为正例,common crawl的数据作为负例,训练二分类分类器;然后设置分类的阈值;(2)去重;
  • 已知的高质量数据集
  • 不同的数据集进行一定比例的采样,然后再使用

limitation

  • (1)长文本会生成重复的文本;
  • (2)结构的局限性,只能看到过去的内容;
  • (3)预测词的时候均匀的预测,没有对不同的词加weight;
  • (4)不确定是从头学习的,还说from search(纯粹拼数据量的大小)
  • 模型因为训练集的问题,可能会带有种族,性别的偏见。

InstructGPT

提示学习与指令微调

  • prompt learning:构造输入数据的形式,将原来的监督任务变成生成任务。比如”我今天考砸了“,分类任务是判别一种情感概率;提示学习变成,输出”我感觉很_____“,生成内容后,再通过应设函数,将生成内容匹配到分类标签上。编辑输入来深挖模型 自身所蕴含的潜在知识,进而更好的完成下游任务。
  • 提示学习还可以用于语境学习,比如“美国的首都是华盛顿, 法国的首都是巴黎,英国的首都是 ____”,适用于推理任务的思维链。
  • instruct tuning(指令微调):提示学习的进阶版,模型要做的不仅是生成补全,还需要根据提示/任务要求做出相应的回复。–InstructGPT.可以帮助模型更深层的进行语义理解,当指令到达一定数量级以后,zero-shot就成为可能。
    • 请帮我写一首描绘春天的诗词,诗词中要有鸟、花、草。
    • 请帮我把下面这句话进行中文分词“我太喜欢 ChatGPT 了!”

method

在这里插入图片描述

  • 训练过程分为三个阶段
    • stage 1:使用prompt learning,先人工标注的方法写一些prompt(包括问答,翻译,缩写,扩写等等),训练一个初版模型,放到平台上供用户使用,进而收集更多的prompt,且是真实场景一致的。此过程的模型称之为SFT model。
      • 把GPT3这个模型,在标注好的第一个数据集(问题+答案)上面重新训练一次。由于只有13000个数据,1个epoch就过拟合,不过这个模型过拟合也没什么关系,甚至训练更多的epoch对后续是有帮助的,最终训练了16个epoch。
    • stage2:除去用户写prompt以外,用各种现有的模型,生成一些prompt的回复,然后人工进行打分&排序,根据排序的结果训练打分模型;此过程的模型称之为RM model
    • stage 3:对于没有答案的prompt,prompt送给模型生成结果,送给RM模型打分,将打分结果反馈给生成模型。这一阶段称之为PPO,此过程的模型称之为RL model。

prompt具体是怎么训练的?

问题和答案进行拼接,一起送给模型,自回归的方式预测下一个词,之后的词被mask。

RM model

在这里插入图片描述

  • Pairwise Ranking Loss

把SFT模型最后的unembedding层去掉,即最后一层不用softmax,改成一个线性层,这样RM模型就可以做到输入问题+答案,输出一个标量的分数。

RM模型使用6B,而不是175B的原因:

  • 小模型更便宜
  • 大模型不稳定,loss很难收敛。如果你这里不稳定,那么后续再训练RL模型就会比较麻烦。

RL model

在这里插入图片描述
强化学习,模型处于当前状态—做出行动action—模型到达一个新的状态。
损失函数分成三部分:

  • 打分部分: r θ ( x , y ) r_{\theta}(x,y) rθ(x,y),对于新模型数据打分要高一些
  • KL散度部分:目的是RL模型和之前的模型的差距越小越好
  • GPT3预训练部分:目的是不要只对当前的任务进行优化,也需要关注原始数据(语言模型的loss,下一个tokens)

数据集

1、SFT数据集:13000条数据。标注人员直接根据刚才的问题集里面的问题写答案。
2、RM数据集:33000条数据。标注人员对答案进行排序。
3、RF数据集:31000条数据。只需要prompt集里面的问题就行,不需要标注。因为这一步的标注是RM模型来打分标注的。

  • 文章附录中有写比较详细的,如何筛选标注人员,以及标注界面的设计,标注方式的定义,这些都是可以直接借鉴的。
  • 数据分布和质量是Intruct GPT的核心护城河,数据的信噪比高,因此需要的数据量可以大大减少。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值