词向量BERT及其前辈

BERT(Bidirectional Encoder Representations from Transformers)近期提出之后,作为一个Word2Vec的替代者,其在NLP领域的11个方向大幅刷新了精度,可以说是近年来自残差网络最优突破性的一项技术了。论文的主要特点以下几点:

1.使用了Transformer作为算法的主要框架,Transformer能更彻底的捕捉语句中的双向关系;

2. 使用了Mask Language Model(MLM)和 Next Sentence Prediction(NSP) 的多任务训练目标;

3. 使用更强大的机器训练更大规模的数据,使BERT的结果达到了全新的高度,并且Google开源了BERT模型,用户可以直接使用BERT作为Word2Vec的转换矩阵并高效的将其应用到自己的任务中。

BERT的本质上是通过在海量的语料的基础上运行自监督学习方法为单词学习一个好的特征表示,所谓自监督学习是指在没有人工标注的数据上运行的监督学习。在以后特定的NLP任务中,我们可以直接使用BERT的特征表示作为该任务的词嵌入特征。所以BERT提供的是一个供其它任务迁移学习的模型,该模型可以根据任务微调或者固定之后作为特征提取器。

  1. 网络架构

BERT的网络架构使用的是《Attention is all you need》中提出的多层Transformer结构,其最大的特点是抛弃了传统的RNN和CNN,通过Attention机制将任意位置的两个单词的距离转换成1,有效的解决了NLP中棘手的长期依赖问题。

Transformer的网络架构如图Figure 1所示,Transformer是一个encoder-decoder的结构,由若干个编码器和解码器堆叠形成。图1的左侧部分为编码器,由Multi-Head Attention和一个全连接组成,用于将输入语料转化成特征向量。右侧部分是解码器,其输入为编码器的输出以及已经预测的结果,由Masked Multi-Head Attention, Multi-Head Attention以及一个全连接组成,用于输出最后结果的条件概率。

1.2 输入表示

BERT的输入的编码向量(长度是512)是3个嵌入特征的单位和,如图Figure 2,这三个词嵌入特征是:

这么做的原因是如果句子中的某个Token100%都会被mask掉,那么在fine-tuning的时候模型就会有一些没有见过的单词。加入随机Token的原因是因为Transformer要保持对每个输入token的分布式表征,否则模型就会记住这个[mask]是token ’hairy‘。至于单词带来的负面影响,因为一个单词被随机替换掉的概率只有15%*10% =1.5%,这个负面影响其实是可以忽略不计的。

另外文章指出每次只预测15%的单词,因此模型收敛的比较慢。

1.3.2 Task #2: Next Sentence Prediction

Next Sentence Prediction(NSP)的任务是判断句子B是否是句子A的下文。如果是的话输出’IsNext‘,否则输出’NotNext‘。训练数据的生成方式是从平行语料中随机抽取的连续两句话,其中50%保留抽取的两句话,它们符合IsNext关系,另外50%的第二句话是随机从预料中提取的,它们的关系是NotNext的。这个关系保存在图4中的[CLS]符号中。

BERT的训练在目前的计算资源下很难完成,论文中说BERT-LARGE的训练需要在64块TPU芯片上训练4天完成,而一块TPU的速度约是目前主流GPU的7-8倍。非常幸运的是谷歌开源了各种语言的模型,免去了我们自己训练的工作。

那么有BERT,必然有前身,接下来对BERT涉及到的技术前身做一个总结。

  1. WordPiece 嵌入:WordPiece是指将单词划分成一组有限的公共子词单元,能在单词的有效性和字符的灵活性之间取得一个折中的平衡。例如图4的示例中‘playing’被拆分成了‘play’和‘ing’;
  2. 位置嵌入(Position Embedding):位置嵌入是指将单词的位置信息编码成特征向量,位置嵌入是向模型中引入单词位置关系的至关重要的一环。
  3. 分割嵌入(Segment Embedding):用于区分两个句子,例如B是否是A的下文(对话场景,问答场景等)。对于句子对,第一个句子的特征值是0,第二个句子的特征值是1。
  4. 1.3 预训练任务

    BERT是一个多任务模型,它的任务是由两个自监督任务组成,即MLM和NSP。

    1.3.1 Task #1: Masked Language Model

    Masked Language Model(MLM)和核心思想取自Wilson Taylor在1953年发表的一篇论文。所谓MLM是指在训练的时候随即从输入预料上mask掉一些单词,然后通过的上下文预测该单词,该任务非常像我们在中学时期经常做的完形填空。正如传统的语言模型算法和RNN匹配那样,MLM的这个性质和Transformer的结构是非常匹配的。

    在BERT的实验中,15%的WordPiece Token会被随机Mask掉。在训练模型时,一个句子会被多次喂到模型中用于参数学习,但是Google并没有在每次都mask掉这些单词,而是在确定要Mask掉的单词之后,80%的时候会直接替换为[Mask],10%的时候将其替换为其它任意单词,10%的时候会保留原始Token。

  5. 80%:my dog is hairy -> my dog is [mask]
  6. 10%:my dog is hairy -> my dog is apple
  7. 10%:my dog is hairy -> my dog is hairy

