Chapter7-3_BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more

文章目录

  • 1 How to pre-train
  • 2 Predict next token
  • 3 Mask Input
  • 4 seq2seq的pre-train model
  • 5 ELECTRA
  • 6 Sentence Embedding

本文为李弘毅老师【BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。

下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。

文章索引:

上篇 - 7-2 BERT and its family - Introduction and Fine-tune

下篇 - 7-4 來自獵人暗黑大陸的模型 GPT-3

总目录

1 How to pre-train

上篇讲了如何用pre-trained model去做一些NLP相关的任务,这篇就来讲一下如何得到这个pre-trained model,也就是如果pre-train。

最早的一种pre-train的方法就是利用翻译的任务去train一个encoder和decoder,而这个encoder就是我们想要的pre-trained model。用翻译的任务来做是因为翻译的时候需要考虑到上下文的信息,因此每个token对应的输出也是考虑了上下文的,然后用这些输出塞进decoder之后可以得到正确的翻译说明了这些输出特征包含了每个token的语义。但是,这样做的话,有一个不好的地方就是,我们没有那么多已经成对整理好的数据,这个数据的成本将非常大。
ch7-3-1

因此我们希望有一种不需要标注数据的方法去进行pre-train,这种方法就叫做self-supervised learning。没错,这个也就是unsupervised learning,但是Yann LeCun呼吁我们改口称之为self-supervised learning。因为其本质是用输入的一部分去预测输入的另一部分,还是有监督的。下图就是有监督和自监督的一个区别。
ch7-3-2

2 Predict next token

那么我们如何把一个句子xxx够造成x′x'xx′′x''x呢?最常见的一种做法就是predict next token。我们会输入w1w_1w1希望模型预测出w2w_2w2,然后再输入w2w_2w2希望模型预测出w3w_3w3,以此类推,只要注意在设计模型的时候,不要让模型看到它不该看到的答案就可以了。把这个输入wiw_iwi,输出hih_ihi的模型基于LSTM去设计,就有我们的ELMo了。如果是基于self-attention去做,就有GPT,Megatron和Turing NLG。这个模型也就是language model。
ch7-3-3

聪明的小伙伴也许已经意识到了,我在预测w2w_2w2的时候,只看到了w1w_1w1,为什么不能也看一下w3w_3w3w4w_4w4呢?把句子除了w2w_2w2之外的部分都看一遍,再去预测,才会比较准吧。没错,的确是需要这样做的。ELMO就用了两个LSTM分别从头开始看和从尾开始看,比如看了w1w_1w1w4w_4w4去预测w5w_5w5,然后看了w7w_7w7w5w_5w5去预测w4w_4w4,最后把这两个的features去concat得到最终w4w_4w4对应的feature。
ch7-3-4

3 Mask Input

ELMO的做法有一个问题就是两个LSTM是互相独立的,它们之间没有信息的交流。BERT则完美的解决了这个问题,BERT只要设计好一个MASK,然后盖住模型要预测的那个token就可以了,这就是self-attention相比于LSTM的优势啊!顺便一提,BERT的这种训练方法和CBOW是非常像的,可以说是超级版的CBOW。
ch7-3-5
不过,只盖住一个token就足够了吗?只盖住一个token,模型可能无法学到一些long-term的东西,只要依赖于附近的几个词猜猜就行了。所以,有人就提出了盖一个词去做,这个叫做Whole Word Masking。也有人提出先对句子做entity recoganition然后盖entity或者phrase,这个就是ERNIE。

还有一种叫做SpanBert的方法,就是随机去盖一排token,盖住的token的length满足一个分布,这个分布是盖的越长概率越小的一个分布。SpanBert的训练方法其实也和Bert有所不同,它用了一种叫做Span Boundary Objective的方法,就是利用被盖住部分两端最接近的两个embedding,然后再输入一个要预测被盖住的第几个token的数字,去预测最终的结果。这听上去有些想不通,为什么要这么搞一下,原来的方法不香吗?
ch7-3-6

再讲一个叫做XLNet的模型,这个模型比较难懂,这里只是说一下它的做法,说实话搞不懂为什么要这么做,有时间去看看paper再回来说下感悟。它的做法就是,它在预测被盖住的token的时候,是随机取其他已有的embedding的信息去预测的,当然也需要一个position encoding告诉它要去预测哪个token。就是这样,奇怪吧~
ch7-3-7

4 seq2seq的pre-train model

BERT在训练的时候都是看整个句子去预测的,因此不太适用于generation的任务,就是给一段句子,去预测后面的部分。Language model在训练的时候就是这么训练的因此没有太多问题。但是Bert都是给个mask然后去预测mask的内容的。硬要上的话,就是在句子的后面强加一个mask,然后让BERT去预测预测看。这种从左往右预测的叫做autoregressive model,但是今天,我们不一定要让模型从左往右去生成文本,如果是non-autoregressive model的话,说不定BERT就适用了。
ch7-3-8

seq2seq的pre-train model是如下图这样的,输入一串tokens,经过一个encoder和decoder之后,希望得到同样的一串tokens。当然,直接这么做的话未免太简单,模型学不到什么东西,所以,一般会对input的sequence做一些破坏。
ch7-3-9

