BERT学习笔记(4)——小白版ELMo and BERT

2024-03-14 11:50
文章标签 学习 笔记 bert 白版 elmo

本文主要是介绍BERT学习笔记(4)——小白版ELMo and BERT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

由于我没有读过原论文,该博客写的内容几乎来自于李宏毅老师的BERT课程,链接放在的最后。该博客用于梳理笔记,以便后面复习的时候使用。如果后面读了相关论文或者有了新的理解会进行更改补充。
由于是小白版本的内容,所以不会涉及到任何公式,仅用于理解该模型的作用。

目录

  • 1 ELMo
  • 2 BERT
    • 2.1 Why Encoder?
    • 2.2 BERT如何做pre-train
      • 2.2.1 Masked LM
      • 2.2.2 Next Sentence Prediction
    • 2.3 BERT的下游任务
      • 2.3.1 文本分类任务
      • 2.3.2 token分类任务
      • 2.3.3 两句话分类任务
      • 2.3.4 其他任务
  • 3 GPT
  • 4 参考

1 ELMo

上文中介绍了contextualized word embedding,简单来说就是同样的词在不同的语境中可能会有不同的含义。之前的pre-train model并没有考虑这种情况,而是一个词一个embedding,就导致了在不同的语境环境中表现能力有所欠缺。而contextualized word embedding就可以很好地避免这个问题,给每个token在不同语境中一个embedding,从而使得表达相同意思的时候有相近的embedding。链接如下:BERT学习笔记(3)——self-supervised learning and pre-train model。

ELMo(Embeddings from Language Model)就是contextualized word embedding的pre-train model。ELMo是一个RNN based model(实际上是使用的LSTM,但是LSTM是RNN的变体嘛),其思想就是将一个词语前后的上下文信息编码到该词语的词向量中。其编码的方式就是使用上下文预测下一个出现的词语。由于单个LSTM只能读取目标词语前面或者后面的信息,所以需要双向的LSTM才能够实现读取到目标词语前后的信息:
ELMo_1

对于我们需要预测的 退了 而言,正向的RNN读取到 退了,这时需要预测 退了 通过RNN后会吐出一个向量,这个向量就是正向的LSTM输出的 退了 的向量。反向的LSTM读取到 退了,这时需要预测 潮水退了 通过RNN后会吐出一个向量,这个向量就是反向的LSTM输出的 退了 的向量。接着将正向与反向的 退了 的向量拼接在一起,就得到了 退了 的embedding。

但是由于ELMo有很多层双向LSTM,每一层都会输出一个拼接的 退了 的向量,所以需要考虑如何取舍这些向量。
ELMo_2
在ELMo中,对这群向量的做法是,将每一层输出的向量乘上不同的权重后再加起来作为这个词的embedding。
ELMo_3
这个权重是与下游任务放到一起训练的。右图是论文中在不同下游任务上对这个权重的大小的一个可视化。也就体现了在不同的下游任务中,不同层输出的权重是不同的。

但是ELMo有个很大的问题,就是尽管使用了双向LSTM,能够读到目标词语的上文与下文,但是针对单向LSTM是无法读取到下一部分的信息的(就是正向LSTM在预测目标词语时无法读取到后文,反向LSTM在预测目标词语时读取不到上文)。而这个问题BERT就解决了。

2 BERT

BERT (Bidirectional Encoder Representations from Transformers)就解决了ELMo中单个模块无法通读全文的问题。

BERT是一个自监督的模型,无需任何标注数据就可以自己学习。其实质就是一个Transformer的Encoder,输入一个sequence,输出一堆embeddings。
BERT_1
在处理中文的时候,大家习惯性的操作可能是jieba分词等工具先将一句话给分词后再输入到model中,但是这样做有个问题就是中文中词语的数量是很多的,就会导致向量空间很大。所以输入的话可以有效缓解这个问题。

2.1 Why Encoder?

那么再说到为何要使用Encoder,由于刚刚也提到说ELMo的单个模块无法通读全文,但是self-attention却可以。在self-attention中,token与token之间的位置差异就被抹除了(在不考虑positional encoding的情况下),而且对于模型而言,可以一次性的读取到一个sequence的内容。而Encoder中正好就用的是Multi-Head attention,就解决了这个问题。

2.2 BERT如何做pre-train

接着就是BERT是如何做预训练。由于BERT是个自监督模型,那么肯定需要针对输入的数据生成训练数据与标签。其任务与ELMo差不多,只不过ELMo是通过上文预测下一个文本,而BERT则有两种任务。