具体看变迁:

要看Sequence-to-Sequence先看RNN:

由RNN(Recurrent Neural Networks)引入LSTMLong Short Term Memory):

在RNNs中,每个输出由当前输入和之前的信息共同决定,这个思路是很巧妙的,但是会带来一个问题:长期依赖的问题

有时我们只需要最近的信息来作为当前预测任务的输入,对于一个语言模型,它要根据前面的单词预测后面的单词,比如这句话:"the clouds are in the sky.",要预测最后一个单词 sky,RNNs 只需要参考最近的几个单词即可。

但是如果需要参考的信息离当前预测任务特别的远,超过了8到10个步长,也就是具有“长期依赖关系”,RNNs 可能就会出现"梯度消失"的问题,就是之前的信息会呈几何级丢失,其保存的信息通常都是短期信息。

反向训练时,RNNs 计算梯度时要横向往前推(因为复合函数求导遵守链式法则),一直往前推到序列开始的地方。当序列非常长时,就会出现梯度消失,也就是前面神经元的权重基本不变,没有训练效果。

当然还是因为链式法则,每一项相乘的偏导数都很大时,RNNs 也会出现梯度爆炸的情况,通常的解决办法就是梯度截断。

长期短期记忆网络(LSTMs)是一种特殊的RNN,它可以解决梯度消失的问题,能轻松地学习到长期依赖的信息。

LSTM有能力向cell状态(即长期记忆)中添加或移除信息,这通过精细调整一种叫阀门的结构来实现。阀门可以让信息有选择地通过。

LSTMs 的内部原理

  1. 遗忘门

          

2.输入门

3.更新门

总结:

1.在RNNs的反向传播中,使用计算梯度调整权重矩阵,由于有很多个偏导数连续相乘,会使网络中的梯度最终变得太小而消失,或者变得太大而爆炸,这使得RNN难以学习长距离的信息。

2.LSTM 中的cell状态(即长期记忆)仅仅需要进行线性求和运算就可以通过隐藏层,梯度可以轻松地在网络间移动,而不会衰减。

3.LSTM 还可以使神经网络在记忆最近的信息和很久以前的信息之间进行切换,让数据自己决定哪些信息要保留,哪些要忘记。

Sequence-to-Sequence:

Sequence-to-Sequence的主要瓶颈是需要将源数据序列的全部内容压缩为一个固定大小的向量,Attention机制则允许encoder回头查看源序列隐藏状态来缓解这一问题。

   Self-Attention机制 :

Attention机制:

attention的通用定义如下:

1.给定一组向量集合values,以及一个向量query,attention机制是一种根据该query计算values的加权求和的机制。

2.attention的重点就是这个集合values中的每个value的“权值”的计算方法。

3.有时候也把这种attention的机制叫做query的输出关注了(或者说叫考虑到了)原文的不同部分。(Query attends to the values)

从定义来看Attention的感性认识:

attention机制就是一种根据某些规则或者某些额外信息(query)从向量表达集合(values)中抽取特定的向量进行加权组合(attention)的方法。也就是从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。聚焦的过程体现在权重系数上,权重越大越聚焦于其对应的value值上。即权重代表了信息的重要性,而value是其对应的信息。

Self-Attention机制:

在没有任何额外信息(query)的情况下,我们仍然可以通过允许句子使用–self attention机制来处理自己,从句子中提取关注信息。

Self-Attention可以捕获同一个句子中单词之间的句法特征或语义特征。

引入Self-Attention后会更容易捕获句子中长距离的相互依赖的特征。因为如果是RNN或LSTM,需要依次序序列计算,对于远距离的相互依赖的特征,要经过若干时间步步长的信息累积才能将二者联系起来,而距离越远,有效捕获的可能性越小。而Self-Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联结起来。所以远距离依赖特征之间的距离被极大缩短,有利于有效利用这些距离。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值