详解BERT

理解BERT

本文是看了大神的博客,深有感悟,因此在此过一遍加深印象,在本文的最后有原文链接,希望对大家有所帮助.
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/jiaowoshouzi/article/details/89073944

1.NLP发展史

  1. 2001 - Neural language models(神经语言模型)
  2. 2008 - Multi-task learning(多任务学习)
  3. 2013 - Word embeddings(词嵌入)
  4. 2013 - Neural networks for NLP(NLP神经网络)
  5. 2014 - Sequence-to-sequence models
  6. 2015 - Attention(注意力机制)
  7. 2015 - Memory-based networks(基于记忆的网络)
  8. 2018 - Pretrained language models(预训练语言模型)

2001 -(神经语言模型)

第一个神经语言模型是Bengio等人在2001年提出的前馈神经网络.

这个模型将从表C中查找到的n个单词作为输入向量表征.这种向量被现在的学者们称作"词嵌入".这些词嵌入级联后被输入到一个隐藏层中,该隐藏层的输出又被输入到softmax层.
语言建模通常是应用RNN时的第一步,是一种非监督学习形式.尽管它很简单,但却是本文后面讨论的许多技术发展的核心.
(1)词嵌入:word2vec的目标是简化语言建模.
(2)sequence-to-sequence 模型:这种模型通过一次预测一个单词生成一个输出序列.
(3)预训练语言模型:这种方法使用来自语言模型的表述进行迁移学习.

2008-多任务学习

多任务学习是在多个任务上训练的模型之间共享参数的一种通用方法.在神经网络中,可以通过给不同层施以不同的权重,来很容易的实现多任务学习.多任务学习的概念最初由Rich Caruana 在1993年提出,并被应用于道路跟踪和肺炎预测(Caruana,1998)。直观的说,多任务学习鼓励模型学习对许多任务有用的表述.这对于学习一般的,低级的表述形式,集中模型的注意力,或在训练数据有限的环境中特别有用.
在2008年,Collobert 和 Weston 将多任务学习首次应用于 NLP 的神经网络。在他们的模型中,查询表(或单词嵌入矩阵)在两个接受不同任务训练的模型之间共享,如下面的图所示。
在这里插入图片描述

2013-词嵌入

用稀疏向量表示文本,即所谓的词袋模型在NLP有着悠久的历史.正如上文中介绍的,早在2001年就开始使用密集向量表示词或词嵌入.Mikolov等人在2013年提出的创新技术是通过去除隐藏层,逼近目标,进而使这些单词嵌入的训练更加高效.虽然这些技术变更本质上很简单,但他们与高效的word2vec配合使用,便能使大规模的词嵌入训练成为可能.
word2vec有两种风格,如下面的图所示:连续字袋 CBOW 和 skip-gram。不过他们的目标不同:一个是根据周围的单词预测中心单词,而另一个则相反.
虽然这些嵌入在概念上与使用前馈神经网络歇息的嵌入在概念上没有区别,但是在一个非常大的语料库上训练之后,他们就能捕获诸如性别,动词时态和国家-首都关系等单词之间的特定关系.

2013 - NLP 神经网络

2013年和2014年是NLP问题开始引入神经网络模型的时期.使用最广泛的三种主要的神经网络是:循环神经网络,卷及神经网络和递归神经网络.
循环神经网络:循环神经网络是处理NLP中普遍存在的动态输入序列的一个最佳的技术方案.
卷积神经网络:卷积神经网络本来是广泛应用于计算机视觉领域的技术,现在也开始应用于语言.文本的卷积神经网络只在两个维度上工作,其中滤波器只需要沿着时间维度移动.
卷积神经网络的一个优点是它们比 RNN 更可并行化,因为其在每个时间步长的状态只依赖于本地上下文(通过卷积运算),而不是像 RNN 那样依赖过去所有的状态。使用膨胀卷积,可以扩大 CNN 的感受野,使网络有能力捕获更长的上下文(Kalchbrenner等,2016)。CNN 和 LSTM 可以组合和叠加(Wang等,2016),卷积也可以用来加速 LSTM(Bradbury等, 2017)。
递归神经网络:RNN 和 CNN 都将语言视为一个序列。然而,从语言学的角度来看,语言本质上是层次化的:单词被组合成高阶短语和从句,这些短语和从句本身可以根据一组生产规则递归地组合。将句子视为树而不是序列的语言学启发思想产生了递归神经网络.
递归神经网络从下到上构建序列的表示,这一点不同于从左到右或从右到左处理句子的 RNN。在树的每个节点上,通过组合子节点的结果来计算新的结果。由于树也可以被视为在 RNN 上强加不同的处理顺序,所以 LSTM 自然地也被扩展到树上.

2014-sequence-to-sequence 模型

2014 年,Sutskever 等人提出了 sequence-to-sequence 模型。这是一个使用神经网络将一个序列映射到另一个序列的通用框架。在该框架中,编码器神经网络逐符号处理一个句子,并将其压缩为一个向量表示;然后,一个解码器神经网络根据编码器状态逐符号输出预测值,并将之前预测的符号作为每一步的输入.

2015- 注意力机制