Bart尝试了以下几种破坏方式,第一种是随机给一个token加mask;第二种是删除某些输入;第三种是对tokens做permutation;第四种是对tokens做rotation;第五中是在没有token的地方插入mask,然后盖住某些token,盖住的部分可能有两个token。其中效果最好的是最后的一种。第三和第四种效果最差。这样的结果其实也可以预期到,给模型看大量的打乱顺序的句子,模型就不知道什么是正常的句子了。
ch7-3-10
还有一种叫做UniLM的,是既可以像BERT那样训练(双向language model),又可以像GPT那样训练(left-to-right language model),还可以像BART那样训练(Seq-to-seq language model)。这里只提一下这个模型,不细讲了。

5 ELECTRA

还有一个叫做ELECTRA的模型,用一个更简单的任务去预训练模型。它把输入中的某个token用另一个token替换调之后,输入模型,让模型去预测各个token有没有被替换过。这样一方面使得任务更为简单,另一方面也可以监督到每一个token的对应输出。
ch7-3-11

当然,如果随意替换的话,很容易就会被模型找出来了,学不到什么东西。所以,这篇文章的作者用了一个额外的small BERT来生成这个要被替换掉的位置的token。这个BERT不能太准,也不能太不准。太准的话就直接预测出原来的token了,太差的话和随机选差别不大。这种做法挺像GAN的,但它不是GAN,上下两个模型是各train各的,BERT没有被设定为要骗过上面的model。
ch7-3-12

ELECTRA的效果还挺惊人的,它可以用更少的FLOPS得到和大模型非常接近的结果。
ch7-3-13

6 Sentence Embedding

有些时候,我们希望得到的并不是每个token的embedding,而是一个可以表示整个句子的sentence embedding。这个时候,又该如何训练呢?
ch7-3-14

训练sentence embedding的模型有两种方法,一种叫做skip Thought,就是给定一个句子,让模型去预测它的下一句话是什么,这样的生成任务很难;另一种叫做Quick Thought,在encoder分别输入句子1和句子2,encoder会分别输出feature1和feature2,如果这两个句子是相邻的,那么我们希望feature1和feature2很相似。
ch7-3-14

Bert的做法是NSP(Next sentence prediction),就是输入两个句子,在两个句子之间加一个"[SEP]“分隔符,然后用”[CLS]"这个token的输出来预测这两个句子是相邻的,还是不是相邻的。
ch7-3-14

NSP的这种做法的实际效果并不好,于是就有人提出了SOP(Sentence order prediction)。就是让两个句子来自于同一篇文章,如果这两个相邻的句子反了,那么它也是输出的No,只有在既相邻,顺序又对的情况下输出Yes。还有人提出了structBERT,就是结合了NSP和SOP。

最后来提一下T5(Transfer Text-to-Text Transformer),它是谷歌出的,用到了各式各样的预训练方法,真是有钱。

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

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

相关文章

python中split函数_python strip()函数和Split函数的用法总结

strip函数原型 声明:s为字符串,rm为要删除的字符序列. 只能删除开头或是结尾的字符或是字符串。不能删除中间的字符或是字符串。 s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符 s.lstrip(rm) 删除s字符串中开头处&#xff0c…

express项目搭建 初始化详细步骤

案例 一、对每一个POST请求都设置CSRF防护 实际上,不仅仅转账需要CSRF防护,每一个post请求都需要做csrf的防护措施。 webA项目中的app.js: const router express.Router();router.all("/register",(res,req)>{.... })funct…

Chapter7-4_來自獵人暗黑大陸的模型 GPT-3

文章目录1 为何来自暗黑大陆2 GPT-3的野心3 GPT-3的效果4 Beyond GPT-3本文为李弘毅老师【來自獵人暗黑大陸的模型 GPT-3】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自于李宏毅老师的PPT,若有侵权…

二、PHP框架Laravel学习笔记——路由的定义和控制器

一.路由的定义 什么是路由?路由就是提供接受 HTTP 请求的路径,并和程序交互的功能; 简单点理解,就是为了提供访问程序的 URL 地址,所做的一些设置工作; phpstorm 支持 cmd 操作,左…

Chapter7-5_Multilingual BERT

文章目录1 什么是Multilingual BERT2 Zero-shot Reading Comprehension3 Cross-lingual Alignment4 How alignment happens本文为李弘毅老师【Multilingual BERT】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自…

deepin tim(wine)无法安装_浅析国产操作系统深度deepin

经过两天的努力,终于实现了win10下跟deepin 的双系统,经过我实际操作,发现win7环境下装双系统还是有问题的。虽然deepin系统也能安装成功,但是win系统却是无法顺利启动,一直卡在系统初始界面无限循环。而更换win10之后…

三、PHP框架Laravel学习笔记——路由参数、重定向、视图

