[笔记] ELMO, BERT, GPT 简单讲解 – 李宏毅

国内视频地址:https://www.bilibili.com/video/BV17441137fa/?spm_id_from=333.880.my_history.page.click&vd_source=bda72e785d42f592b8a2dc6c2aad2409

1 NLP 基础

1.1 词的表示过程演进:

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

  • one-hot 编码
  • 词袋模型
  • word embedding

1.2 multiple sense

1)明确两个概念:token 和 type
  • type:形式
  • token:含义

例如 bank 有很多不同的(token)含义(银行、河岸等),但它们都有着相同的(type)形式。

2)考虑到上面的问题,现在的 embedding 做法是为每个 token 提供一个 word embedding

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

然后具有相近语义的 token 也具有较为接近的 embedding 距离。

1.3 如何 embedding

1)基于 RNN 的 ELMO

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

最终我们取 hidden layer 层的向量做为 token 的 embedding。
或者更进一步,通过 weight 将所有的输出进行加权求和:

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

2)基于 Bert

Bert 基于 Transformer,关于 transformer 可以参考:

bert 的原理可能无法一直记得很清楚,但我们只需要记得 bert 的作用,简单来说可以理解为 transformer 中的 encoder,给定一个句子(或词汇),输出该句子(或词汇)的 embedding 表示:

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

注意:这里图片中中文的例子是用“词”作为输入,但是更推荐用中文的 “字”作为输入,因为中文的“字”是有限的,而“词”理论上是无穷的,这会导致编码空间非常大。

2 BERT 介绍

2.1 背景

可以参考上面 1.3 节 2)。

2.2 如何训练 Bert

1)方法一:Masked Language Model(Masked LM)

采用对输入进行 mask 让其重建来训

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

  • 将输入的某个词 mask 掉,然后取其输出 embedding,丢入一个 multi-class classifier 中,要求其预测出现在被 mask 掉的那个词汇是哪个词汇
  • 由于 linear classifier 的分类能力较弱,所以 BERT 就需要输出一个表征能力比较好的 embedding,这样就巧妙的获取了对特定词的良好的 embedding
  • 另一个好处是相似的词,在这种训练框架下,也能获得距离较近的 embedding 表征
2)方法二:Next sentence Prediction

采用预测两个句子是否能连成一个句子

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

  • 在两个句子间加一个特殊符号 [SEP] 标识告诉模型这是两个句子
  • 在开头加一个特殊符号 [CLS] 告诉模型接下来做的是分类任务,就是预测是否能组成一个句子
    这里注意:由于 BERT 的内部是 transformer 架构,使用 self-attention 机制使得任意两个输入向量之间的距离是一样的,所以任务标识可以放在开头。如果单向 RNN 结构,则需要放在末尾。
  • 同上一节一样,linear classifier 的分类能力有限,这也会促使 BERT 去产生更好的 embedding
3)小结

通常情况下,上面这两种方式在训练 BERT 时是一起使用的,让 BERT 同时去解这两个任务时,它会学的更好。

2.3 How to use Bert

在 BERT 的论文中,作者其实时将 BERT model 模块本身和下游任务一起训练的(当然 bert 大部分情况下都是 fine-tune),为此举了四个例子来展示如何实现训练和使用

1)case 1:sentence classification

输入:句子
输出:预测类别

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

  • 下游任务是文本分类,由 Linear Classifier 模块表示,这个部分是通过随机初始化参数,从头开始学的
  • 文本表征(embedding)模块主要就是 BERT,这部分是 Fine-tune 形式参与训练的
2)case 2:each word insentence classification

输入:句子
输出:句子中每个词的预测类别

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

  • Linear Cls 是下游任务模块,从头训
  • Bert 采用 fine-tune 方式
  • 训练时需要给定当前句子 以及 当前句子中每个词的类别
3)case 3:Nature Language Inference(推理)

输入:两个句子,一个作为前提(A),一个作为假设结论(B)
输出:预测类别,即判断以 A 作为前提的情况下,B 假设是否成立(T、F or unknown)

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

  • sentence 1 作为 premise,采用 [SEP] 与 sentence 2 作为 hypothesis 分隔开;
  • 第一个位置用于 CLS;
