ELMO,BERT和GPT的原理和应用总结(李宏毅视频课整理和总结)_bert 视频课

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

+ - [3.3.1 Case 1](#331_Case_1_48)
	- [3.3.2 Case 2](#332_Case_2_51)
	- [3.3.3. Case 3](#333_Case_3_54)
	- [3.3.4 Case 4](#334_Case_4_56)
+ [3.4 Enhanced Representation through Knowledge Integration (ERNIE)](#34_Enhanced_Representation_through_Knowledge_Integration_ERNIE_65)
+ [3.5 More about BERT](#35_More_about_BERT_68)
+ - [3.5.1 What does BERT learn?](#351_What_does_BERT_learn_69)
	- [3.5.2 Multilingual(多语言的) BERT](#352_Multilingual_BERT_72)

0 前言

一个字可以有多种意思,例如:“你好捞哦”和“我捞起鱼”。很明显两个“捞”表达的意思并不相同,但是如果使用word2vec做静态embedding,那么神经网络看到的“捞”是同样的语意。于是就延伸出参考上下文的embedding(Contextualized word embedding)。这种embeding可以保证同一个字在不同的语境下有不同的embeding。本文由整理李宏毅老师视频课笔记和个人理解所得,介绍几种主流的NLP模型:ELMO,BERT和GPT,三个网络模型都是Contextualized word embedding的模型。我会及时回复评论区的问题,如果觉得本文有帮助欢迎点赞 😃。

1 Introduction

1.1 word2vec

最早的word2vec方法是1 of N Encoding,即每一个词汇都当做一个符号,都用向量来描述,这个方法是不足的,这样词汇和词汇之间的相关性反应不出来。后来有了word class,以某种类别标准将词汇进行分类。这个方法也比较粗糙,比如动物也分了很多种。Word Embedding 每一个的词汇都用向量来描述,但是每一个维度是一个属性。很多NLP的任务都不会用独热码,而是用Word Embedding 。这个概念已经详细讲过,有兴趣的朋友可以看我之前的文章。
在这里插入图片描述
同一个词汇有不同的意思,比如下图:
在这里插入图片描述
上面句子的四个Bank是不同的token,但是同样的type。过去是不区分token的,每一个word type只有一个embedding,即认为语义是一样的。但是事实并非如此。比如前两个句子的bank指的是银行,后面三个bank是指的堤坝。

所以我们希望机器可以依据不同的token给出不同的embedding。如果固定bank的type有两个embedding,如果有第三种意思出现,那么embedding就不够用了。
在这里插入图片描述
很多词汇和对象并不是严格对应的,比如说这两个角色,在角色设定上是一样的,但是实际上一个是真人真物,一个是动漫角色。你可以说是一样的,也不一样的。
在这里插入图片描述

1.2 Contextualized Word Embedding

我们期望是机器做到每一个word token都有一个embedding。我们考虑上下文越相近的token,可能有相同的embedding,这个技术叫做:Contextualized word embedding。如下图,后面两个bank可能是相近的,而前面一个带有river的bank可能有不同的embedding。
在这里插入图片描述

2 Embeddings from Language Model (ELMO)

ELMO是一个基于RNN的语言模型。给RNN很多句子,RNN学习并预测下一个token是什么,输入BOS表示开始就输出潮水,输入潮水,就输出退了等等。如果是单向的RNN,中间hidden layer的就是输入词汇的embedding;如果是双向的RNN,就将正向逆向的embedding接起来作为最终的embedding,双向RNN的好处是前后文的信息都可以使用到:
在这里插入图片描述
即使输入同一个词汇,比如“退了”,根据不同的上下文,下一个输出的词汇也不一样了。那么意味着“退了”就有了不同的embedding:
在这里插入图片描述
RNN可以是deep的,多加几层。但是这样会产生很多个embedding,所以应该用哪一层的embedding?ELMO的做法是全都要。
在这里插入图片描述
具体做法很简单,就是将RNN的每一层的embedding都做weight sum,而如下图的

a

1

a_1

a1​和

a

2

a_2

a2​这些权值也是根据具体的任务学习出来的。
在这里插入图片描述

3 Bidirectional Encoder Representations from Transformers (BERT)

3.1 Base Idea

BERT是transformer的encoder,网络架构是一致的。训练transformer需要输出,但是训练BERT只需要收集句子的数据集,不需要annotation(释文),就可以把这个encoder训练出来。BERT实际做的就是给一个句子,然后每一个词汇给一个embedding。

虽然下图使用的中文的词为单位,但是实际上中文用字要更合适。如果输入要表示为独热码,用词为单位这个独热码的维度几乎是无穷尽的,因为词的组合太多了,而如果用字来表示则会好很多。
在这里插入图片描述

3.2 Training of BERT

BERT是怎么训练呢?

  1. Masked LM: 第一个训练的方法 随机把一定比例的,比如15%的词汇遮盖住,输入到网络中。而BERT就是去猜测这些词汇,做一个测漏字的问题,要BERT填回来。假设第二个词汇是挖空了的(MASK),把挖空词汇的对应embedding丢入一个线性的分类器,要求这个分类器预测这个MASK的词汇是什么。因为这个分类器的能力很差,所以如果用这种分类器都能预测正确,就说明这个embedding比较合适。此时如果有两个词在MASK这一个地方都没有违和感,那么就说有一样的embedding。比如MASK这里用“退了”和“落了”都可以,因为语义是类似的。
    在这里插入图片描述

  2. Next Sentence Prediction
    给两个句子,比如“醒醒吧”和“你没有妹妹”,这两个句子是接在一起的,期望BERT能预测两个语句是接在一起的。使用SEP作为两个句子之间的分界符。使用CLS标识要做分类的位置,就是预测这两个句子是否相接的结果,将CLS的embedding丢入一个二分类的线性分类器,可以输出yes或者no。

那么为什么CLS不放在后面呢?不是最后才更合理吗?如果是单向的RNN,那么确实是需要从左读到右,最后才能做分类。但是BERT内部不是RNN,而是transformer,transformer使用的是self-attention的结构,这使得CLS放在开头和结尾是没有区别的。这些都是一起被训练的。在文献上,这两个方法是同时使用的。
在这里插入图片描述

3.3 Applications of BERT

问题是怎么使用BERT呢?最简单的是将BERT当作一个抽取特征的工具,就像是ELMO一样,训练新的embedding。但是原文不是只有这样,而是将BERT模型和你的要解的任务一起做训练,怎么结合呢?文中举了4种不同的例子。

3.3.1 Case 1

第一个例子是假设输入句子,输出句子的类别。比如判断这个句子是正面的还是负面的,或者输入新闻,判断是什么领域的。如下图,这个句子放进模型,然后在前面加CLS,CLS对应位置的embedding丢入一个线性分类器,分类器输出就是类别。BERT的参数和分类器的参数可以一起学,线性分类器需要从头学,而BERT的参数只需要微调即可。
在这里插入图片描述

3.3.2 Case 2

第二个任务是输入句子,输出句子的每一个词汇的类别。比如slot filing这类的任务,具体做法也是在第一位置放置CLS,但这里是将CLS之外的每一个词汇对应的embedding丢入线性分类器,分类器输出类别。
在这里插入图片描述

3.3.3. Case 3

输入两个句子,输出一个类别。比如Natural Language Inference任务,要机器根据一个前提,推论下一个句子的假设是对还是错,还是不知道。具体解法如下和Case 1差不多。在这里插入图片描述

3.3.4 Case 4

第四个例子是解基于抽取的QA问题,即给模型读一篇文章,然后提出一个问题,模型能给答案,而答案本身一定能在文章中找到。给出文章D和问题Q,包含有不同的一些token,输出到模型中,模型可以输出s和e两个整数,则代表答案是第s到第e个token。举例说明的话,如果答案是“within a cloud”,那么输出s=77,e=79,即文中的第77-79的词汇就是答案。
在这里插入图片描述
那么怎么用BERT来搭建这个QA的模型呢?

将问题

q

1

q_1

q1​,

q

2

q_2

q2​…输进去,再把文章

d

1

,

d

2

,

d

3

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值