本文根据李宏毅老师2019最新的机器学习视频整理。

视频地址:https://www.bilibili.com/video/av46561029/?p=61
ppt下载地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML19.html

1、背景

机器是如何理解我们的文字的呢?最早的技术是1-of-N encoding,把每一个词汇表示成一个向量,每一个向量都只有一个地方为1,其他地方为0。但是这么做词汇之间的关联没有考虑,因为不同词之间的距离都是一样的。

所以,接下来有了word class的概念,举例说dog、cat和bird都是动物,它们应该是同类。但是动物之间也是有区别的,如dog和cat是哺乳类动物,和鸟类还是有些区别的。

后来有了更进阶的想法,称作word embedding,我们用一个向量来表示一个单词,相近的词汇距离较近,如cat和dog。那word embedding怎么训练呢?比较熟知的就是word2vec方法。

但是呢,同一个词是可能有不同的意思的,如下图中的bank,前两个指银行,后两个指河堤:

尽管有不同的意思,但使用传统的word embedding的方法,相同的单词都会对应同样的embedding。但我们希望针对不同意思的bank,可以给出不同的embedding表示。

根据上下文语境的不同,同一个单词bank我们希望能够得到不同的embedding,如果bank的意思是银行,我们期望它们之间的embedding能够相近,同时能够与河堤意思的bank相距较远。

基于这个思想,首先有了ELMO。

2、ELMO

ELMO是Embeddings from Language Model的简称,ELMO是《芝麻街》中的一个角色。它是一个RNN-based的语言模型,其任务是学习句子中的下一个单词或者前一个单词是什么。

它是一个双向的RNN网络,这样每一个单词都对应两个hidden state,进行拼接便可以得到单词的Embedding表示。当同一个单词上下文不一样,得到的embedding就不同。

当然,我们也可以搞更多层:

这么多层的RNN,内部每一层输出都是单词的一个表示,那我们取哪一层的输出来代表单词的embedding呢?ELMO的做法就是我全都要:

在ELMO中,一个单词会得到多个embedding,对不同的embedding进行加权求和,可以得到最后的embedding用于下游任务。要说明一个这里的embedding个数,下图中只画了两层RNN输出的hidden state,其实输入到RNN的原始embedding也是需要的,所以你会看到说右下角的图片中,包含了三个embedding。

但不同的权重是基于下游任务学习出来的,上图中右下角给了5个不同的任务,其得到的embedding权重各不相同。

3、Bert

Bert是Bidirectional Encoder Representations from Transformers的缩写,它也是芝麻街的人物之一。Transformer中的Encoder就是Bert预训练的架构。李宏毅老师特别提示:如果是中文的话,可以把字作为单位,而不是词。

只是Transformer中的Encoder,那Bert怎么训练呢?文献中给出了两种训练的方法,第一个称为Masked LM,做法是随机把一些单词变为Mask,让模型去猜测盖住的地方是什么单词。假设输入里面的第二个词汇是被盖住的,把其对应的embedding输入到一个多分类模型中,来预测被盖住的单词。

另一种方法是预测下一个句子,这里,先把两句话连起来,中间加一个[SEP]作为两个句子的分隔符。而在两个句子的开头,放一个[CLS]标志符,将其得到的embedding输入到二分类的模型,输出两个句子是不是接在一起的。

实际中,同时使用两种方法往往得到的结果最好。

在ELMO中,训练好的embedding是不会参与下游训练的,下游任务会训练不同embedding对应的权重,但在Bert中,Bert是和下游任务一起训练的:

如果是分类任务,在句子前面加一个标志,将其经过Bert得到的embedding输出到二分类模型中,得到分类结果。二分类模型从头开始学,而Bert在预训练的基础上进行微调(fine-tuning)。

文中还有很多其他的应用,如单词分类:

如自然语言推理任务,给定一个前提/假设,得到推论是否正确:

最后一个例子是抽取式QA,抽取式的意思是输入一个原文和问题,输出两个整数start和end,代表答案在原文中的起始位置和结束位置,两个位置中间的结果就是答案。

具体怎么解决刚才的QA问题呢?把问题 - 分隔符 - 原文输入到BERT中,每一个单词输出一个黄颜色的embedding,这里还需要学习两个(一个橙色一个蓝色)的向量,这两个向量分别与原文中每个单词对应的embedding进行点乘,经过softmax之后得到输出最高的位置。正常情况下start <= end,但如果start > end的话,说明是矛盾的case,此题无解。

Bert一出来就开始在各项比赛中崭露头角:

这里李宏毅老师还举例了百度提出的ERNIE,ERNIE也是芝麻街的人物,而且还是Bert的好朋友,这里没有细讲,感兴趣的话大家可以看下原文。