注意力机制是神经网络机器翻译(NMT)的核心创作之一,也是使NMT模型胜过经典的基于短语的MT系统的关键思想.sequence-to-sequence模型的主要瓶颈是需要将源序列的全部内容压缩为一个固定大小的向量.注意力机制通过允许解码器回头查看源序列隐藏状态来缓解这一问题,然后将其加权平均作为额外输入提供给解码器.
注意力机制有很多不同的形式.这里有一个简短的概述,注意力机制广泛试用于任何需要根据输入的特定部分做出决策的任务,并且效果不错.它已经被应用于一致性解析,阅读理解和一次性学习等诸多领域.输入甚至不是一个序列,即可以包含其他表示,如图像字幕.

2015-基于记忆的网络

注意力机制可以看做是模糊记忆的一种形式.记忆由模模型的隐藏状态组成,模型选择从记忆中检索内容.
记忆的访问通常基于与当前状态的相似度,类似于注意力,通常可以写入和读取。模型在如何实现和利用内存方面有所不同。例如,端到端记忆网络多次处理输入,并更新记忆以实现多个推理步骤。神经图灵机也有一个基于位置的寻址,这允许他们学习简单的计算机程序,如排序。基于记忆的模型通常应用于一些特定任务中,如语言建模和阅读理解。在这些任务中,长时间保存信息应该很有用。记忆的概念是非常通用的:知识库或表可以充当记忆,而记忆也可以根据整个输入或它的特定部分填充。

2018-预训练语言模型

预训练的词嵌入与上下文无关,仅用于初始化模型中的第一层.一系列监督型任务被用于神经网络的预训练.相反,语言模型只需要无标签的文本.因此,训练可以扩展到数十亿个tokens, new domains, new languages。预训练语言模型于 2015 年被首次提出(Dai & Le,2015);直到最近,它们才被证明在各种任务中效果还是不错的。语言模型嵌入可以作为目标模型中的特征(Peters等,2018),或者使用语言模型对目标任务数据进行微调(Ramachandranden等,2017; Howard & Ruder,2018)。添加语言模型嵌入可以在许多不同的任务中提供比最先进的技术更大的改进,如下面的图所示。
预训练的语言模型已经被证明可以用更少的数据进行学习。由于语言模型只需要无标记的数据,因此对于标记数据稀缺的低资源语言尤其有用。

2.BERT:一切过往, 皆为序章

Attention机制讲解

attention是一种能让模型对重要信息重点关注并充分学习吸收的技术,它不算是一个完整的模型,应当是一种技术,能够作用于任何序列模型中.

Seq2Seq

在开始讲解Attention之前,我们先简单回顾一下Seq2Seq模型,传统的机器翻译基本都是基于Seq2Seq模型来做的,该模型分为encoder层与decoder层,并均为RNN或RNN的变体构成.
在ecode阶段,第一个节点输入一个词,之后的节点输入的是下一个词与前一个节点的hidden state,最终encode会输出一个context,这个context又作为decoder的输入,每经过一个decoder的节点就输出一个翻译后的词,并把decoder的hidden state作为下一层的输入。该模型对于短文本的翻译来说效果很好,但是其也存在一定的缺点,如果文本稍长一些,就很容易丢失文本的一些信息,为了解决这个问题,Attention应运而生。

attention

Attention,正如其名,注意力,该模型在decode阶段,会选择最适合当前节点的context作为输入。Attention与传统的Seq2Seq模型主要有以下两点不同。
1)encoder提供了更多的数据给到decoder,encoder会把所有的节点的hidden state提供给decoder,而不仅仅只是encoder最后一个节点的hidden state。
2)decoder并不是直接把所有encoder提供的hidden state作为输入,而是采取一种选择机制,把最符合当前位置的hidden state选出来,具体的步骤如下:
确定哪一个hidden state与当前节点关系最为密切;
计算每一个hidden state的分数值(具体怎么计算我们下文讲解);
对每个分数值做一个softmax的计算,这能让相关性高的hidden state的分数值更大,相关性低的hidden state的分数值更低;

BERT原理详解

从创新的角度来看,bert其实并没有过多的结构方面的创新点,其和GPT一样均是采用的transformer的结构,相对于GPT来说,其是双向结构的,而GPT是单向的,如下图所示:
在这里插入图片描述
elmo:将上下文当作特征,但是无监督的语料和我们真实的语料还是有区别的,不一定的符合我们特定的任务,是一种双向的特征提取。
openai gpt就做了一个改进,也是通过transformer学习出来一个语言模型,不是固定的,通过任务 finetuning,用transfomer代替elmo的lstm。
openai gpt其实就是缺少了encoder的transformer。当然也没了encoder与decoder之间的attention。
openAI gpt虽然可以进行fine-tuning,但是有些特殊任务与pretraining输入有出入,单个句子与两个句子不一致的情况,很难解决,还有就是decoder只能看到前面的信息。
其次bert在多方面的nlp任务变现来看效果都较好,具备较强的泛化能力,对于特定的任务只需要添加一个输出层来进行fine-tuning即可。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jiaowoshouzi/article/details/89073944

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值