NLP发展关键模型:BERT,GPT

文章目录

  • chat bot重大进展
  • 基于编码器的预训练模型
    • word embedding
    • ELMO
    • BERT
  • GPT:基于解码器的预训练模型
    • GPT1:Improving Language Understanding by Generative Pre-Training
      • finetune如何实现
      • 实验
    • GPT2:Language Models are Unsupervised Multitask Learners
      • abstract
      • 数据集
    • GPT3:Language Models are Few-Shot Learners
      • abstract
      • method
      • dataset
      • limitation
  • InstructGPT
    • 提示学习与指令微调
    • method
    • prompt具体是怎么训练的?
    • RM model
    • RL model
    • 数据集

  • 从Word Embedding到Bert模型——自然语言处理中的预训练技术发展史
  • GPT,GPT-2,GPT-3 论文精读【论文精读】by李沐

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的核心护城河,数据的信噪比高,因此需要的数据量可以大大减少。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/46117.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitHub更改username,注销账号的方法

小编很久之前就开始使用GitHub,那时候只要求能创建个账号,随便起了个username。 如今,随着GitHub深度使用,项目和粉丝都多了起来,对username也有了新的想法,毕竟username是显示在url里的。 方法&#xff…

[简易的网站登录注册,注销退出操作]

ml 数据库字段前端页面java处理信息 先看看最终效果吧 ;在登录提交时,前端页面会用JS点击事件判断; 1.首先判断的是账户框和密码框输入的是否符合规则(基本是判断不能为空,全部输空格是不允许的(用了字符串的trim()函数,将输入字符两边的空格去除,然后再判断),)然后就是密码不…

计算机账户注销重新登录,win10系统注销账户切换账号登录的方法

相信有很多用户在使用win10系统的电脑时经常需要切换账号进行登录,使用多个账号操作电脑的话可以对账号的一些权限进行限制,根据最高管理员对这些账户权限的分配可以限制某个账户对电脑进行某些操作,于是用户在使用的过程中就会遇到需要注销账…

如何注销Facebook账户

登录你的Facebook账户; 在浏览器键入地址:https://ssl.facebook.com/help/contact.php?show_formdelete_account,会转入以下界面 点提交后,再输入密码和验证码; 系统出现如下提示,并同时发一封邮件到你邮箱 然后确认删…

阿里云盘挂载本地

目录 一、先安装JDK,配置环境变量 二、获取refresh_token 三、Windows R -------> 输入cmd ------> 进入命令行模式 四、打开浏览器, 刺客边风!把64000GB网盘当成电脑本地硬盘用?最强网盘挂载本地盘神器&#xf…

阿里云linux挂载云盘