2.2.1 Masked LM

BERT预训练的第一个任务叫Masked LM,就是输入一堆文本,将其中部分词汇给抠掉(文章中是15%),根据上下文来预测这个抠掉的词是啥。这个抠的方式有很多,比如直接替换为一个[MASK]标签,或者换成另外一个错误的字,再或者不做任何操作。

Google并没有在每次都mask掉这些单词,而是在确定要Mask掉的单词之后,80%的时候会直接替换为[Mask],10%的时候将其替换为其它任意单词,10%的时候会保留原始Token[1]。

  • 80%:my dog is hairy -> my dog is [mask]
  • 10%:my dog is hairy -> my dog is apple
  • 10%:my dog is hairy -> my dog is hairy

Masked LM
经过BERT后,需要预测的token会吐出一个vector,将其输入到一个线性分类器里面,预测这个位置出现的token的概率。再将这个概率与之前掩盖的时候的ground truth作交叉熵得出损失。这里需要注意两个点:

  1. 由于分类器是线性的,所以需要BERT吐出很好的representation;
  2. 为何是个多分类器?这是因为输出的结果是整个词表中出现的词的概率,经过softmax后提取出其中概率值最大的那个数,所以是个多分类任务。

其实在这方面,BERT和CBOW挺像的,只不过一个用的是self-attention看的整句话,而CBOW只有一个滑动窗口。这毕竟也受限于当年的计算力不够。

2.2.2 Next Sentence Prediction

BERT除了Masked LM以外,还在预训练的时候有另外一个操作:Next Sentence Prediction(两者是同步进行的,虽然后面论文证明了Next Sentence Prediction是没啥效果的)。其核心就是将两句话拼接在一起,中间用一个[SEP]标签分隔,句首再用一个[CLS]标签做分类。由于训练语料中可以明确知道两句话是不是上下句,所以可以很容易得出Ground Truth。而BERT训练的就是判断两句话是否是连贯的,如果连贯,那么[CLS]在经过一个线性二分类器后,输出YES,否则输出NO
Next Sentence Prediction

2.3 BERT的下游任务

2.3.1 文本分类任务

这类任务主要就是给输入的文本一整个标签,比如情感分析是给整个输入一个积极、消极、中性等标签。

其使用方式就是在文本前加入一个[CLS]标签,这个标签经过BERT后的输出放入到一个线性的分类器中,输出类别。这个线性分类器是随机初始化的,需要进行训练,而训练过程中可以对BERT的参数进行微调。
How to use BERT_1

2.3.2 token分类任务

token分类任务和之前的任务类似,只是说之前的文档分类只需要对[CLS]标签做分类,而token分类是需要对每一个token做分类。
How to use BERT_2

2.3.3 两句话分类任务

这个任务主要就是将两句话放在一起,对两句话做一个分类任务。就比如NLI任务,给定前提,给定假设,判断假设是否正确。其和第一个任务类似,只不过是两句话而已。
How to use BERT_3

2.3.4 其他任务

由于其他任务不是我的研究方向,所以这里不多赘述,如果有兴趣可以看下面的链接。

3 GPT

GPT (Generative Pre-Training)这里顺带提一句,为什么说顺带,主要是因为这东西毕竟太庞大了,也不是我们这种穷人用得起的,大概了解下就好了……

BERT是Encoder,而GPT则是Decoder,其任务就是输入上文,预测下文。其Decoder就是采用的Masked Multi-Head Self-attention,输入的时候是看不到后文的。
GPT

4 参考

[1] 大师兄. 词向量之BERT[EB/OL]. (2021-04-09)[2021-09-01]. https://zhuanlan.zhihu.com/p/48612853
[2] 越前小龙马. 李宏毅-BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, and more[EB/OL]. (2020-05-07)[2021-09-01]. https://www.bilibili.com/video/BV1eV411d7Kp?p=1
[3] zxx88880. 台大教授 李宏毅 bert[EB/OL]. (2019-07-05)[2021-09-01]. https://www.bilibili.com/video/BV1C4411A78Z?from=search&seid=12011319225852042827
[4] 爱学习的凉饭爷. 李宏毅机器学习2021课程 《自监督学习》合集 从芝麻街开始的故事[EB/OL]. (2021-04-17)[2021-09-01]. https://www.bilibili.com/video/BV1Gf4y1p7Yo?p=1

这篇关于BERT学习笔记(4)——小白版ELMo and BERT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/808344

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在