半小时掌握Bert模型

欢迎关注公众号K的笔记阅读博主更多优质学习内容
K的笔记公众号

自然语言处理通用解决方案

  1. 需要熟悉 word2vec,RNN 网络模型,了解词向量如何建模
  2. 重点在于 Transform 网络架构,BERT训练方法,实际应用
  3. 开源项目都是现成的,提供预训练模型,基本任务拿过来直接用就成

Bert 核心原理

Transformer结构是谷歌大脑在2017年底发表的一篇论文 Attention is All You Need 中提出的一种语言结构,是一种 Seq2Seq 的模型,Bert 就是从 Transformer 中衍生出来的一种预训练的语言模型。

BERT的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder,因为Decoder是不能获要预测的信息的。模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。

1 Transformer 直观理解


1.1 Transformer做了啥

  1. 其基本组成仍是机器翻译中常见的Seq2Seq网络,也就是类似输入一串中文,输出对应的英文。
  2. 传统架构中,中间的网络设计就是一个RNN,但是RNN不能并行计算,比如输入 x 0 , x 1 , . . . x n x_0,x_1,...x_n x0,x1,...xn一串字符串,RNN会处理 x 0 x_0 x0得到一个当前输出 h 0 h_0 h0和一个隐藏特征,然后 x 1 x_1 x1 x 0 x_0 x0不是独立的,会用到前面一个隐藏特征,也就是每个下一步都会用到前面的中间结果,因此我们在计算过程中不能独立计算。这就是RNN的问题,没办法做并行计算。Transformer 能做并行计算。
  3. 实际任务中我们对每个词不是一视同仁的,对重要程度不够高的词随便看看就好,对重要程度较高的词需要多关注一下 —— Transformer结构中使用 Self-Attention 机制。其输出结果是同时被计算出来的,而不是RNN中一步输出一个结果。
  4. 传统的 word2vec表达向量时在不同语境下相同的词无法改变,也就是预训练好的向量永久不变,但实际任务中会需要用到一个词的不同语义表示。
  5. Transformer使用位置嵌入(positional encoding)来理解语言的顺序

1.2 Attention是啥意思呢?

比较两个句子:

  1. The animal didn’t cross the street because it was too tired.
  2. The animal didn’t cross the street because it was too narrow.

我们要让计算机识别这两个it具体指代的是animal还是street,我们考虑对it编码时,前后文各个词在该编码中所占的比例,也就是要把上下文语境融入到当前计算的词向量中,这就是self-attention。

大概长得像这样:

在这里插入图片描述

Self-attention is the method the Transformer uses to bake the “understanding” of other relevant words into the one we’re currently processing.


2 Transformer 架构分析

我们从整体层面来看,输入一个句子,经过Transformer处理后,输出另一个句子:

在这里插入图片描述


把Transformer稍微拆开一点,我们看到了句子输入后先由Encoder处理,经过某些转换,再由Decoder输出:

在这里插入图片描述


事实上,中间的Encoder-Decoder可能是由更多的Encoders-Decoders拼接起来的,看起来像这样:

在这里插入图片描述


每一个Encoder都是独立的,训练的时候权重参数可能完全不同,每一个Encoder都被分为两个子模块 ——— Self-Attention和前馈神经网络。

在这里插入图片描述


使用Embedding Algorithm将每个单词转化为词向量:

在这里插入图片描述


然后把词向量依次流入两个组件中,输出向量作为下一个Encoder的输入向量

在这里插入图片描述
在这里插入图片描述

3 细看Self-Attention机制

第一步:对每个单词进行计算得到Queries,Keys,Values三个向量

在这里插入图片描述


第二步:使用单词A的Queries与单词A、C、D…的Keys计算出单词A与单词A、B、C、D…的相关程度,这个相关程度决定了我们编码该单词时需要考虑其他单词的比例:

在这里插入图片描述


第三步:将上面得到的Score除以向量的维度(为了让梯度更稳定),Softmax规范化转化为概率:

在这里插入图片描述


第四步:将该单词对应的每个单词的Softmax值分别乘上每个单词的Value,加和得到最终结果:

在这里插入图片描述


4 一点说明

ADDITION1:事实上上面的操作我们可以向量化表示,这样我们就实现了前面说的效率更高的并行计算:

在这里插入图片描述

ADDITION2:我们可以用一个公式概括上面的步骤:

在这里插入图片描述

ADDITION3: Mulit-head attention:

在这里插入图片描述

ADDITION4:总结图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值