4)case 4:Extraction-base Question(抽取文章用于回答,QA)

先介绍这个 case 吧:

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

通常情况下,这类问题期望我们输入一篇文章给 Model,然后根据我们的 question 由 model 抽取出答案。

注意:这里面有个限制就是 answer 是要在文章中出现过的,比如上图第一个问题的回答 gravity 就在文章中出现过。

这个问题的结构化表示如上图,定义文章 Document 由一系列 token 组成(\(\{d_1, d_2, ..., d_N\}\)),其中 \(d_i\)即表示第 i 个 token,同理问题 Query 也用此方式表示。

接下来,我们将 D 和 Q 作为输入送入 Model,模型会输出来两个整数 s、e,分表代表回答内容在 Document 中的起始位置。例如上面第一个问题,答案 gravity 在 D 中的位置区间就是 17-17(第17个单词到第17个单词)。

那么,BERT 中如何解这个问题呢?

  1. 首先,将 question 和 document 拼接作为 BERT 的输入
  2. 接两个网络层分别产出两个向量(下图中红色、蓝色),这两个向量和 BERT 输出的 embedding 向量具有相同的 size
  3. 先将红色向量与 document 中每个输出 token 进行点乘(dot product),结果过 softmax,得到每个 token 的概率表征,取其中最大的作为 s 输出(例如图1中第二个 token 的概率最大,所以 s=2)
  4. 再将蓝色向量与 document 中每个输出 token 进行点乘,过 softmax 后,取概率最大的位置作为 e 的输出
  5. 最后的答案就由 s、e 来进行定位

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

  • s、e 任务的点乘向量与 token 的 Embedding 向量维度一致
  • 如果 s、e 不满足正常情况(s<=e),此种情况作为“此题无解”输出
  • Bert 采用 fine-tune,红、蓝向量从头开始训

2.4 for chinese:ERNIE

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

ERNIE 是为中文设计的 BERT,其采用的训练方式有一点不一样,因为 BERT 采用对单个 字 进行 mask,但这在中文中是很容易被猜出来的,所以其采用了 mask 词 的方式进行训练。

这里只是提一嘴,更具体的还是看论文吧:https://arxiv.org/abs/1904.09223

2.5 BERT 每层的侧重

常用 Bert 为 24 层,nlp 任务其实是一个 pipiline 任务,从语言学的角度上来说,对一个句子的分析通常包含词法分析、语法分析、语义分析等过程,这张图就展示了在不同任务上,Bert 的不同层所占的权重大小(也即哪些层的输出在这些特定任务上的表现更好):

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

这启发我们,可以根据 nlp 任务的不同特性来选择使用 bert 不同层抽象出来的 token embedding 进行使用,例如对于 POS 任务来说,第 11-13 层的权重较大,其 hidden embedding 效果较好。

3 GPT-2

Generative Pre-Training(GPT)本质上就是一个巨大无比的 language model,其底层采用的是 transformer 的 Decoder 模块。

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

3.1 GPT 的训练

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

  • 训练模式和 bert 类似,输入一个句子的开始标志 、当前词汇,预测下一个词汇
  • 每个词汇过 self-attention,其 query 输出和前面的词的 key 输出做权重计算,同时也和自己的 key 做权值计算,最后将所有计算结果做 sum。注意这里通常是过好几层 self-attention 层,猜得到最终的输出,最终的输出其实是一个 embedding。

3.2 zero-shot

GPT 是非监督学习,采用 zero-shot 方式进行训练。即使是在这种缺失监督信息的情况下,仍然能奇迹般的泛化出对某些任务的解题能力,这是比较神奇的。

[笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅

  • Reading Comprehension:只通过输入文章表征、query 表征,然后接上 "A:" 提示标志,GPT 就会自动的给出该 query 的回答,上图折线是不同参数(横轴)下 GPT 的 F1(纵轴)指标效果;
  • Summarization:类似的,给出文章表征和特定 "TL;DR:" 提示标志,就会得到摘要;
  • Translation:给出前两个如上图所述的范式,再给出第三行范式,就会自动的得到对应的法语翻译结果(但是这个任务的效果很差);

原文链接:https://www.cnblogs.com/zishu/p/17363205.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:[笔记] ELMO, BERT, GPT 简单讲解 – 李宏毅 - Python技术站

(0)
上一篇 2023年4月30日
下一篇 2023年4月30日

相关文章

  • A Neural Algorithm of Artistic Style 图像风格转换 – keras简化版实现

    前言 深度学习是最近比较热的词语。说到深度学习的应用,第一个想到的就是Prisma App的图像风格转换。既然感兴趣就直接开始干,读了论文,一知半解;看了别人的源码,才算大概了解的具体的实现,也惊叹别人的奇思妙想。 声明 代码主要学习了【titu1994/Neural-Style-Transfer】的代码,算是该项目部分的简化版或者删减版。这里做代码的注解和…

    2023年4月8日
    00
  • 【机器学习】李宏毅——卷积神经网络CNN

    【机器学习】李宏毅——卷积神经网络CNN,讲解了其过程和原理 CNN我们可以从两个角度来理解其中的具体过程 Neuron Version Story(解释版本1) 对于图像分类,其具体的流程如下所示: 将一张图像作为模型的输入,输出经过softmax之后将与理想向量用交叉熵的形式进行比较。那么如何将图片作为模型的输入呢? 实际上每张图片都是三维的张量,两维表…

    2023年4月6日
    00
  • Caffe Ubuntu14.04 64位 的最快安装 (cuda7.5 + cudnn7.0 2016最新)

    最近因为各种原因,装过不少次Caffe,安装过程很多坑,为节省新手的时间,特此总结整个安装流程。 关于Ubuntu 版本的选择,建议用14.04这个比较稳定的版本,但是千万不要用麒麟版!!!比原版体验要差很多!!! Caffe的安装过程,基本采纳 这篇文章 然后稍作改动,跳过大坑。 Caffe + Ubuntu 14.04 64bit + CUDA 6.5 …

    2023年4月8日
    00
  • caffe学习记录(六) MobileNet fine tune

    记录在unbantu14.04, caffe框架下对MobileNet的自有数据集fine tune。 首先git clone一下caffe版本的mobilenet   https://github.com/shicai/MobileNet-Caffe.git   然后把deploy.prototxt文件修改一下 Modify deploy.prototxt…

    2023年4月8日
    00
  • pytorch1.0神经网络保存、提取、加载

    pytorch1.0网络保存、提取、加载 import torch import torch.nn.functional as F # 包含激励函数 import matplotlib.pyplot as plt # 假数据 x = torch.unsqueeze(torch.linspace(-1,1,100),dim=1) # x data (tenso…

    PyTorch 2023年4月6日
    00
  • 目标检测总结:RCNN系列(2)

    目标检测总结:RCNN系列(2) RPN 上一篇介绍了RCNN和Fast RCNN,本文介绍RCNN系列的终极版本,FasterRCNN。Faster RCNN虽然是2015年的论文,但它至今认识许多目标检测算法的基础。FasterRCNN可以看做是RPN(region proposal network) + fast RCNN的系统,用RPN代替了之前的s…

    2023年4月8日
    00
  • Pytorch自动求解梯度

    要理解Pytorch求解梯度,首先需要理解Pytorch当中的计算图的概念,在计算图当中每一个Variable都代表的一个节点,每一个节点就可以代表一个神经元,我们只有将变量放入节点当中才可以对节点当中的变量求解梯度,假设我们有一个矩阵: 1., 2., 3. 4., 5., 6. 我们将这个矩阵(二维张量)首先在Pytorch当中初始化,并且将其放入计算图…

    PyTorch 2023年4月8日
    00
  • 深度学习卷积网络中反卷积/转置卷积的理解 transposed conv/deconv

    搞明白了卷积网络中所谓deconv到底是个什么东西后,不写下来怕又忘记,根据参考资料,加上我自己的理解,记录在这篇博客里。 先来规范表达 为了方便理解,本文出现的举例情况都是2D矩阵卷积,卷积输入和核形状都为正方形,x和y轴方向的padding相同,stride也相同。 记号:  。 推翻错误的理解 第一次看到deconv这个词,以为deconv的结果就是卷…

    2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部