阿里云购买的第2块云盘默认是不自动挂载的,需要手动配置挂载上。 1.查看SSD云盘 sudo fdisk -l 可以看到SSD系统已经识别为/dev/vdb 2.格式化云盘 sudo mkfs.ext4 /dev/vdb 3.创建挂载点: mkdir /data 4.挂载 sudo mount /dev/vdb /opt (或mount /dev/vdb …

阿里云CentOS服务器挂载数据盘

1. 查看系统环境 lsb_release -a2. 查看磁盘分区情况 fdisk -l查看磁盘情况,该阿里云服务器对应的系统盘为vda:40G,数据盘为vdb2:1.7T。 3. 磁盘分区 输入fdisk /dev/vdb2 对数据盘进行分区。根据提示,输入 n, p, …

RaiDrive通过WebDAV挂载阿里云盘

有了阿里云盘后总是想怎么去折腾它,因为它的传输速度实在太快了,完全秒杀 “Bai度” ,因为电脑里面存的资料什么的比较多,笔记本只有一个 500G 的固态硬盘,感觉有点空间吃紧,所以想到了借助工具 RaiDrive把…

使用阿里云服务器安装AList

一、申请免费的服务器(需要学生认证) 打开链接阿里云学生云服务器免费申请,完成下面任务,即可免费申请一个2核2G的服务器 申请完成后,打开控制台, 重置实例密码 查看公网ip 二、安装步骤 1. 连接到服务器 使…

阿里云系统盘扩容及数据盘分区、格式化分区、挂载、取消挂载

系统盘扩容 重点注意: 1.如果出现ping不同或者ssh链接不上,解决办法,直接把/etc/fstab文件还原成默认就可以了(随便操作,退路以为你们留好) 2.分区后挂在会出现问题我这边分享个链接,不分区挂载…

阿里云云盘扩容

1、进入阿里云控制台-云服务器ECS-实例 2、进入存储与快照-云盘 3、进入实例,找到要扩容的机器,点击实例id进入,到云盘,选择要扩容的创建快照 在弹出的对话框中,根据实际情况配置快照信息,然后单击确定。 …

阿里云Linux挂载OSS操作

OSS挂载 下载系统对应工具包安装修改配置文件设置权限挂载命令卸载注: 下载系统对应工具包 阿里云安装OSS工具地址 https://help.aliyun.com/document_detail/32196.html 这边提供CentOS6,7地址: CentOS7: wget http://gosspublic.alicdn.c…

群晖向阿里云OSS同步

一、阿里云 1.配置key 阿里云的访问控制RAM。 个人使用这里方便点,可以是子账号单独授权,创建key 2.配置对象存储 对象存储 OSS (aliyun.com) 配置阿里云OSS,建立新Bucket。登录阿里云控制台,找到阿里云OSS。 二、群晖 1.登录…

阿里云服务器购买之后设置密码、安全组、增加带宽、挂载云盘教程

当我们通过阿里云各种活动购买完云服务器之后,设置云服务器远程密码、配置安全组规则是必须操作的,由于活动中的云服务器购买时大多只有1M带宽,且没有数据盘,因此增加带宽和挂载云盘教程也是很多用户会做的事情,很多新…

利用webdav协议将阿里云盘挂载到本地

利用webdav协议将阿里云盘挂载到本地 阿里云盘本身并未支持webdav协议(Web-based Distributed Authoring and Versioning),所以需要大佬写的程序来替阿里云盘实现webdav协议,具体地址:webdav-aliyundriver。 在其中下…

阿里云 ECS 挂载数据盘 以及 重启后挂载的盘还原成了未挂载

1、阿里云CentOS服务器挂载数据盘 阿里云购买机器或者数据盘,并不会自动挂载在ECS机器上,需要手动的挂载。 第一步:查看ECS是否存在数据盘,命令: sudo fdisk -l 第二步:从命令上看有一个/dev/vdb的64.4G的…

linux安装AList挂载阿里云云盘挂载到本地磁盘

AList一个支持多种存储的文件列表程序,使用 Gin 和 Solidjs GitHub:https://github.com/alist-org/alist 帮助文档:Introduction | AList文档 服务器新建alist-compose.yml 注意修改自己需要开发的端口,默认为5244 version: …

百度云迁移到阿里云(本地挂载网盘)

背景: 1.电脑硬盘不够 2.不想续费百度云网盘(想白嫖不想开会员) 原理 将阿里云盘挂载到本地电脑 然后百度云开会员直接下载到本地挂载的盘 需要准备的(https://www.aliyundrive.com/s/mbQRzwRyBLk 提取码:u6n9&#x…

腾讯云Ubuntu服务器挂载阿里云盘

文章目录 安装docker获取refresh-token开放服务器8080端口运行容器测试挂载webdavReferences 买了便宜套餐就40G,不太够存储数据集 挂载个阿里云盘扩容玩玩 安装docker sudo apt install docker.io获取refresh-token 进入阿里网盘 登陆 在首页按F12或右键检查…

阿里云挂载云盘

阿里云挂载云盘第一步 在阿里云管理员后台,云盘管理中心挂载好云盘在哪个服务器上面。 登录 ECS管理控制台在左侧导航栏中,选择 存储 > 云盘选择地域。找到 待挂载 云盘,在 操作 列中,选择 更多 > 挂载。 弹出框中完成设…