BERT |(1)BERT的先修--Transformer

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


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


二、Transformer

Transformer的基本组成依旧是机器翻译模型中常见的Seq2Seq网络。输入输出都很直观,其核心架构就是中间的网络设计了。至于具体是如何设计的,请往下看

2.1 RNN 

根据下面的传统RNN的模型框架可知,该模型在计算的时候,无法很好的进行并行运算。

于是,Transformer使用Self-Attention机制来进行并行计算,在输入和输出都相同的时候,输出结果是同时被计算出来的,现在基本已经取代RNN了。

2.2 Word2vec

这个东西恐怕没人不熟悉吧?2013年Google的word2vec一出,让NLP各个领域遍地开花,一时间好像不用上预训练的词向量都不好意思写论文了。

模型

显然就是一个“线性”语言模型。既然我们的目标是学习词向量,而且词向量在语义上要支持一些”线性的语义运算“,如”皇帝-皇后=男-女“(忽略武则天),那么使用一个线性模型自然足够了,跑的又快又能完成任务,非常优雅。此外,这里还应该提到一个负采样的思想方法,这个思想,也被应用到了后面的bert里面。

负采样

由于训练词向量模型的目标不是为了得到一个多么精准的语言模型,而是为了获得它的副产物——词向量。所以要做到的不是在几万几十万个token中艰难计算softmax获得最优的那个词(就是预测的对于给定词的下一词),而只需能做到在几个词中找到对的那个词就行,这几个词包括一个正例(即直接给定的下一词),和随机产生的噪声词(采样抽取的几个负例),就是说训练一个sigmoid二分类器,只要模型能够从中找出正确的词就认为完成任务。

这种负采样思想也应用到之后的BERT里,只不过从word-level变成sentence-level,这样能获取句子间关联关系。

不过传统的word2vec的缺点在于,无法解决词义消歧的问题,以及上下文无关的问题。至于,后面的bert要如何去优化这一个问题,继续往下看。

扩展阅读:从word2vec到bert:NLP预训练模型发展史

2.3 Transformer

首先,我们来看看Transformer的整体架构:

 

针对以上的框架,我们需要明白一下几个问题:

1、输入如何编码?
2、输出结果是什么?
3、Attention的目的?
4、怎样组合在一起?

首先,我们通过前面的阅读知道,Transformer是一个seq2seq的结构,所以简单的回答就是,输入是一个序列,输出也是一个序列。但是,对于输入的数据,我们的关注点(attention)是什么?我们如何才能让计算机关注到这些有价值的信息?这里就提出一个self-attention的概念。

self-attention

假设我们想用机器翻译的手段将下面这句话翻译成中文:

“The animal didn’t cross the street because it was too tired”

“The animal didn’t cross the street because it was too wide”

当机器读到“it”时,“it”代表“animal”还是“street”呢?对于人类来讲,这是一个极其简单的问题,但是对于机器或者说算法来讲却十分不容易。

self-Attention则是处理此类问题的一个解决方案,当模型处理到“it”时,self-Attention可以将“it”和“animal‘联系到一起。

它是怎么做到的呢?

通俗地讲,当模型处理一句话中某一个位置的单词时,self-Attention允许它看一看这句话中其他位置的单词,看是否能够找到能够一些线索,有助于更好地表示(或者说编码)这个单词。

嗯,具体的解释就是上面所讲的attention是输入对输出的权重,例如在上文中,是I am a student 对学生的权重。self-attention则是自己对自己的权重,例如I am a student分别对am的权重、对student的权重。之所以这样做,是为了充分考虑句子之间不同词语之间的语义及语法联系。
 

self-attention的计算

原博客地址

了解过注意力机制的都知道Q,K,V,在self-attention中,Q,K,V是相同的字嵌入X乘以训练得到的权重得到的。

在这里插入图片描述

它也符合注意力机制的计算过程,主要分为以下三部分计算

阶段一
对输入的单词进行词嵌入得到X,X分别与权重计算得到了Q(查询向量),K(键向量),V(值向量)

得到Q,K,V之后,再计算得分,假设我们在为这个例子中的第一个词“Thinking”计算自注意力向量,我们需要拿输入句子中的每个单词对“Thinking”打分。这些分数决定了在编码单词“Thinking”的过程中有多重视句子的其它部分。

阶段一


阶段二
除以8(8是指论文中使用的键向量维数64的平方根,作用是让梯度更加稳定)。

然后通过softmax进行归一化,得到的数都是正数且和为1

归一化

这里的softmax分数决定了每个单词对编码当下位置(‘thinking’)的贡献。

阶段三
softmax求得分数乘以值向量,作用是,关注与Q相关的单词,而弱化不相关的单词。

然后进行加权求和。

阶段三


通过矩阵运算实现注意力机制
X是词嵌入矩阵,W是权重矩阵(训练得到),

在这里插入图片描述
处理矩阵,计算注意力的输出

在这里插入图片描述

补充:

Multi-head attention

 

按照论文以及经验来说,一般最多做8个头。

以下,根据李宏毅的讲义,举一个2个头的计算方法:

在这里插入图片描述

在这里插入图片描述

 

堆叠多层

 

原论文堆叠了6层。

位置信息表达

残差连接和归一化

解码器

解码器的架构类似,但它在第2阶段采用了附加层, 在输出层上的 mask multi-head attention:

1. Stage 1 – 输入解码: 输入 output embedding,偏移一个位置以确保对位置i的预测仅取决于< i的位置。

2. Stage 2 - Masked Multi-head attention: 需要有一个mask来防止当前位置i的生成任务看到后续> i位置的信息

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值