一.路由参数 我们已经学习了部分路由参数的功能,比如动态传递{id};那么,有时这个参数需要进行约束,我们可以使用正则来限定必须是数字; Route::get(task/read/{id}, TaskControllerread) ->where(id, …

Chapter7-6_Text Style Transfer

文章目录1 什么是Text Style Transfer2 Cycle GAN2.1 Gumbel-softmax2.2 Continuous Input for Discriminator2.3 Reinforcement Learning2.4 效果3 Star GAN4 Feature Disentangle5 Unsupervised Abstractive Summarization6 Unsupervised Translation7 Unsupervised Speech R…

Student学生管理系统

1.定义各个层 2.添加各个层之间的引用 DAL 层调用Model BLL层调用DAL和Model UI层调用BLL和Model层 Model层供各个层调用 3.根据数据库建立实体类,每张表对应一个实体类 4.在DAL层调用MyTool类和SQLhelper类,添加system.Configuration 引用 并编写app.config 在SqlHelper类调用…

一、PHP框架Laravel——入门和安装

一.版本化方案 Laravel 框架是一款简洁、优秀且优雅的 PHP 开发框架;Laravel 到底怎么读,由于不是真实的单词,导致争论较多目前已知:[lrəvel][lɑːrəvel][lɑːrvl]有这几种;Laravel 从 6.x 开始进入到…

iscsi没有可用于使用快速连接登陆的目标_【解密】5G商用在即 OPPO快速网络切换方法;高管宣布华为河图商标注册成功;小米折叠屏专利曝光 类似于摩托罗拉Razr...

1.【专利解密】5G商用在即 OPPO快速网络切换方法2.好消息!高管宣布华为河图商标注册成功3.小米折叠屏专利曝光 类似于摩托罗拉Razr4.索尼Xperia提交新专利 上下双升降结构1.【专利解密】5G商用在即 OPPO快速网络切换方法【嘉德点评】OPPO发明的网络切换专利&#xf…

搞懂DEtection TRanformer(DETR)

文章目录1 bipartite matching loss2 模型总体框架2.1 backbone2.2 transformer2.2.1 encoder2.2.2 decoder2.2.3 prediction heads3 模型效果参考文献本文描述了笔者在阅读了一些文献之后,对 End-to-end Object Detection with Transformers(DETR) 的理解。DETR是一…

四、PHP框架Laravel学习笔记——路由命名和分组

一.路由命名 给一个制定好的路由进行命名,可以生成 URL 地址或进行重定向; Route::get(task, TaskControllerindex)->name(task.index); 在控制器区域,使用助手函数 route()来获取路由生成的 URL 地址; //生成 ur…

echart 数据点可以加链接吗_地理可视化就这么简单、酷炫,蚂蚁金服AntV 空间数据可视化引擎 L72.0发布...

导读L7 是由蚂蚁金服 AntV 数据可视化团队推出的基于 WebGL 的开源大规模地理空间数据可视分析开发框架。L7 中的 L 代表 Location,7 代表世界七大洲,寓意能为全球位置数据提供可视分析的能力。L7 以图形符号学为理论基础,将抽象复杂的空间数…

论文阅读 - Large-scale weakly-supervised pre-training for video action recognition

文章目录1 概述2 数据的收集方式3 使用的模型4 预训练时的一系列问题4.1 预训练的数据是不是越多越好?4.2 用于预训练的模型是不是越大越好?4.3 预训练数据的标签种类和数量是不是越多越好?4.4 用于预训练的每个video有长有短,时长…

excel记账本模板_原来这才是老板最喜欢看的财务报表!这些模板送你,录入自动生成...

【原来这才是老板最喜欢看的财务报表!这些模板送你,录入自动生成】都说财务报表做好,会计下班会很早!财务报表做的妙,升职加薪少不了!会计每到下班拖后腿的就是要整理好各种报表然后发给领导,会…

五、PHP框架Laravel学习笔记——回退、当前路由、单行为

一.单行为控制器 之前的课程,我们简单的创建和定义了控制器,并继承了控制器基类;为何要继承基类?因为继承基类后,可以使用基类的方法,比如中间件等;继承基类后除了支持中间件快捷使…

Chapter7-7_Deep Learning for Coreference Resolution

文章目录1 什么是coreference resolution2 框架2.1 Mention Detection2.2 Mention Pair Detection2.3 End-to-End2.4 Span Representation2.5 Pratical Implementation2.6 Result3 应用本文为李弘毅老师【Deep Learning for Coreference Resolution】的课程笔记,课程…

pwn和逆向的区别_Pwn之简单patch

亲爱的,关注我吧9/27文章共计1389个词图片xue微有点多注意流量哦预计阅读7分钟来和我一起阅读吧1引言在攻防的时候不仅仅需要break,还需要fix将漏洞patch上。2工具 这里我使用的是keypatch这个ida脚本下载地址:https://github.com/keystone-engine/keypatch/blob/ma…

python n个list如何组成矩阵_通过学习在processing中操作图片,掌握python 列表操作...

这次的教学非常简单,只需要安装了python模式的processing就可以(安装教程见专栏目录)。我从网上找了一个比100*100稍微大一点的图片,你可以也找一个。然后我们就可以一起开始今天的学习啦~(请先阅读本专栏中的processi…