Bert学到了什么呢?可以看下下面两个文献(给大伙贴出来:https://arxiv.org/abs/1905.05950 和https://openreview.net/pdf?id=SJzSgnRcKX):

4、GPT-2

GPT是Generative Pre-Training 的简称,但GPT不是芝麻街的人物。GPT-2的模型非常巨大,它其实是Transformer的Decoder。

GPT-2是Transformer的Decoder部分,输入一个句子中的上一个词,我们希望模型可以得到句子中的下一个词。

由于GPT-2的模型非常巨大,它在很多任务上都达到了惊人的结果,甚至可以做到zero-shot learning(简单来说就是模型的迁移能力非常好),如阅读理解任务,不需要任何阅读理解的训练集,就可以得到很好的结果。

GPT-2可以自己进行写作,写得还是不错的!

好了,笔记就整理到这里了!点击阅读原文,观看李宏毅老师的视频哟~~

关于本站

“机器学习初学者”公众号由是黄海广博士创建,黄博个人知乎粉丝23000+,github排名全球前110名(32000+)。本公众号致力于人工智能方向的科普性文章,为初学者提供学习路线和基础资料。原创作品有:吴恩达机器学习个人笔记、吴恩达深度学习笔记等。

往期精彩回顾

  • 那些年做的学术公益-你不是一个人在战斗

  • 适合初学者入门人工智能的路线及资料下载

  • 吴恩达机器学习课程笔记及资源(github标星12000+,提供百度云镜像)

  • 吴恩达深度学习笔记及视频等资源(github标星8500+,提供百度云镜像)

  • 《统计学习方法》的python代码实现(github标星7200+)

  • 精心整理和翻译的机器学习的相关数学资料

  • 首发:深度学习入门宝典-《python深度学习》原文代码中文注释版及电子书

备注:加入本站微信群或者qq群,请回复“加群

加入知识星球(4300+用户,ID:92416895),请回复“知识星球

李宏毅-ELMO、BERT、GPT视频笔记相关推荐

  1. 【李宏毅2020 ML/DL】P25 ELMO, BERT, GPT

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...

  2. 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 Sent ...

  3. Self-Supervised Learning (ELMO, BERT, GPT, Auto-encoder)

    目录 The models become larger and larger - Self-supervised Learning ELMO (feature-based) How to repres ...

  4. 李宏毅DLHLP.18.BERT and its family.2/2.ELMo,BERT,GPT,XLNet,MASS,BART,UniLM,ELECTRA

    文章目录 介绍 How to pre-train Context Vector (CoVe) Self-supervised Learning Predict Next Token Predict N ...

  5. BERT详解——原理篇(组会PPT,其中大量参考李宏毅的bert课程视频)

  6. 李宏毅2021春季机器学习课程视频笔记1:Introduction, Colab PyTorch Tutorials, HW1

    诸神缄默不语-个人CSDN博文目录 李宏毅2021春季机器学习课程视频笔记集合 VX号"PolarisRisingWar"可直接搜索添加作者好友讨论. 更新日志: 2021.11. ...

  7. 【NLP】从WE、ELMo、GPT到Bert模型—自然语言处理中的预训练技术发展史

    Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高的评价吗?我个人判断是值得.那为什么会有这么高的评价呢?是因为它有重大的理论或者模型创新吗?其实并没有,从模型创新角 ...

  8. 视频+笔记+能够跑通的代码,《李宏毅机器学习完整笔记》发布!

    点击我爱计算机视觉标星,更快获取CVML新技术 [导读]关于机器学习的学习资料从经典书籍.免费公开课到开源项目应有尽有,可谓是太丰富啦,给学习者提供了极大的便利.但网上比比皆是的学习资料大部分都是英文 ...

  9. NLP词向量模型总结:从Elmo到GPT,再到Bert

    词向量历史概述 提到NLP,总离开不了词向量,也就是我们经常说的embedding,因为我们需要把文字符号转化为模型输入可接受的数字向量,进而输入模型,完成训练任务.这就不得不说这个转化的历史了. 起 ...

最新文章

  1. #ifdef #else #endif #fi #ifndef 的用法
  2. vue获取table一列数据_vue表格含有一列多选框,如何获取被选中的行的数据?
  3. 飞车手游服务器维护,QQ飞车手游更新出现异常怎么办 更新异常原因及解决方法技巧...
  4. 作者:郑理,男,南京邮电大学计算机学院项目研究员。
  5. python定位方法_selenium+python定位元素方法
  6. 武汉音乐学院计算机音乐,武汉音乐学院
  7. Leetcode 236.二叉树的最近公共祖先
  8. excel几个数相加等于某个数_Excel如何在一列数字中找出几个之和等于某个特定值...
  9. 数据仓库中OLTP和OLAP的区别
  10. mac系统csv转ansi_迅捷文字转语音 for mac
  11. 阶段3 1.Mybatis_12.Mybatis注解开发_7 Mybatis注解开发一对多的查询配置
  12. Centos7安装WPS
  13. 金融领域的知识图谱搭建简单实操(基于Neo4J)
  14. LoadLibrary动态加载dll失败,GetLastError返回错误码126
  15. PyCharm安装教程
  16. 干货 | 电子设备散热技术详解
  17. Hadoop3.x版本安装及其应用部署
  18. Java 老矣,尚能饭否?
  19. python算法(基础)----无序列表抽象数据类型
  20. java三种循环的流程图画法总结(for,while,do-while循环)

热门文章

  1. P2344 奶牛抗议
  2. setTimeout
  3. Flex+J2EE获取FlexSession的方法
  4. asp.net Urlrewriter在虚拟主机上的使用方法
  5. python 批量增加文件前缀_Excel VBA工作薄 7.5批量增加工作表前缀/后缀 工作表区分更方便...
  6. 首尾非零正则_常用的17种正则表达式
  7. gson解析天气json_几种常用JSON解析库性能比较
  8. Spring Boot程序无法加载主类解决方法
  9. Visual Studio 2015安装教程(附激活码)
  10. Matlab | Matlab从入门到放弃(3)——函数与画图