炼数成金 门户 商业智能 自然语言处理 查看内容

NLP工程师都在看的:从入门到精通谷歌BERT技术

2019-10-9 13:20| 发布者: 炼数成金_小数| 查看: 41368| 评论: 0|原作者: 洪杨|来自: 信数金服

摘要: 为了确保大家可以循序渐进地理解BERT是怎样一项技术,它又是如何在命名实体识别(Named Entity Recognition,NER)任务中被应用的(它可以应用在很多NLP任务中,这里只是以实体识别为背景举例),我们需要先了解一些 ...

网络 模型 基础 神经网络 自然语言处理

为了确保大家可以循序渐进地理解BERT是怎样一项技术,它又是如何在命名实体识别(Named Entity Recognition,NER)任务中被应用的(它可以应用在很多NLP任务中,这里只是以实体识别为背景举例),我们需要先了解一些基础概念。所以本文先介绍了什么是命名实体识别,然后介绍了RNN的神经网络、词向量、序列标签以及关键的迁移学习,最后再介绍了BERT的原理,使用方法和特点。

什么是NER 
命名实体识别是自然语言处理领域的基础任务,一直以来是科研的研究方向之一,是关系抽取、事件抽取、知识图谱、信息提取、问答系统、句法分析、机器翻译等诸多NLP任务的基础,被广泛应用在自然语言处理领域,同时在自然语言处理技术走向实用化的过程中占有重要地位。

其任务是将文本中的语言元素定位和分类为预定义的类别,例如人员、组织、地点、数量、时间表达、货币价值、百分比等,又或者是一些领域的专业词汇。举一个例子,“昨天,川普在推特发表了对中国加征关税的决定”这样的一句话里,我们希望通过NER模型将标签“PERSON”分配给“川普”,将标签“NATION”分配给“中国”。

NER的发展历史 
NER一直是 NLP 领域中的研究热点,如图1所示,截至目前为止,它大概可以划分为以下四个大的阶段:最开始通过词典(即词汇列表)和规则的方法,到传统的机器学习方法,再到后来结合了深度学习的方法,以及现在的注意力思想,迁移学习以及半监督学习的方法。


图表1 NER不同阶段的主要技术

这四个阶段并不是完全割裂开的,而是在原有的基础上不断进步,我们可以看到在深度学习的阶段依然会与传统机器学习的CRF相结合来提高准确度,而的迁移学习和注意力思想也是在深度学习方法基础上的进一步优化,BERT正是这一阶段的产物。

RNN在NLP中的应用 
3.1 RNN的思想和具体实现
RNN(Recurrent Neural Network,循环神经网络)是神经网络中的一种,它擅长对序列数据进行建模处理,所以RNN在音频和文本的处理中的表现优异。

RNN背后的思想是利用顺序信息。在传统的神经网络中,我们假设所有的输入(包括输出)之间是相互独立的。对于很多任务来说,这是一个非常糟糕的假设。如果你想预测一个序列中的下一个词,你较好能知道哪些词在它前面。RNN之所以是循环的,是因为它针对系列中的每一个元素都执行相同的操作,每一个操作都依赖于之前的计算结果。

假设用户输入:“What time is it?“,对于RNN而言,句子会被分解为一个单词序列,按照顺序每次输入一个单词。

第一步,如图2所示,RNN将“what”编码并产生输出。


图表2 RNN处理单词what

对于下一步,如图3所示,我们提供单词“time”和上一步中的隐藏状态。RNN现在有关于“what”和“time”这两个词的信息。


图表3 RNN处理单词time以及what的隐藏信息

可以看到RNN每一步都会编码了前面步骤中所有单词的信息,这也是为什么前面提到,RNN每一个操作都依赖于之前的计算结果。如图4所示,此时的状态已经包含了“What time is”三个单词的信息。

图表4 RNN处理到is时的状态
如图5所示,我们重复这个过程,直到最后RNN编码了前面步骤中所有单词的信息。

图表5 RNN最后的隐藏状态

由于实体识别任务的输入和输出序列是等长的,因此我们每一步都需要把产生的输出传递给激活层(反映神经元的权值或置信度。这就解释了模型的非线性特征,使它能够更深入地学习观察结果)以完成对每个单词的训练和预测。当然这只是针对NER的一种RNN网络实现方式,还有其他几种RNN网络的结构在这里暂时并不提及,感兴趣的伙伴可以自行查阅。

3.2 RNN模型的进阶-LSTM与GRU
我们再次看回到图5,此时隐藏状态中呈现了奇怪的颜色分布(即不同单词的信息占有的权重不同),这是为了说明RNN被称为短期记忆的问题。它是由臭名昭著的梯度消失问题引起的,而梯度消失则是由于反向传播的性质引起的,反向传播是用于训练和优化神经网络的算法,所以梯度消失问题在其他神经网络架构中也很普遍。回到RNN的问题,由于RNN处理很多步骤,因此难以保留先前步骤中的信息,正如图5所显示的,在最后的单词步骤中,“what”和“time”两个词的信息几乎不存在。

那么梯度消失问题现在是如何被应对的呢?为了减轻短期记忆的影响,研究者们创建了两个专门的递归神经网络,一种叫做长短期记忆或简称LSTM(Long Short-Term Memory)。另一个是门控循环单位或GRU(Gated Recurrent Unit)。LSTM和GRU本质上就像RNN一样,但它们能够使用称为“门”的机制来学习长期依赖。这些门的本质是不同的数学公式,通过门可以控制学习添加或删除隐藏状态的信息。由于这种能力,短期记忆对他们来说不是一个问题。

总而言之,RNN适用于处理序列数据以进行预测,但却会受到短期记忆的影响。但是我们并不会因为RNN的短期存储问题就完全不使用RNN,而直接使用进化版本如:LSTM和GRU。RNN相比于它的进化版本具有更快训练和使用更少资源的优势,这是因为要计算的张量操作比较少,所以具体使用哪种模型是取决于你需要训练和预测的序列长度。

3.3 RNN模型的输入
显而易见的,计算机是无法直接理解自然语言的,那我们要如何才能让计算机理解文字呢?

词向量(Word Embedding),英文直译的话应该叫 “词嵌入“。不少人应该会立刻想到Google出品的Word2Vec,大牌效应就是不一样。另外,用Keras之类的框架还有一个Embedding层,也说是将词ID映射为向量。由于先入为主的意识,大家可能就会将词向量跟Word2Vec等同起来,而反过来问“Embedding是哪种词向量?”这类问题,尤其是对于初学者来说,是很容易混淆的。

实际上,Keras的Embedding层和Word2vec、Glove本质上是一样的,就是把词向量化。不同的是Keras的Embedding层的词向量是可以和模型一起训练的,可以更好地适应相应任务,当然这里仅作提示,以防新手混淆。

回到词向量的定义上来讲,词向量模型是一个工具,可以把真实世界抽象存在的文字转换成可以进行数学公式操作的向量,而对这些向量的操作,才是NLP真正要做的任务。因而某种意义上,NLP任务分成两部分,训练产生词向量,对词向量操作(下游具体NLP任务,如情感分析,实体识别等)。

现在常用的词向量模型有哪些呢?

One-hot Vector:
1. 原理:对应的词所在的位置设为1,其他为0;

2. 例如:King, Queen, Man and Woman这句里面Queen对应的向量就是[0,1,0,0];

3. 不足:难以发现词之间的关系,以及难以捕捉句法(结构)和语义(意思)之间的关系。

Word2Vec:
基本思想是把每个词表征为K维的实数向量(每个实数都对应着一个特征,可以是和其他单词之间的联系),将相似的单词分组映射到向量空间的不同部分。也就是Word2Vec能在没有人为干涉的情况下,学习到单词之间的关系。

1. 优点:在数据集比较大的时候结果更准确。

2. 不足:词在语句中的顺序对词向量没有影响,没有考虑到中文的语法。例如,不考虑词的顺序会导致不同语义的同一词汇的词向量是一样的,苹果公司和苹果5元一斤的苹果词向量在word2vec里是一样的。

此外还有ELMo、Transformer等方法,后面的BERT介绍中会提到Transformer。

3.4 RNN模型的标签和输出
NER是有监督学习,所以在了解RNN网络的基本思想、工作原理以及RNN需要的数据输入形式以后,我们就差一个标签集,就可以开始训练模型了。

一般情况下,对于NLP任务来说,线性序列就是输入的文本,往往可以把一个汉字看作线性序列的一个元素,而不同任务其标签集合代表的含义可能不太相同,但是相同的问题都是:如何根据汉字的上下文给汉字打上一个合适的标签。

我们在给NER模型的训练数据打标签时,执行此操作的标准方法是“BIO”编码,其中我们用“B-X”,“I-X”或“O”标记每个单词。这里,“BX”表示“开始类型X的短语”,“IX”表示“继续类型X的短语(或短语内)”,“O”表示“不在短语中。

用文章最开始的“NATION”举例,当我们对标记使用BIO编码,对国家类实体(LOC)分块,因此我们可以定义三个新标签:

1. B-NAN:国家类短语块的开头

2. I-NAN:国家类短语块内部

3. O:地点类短语块之外

NER模型就是通过预测每一个字是哪类标签,再通过标签的组合把“NATION”标签分配给”中国“,当然最后的结果不是简单预测每个字来决定的,通过CRF可以进一步提高准确率。

3.5 什么是迁移学习
迁移学习是机器学习方法之一,它可以把为一个任务开发的模型重新用在另一个不同的任务中,并作为另一个任务模型的起点。

这在深度学习中是一种常见的方法。由于在计算机视觉和自然语言处理上,开发神经网络模型需要大量的计算和时间资源,技术跨度也比较大。所以,预训练的模型通常会被重新用作计算机视觉和自然语言处理任务的起点。

这里就不得不提到我们前面介绍的词向量,当你的训练样本量不够时,要如何开展NLP任务呢?迁移学习在NLP领域中最常见的方式就是把别人在大量数据集上预训练的词向量作为新模型的第一层,之后我们仍然需要从头针对样本开始训练所有RNN / CNN /自定义层模型。

BERT的原理以及优势 
跋山涉水,我们终于到了这里,BERT正是NLP领域阶段的成果,它并不是一个解决实际NLP各类问题的模型,在运用BERT的时候,使用的是BERT通过大量文本预训练Transformer模型的到的词向量。把词向量带入到我们的小样本中使用RNN神经网络进行微调,即可在不同NLP任务中获得优异的表现,也就是前面提到的迁移学习。

那么BERT作为NLP领域一颗耀眼的新星,它有哪些优势呢?下面主要介绍BERT的三个亮点Transformer、Masked LM、sentence-level。

4.1 Transformer
Transformer模型是2018年5月提出的,论文名称是attention is all you need,以替代传统RNN和CNN的一种新的架构,用来实现机器翻译。无论是RNN还是CNN,在处理NLP任务时都有缺陷。CNN是先天的卷积操作不很适合序列化的文本,RNN是没有并行化,很容易超出内存限制。

图表6 Transformer的结构

图6是transformer模型的一个结构,分成左边Nx边框的encoder和右边Nx边框的decoder,相较于RNN+attention常见的encoder-decoder之间的attention(上边的一个橙色框),还多出encoder和decoder内部的self-attention(下边的两个橙色框)。每个attention都有multi-head特征。最后,通过position encoding加入没考虑过的位置信息。

我们从multi-head attention,self-attention, position encoding几个角度介绍Transformer模型。

Multi-head attention:
将一个词的vector切分成h个维度,求attention相似度时每个h维度计算。由于单词映射在高维空间作为向量形式,每一维空间都可以学到不同的特征,相邻空间所学结果更相似,相较于全体空间放到一起对应更加合理。比如对于vector-size=512的词向量,取h=8,每64个空间做一个attention,学到结果更细化。

self-attention:
每个词位的词都可以无视方向和距离,有机会直接和句子中的每个词encoding。比如图7这个句子,每个单词和同句其它单词之间都有一条边作为联系,边的颜色越深,表明联系越强,而一般意义模糊的词语所连的边都比较深,如:law,application,missing,opinion。

图表7 self-attention图例

position encoding: 
因为Transformer既没有RNN的recurrence也没有CNN的convolution,但序列顺序信息很重要,比如“你欠我100万明天要还”和“我欠你100万明天要还”的含义截然不同。Transformer计算token的位置信息这里使用正弦波,类似模拟信号传播周期性变化。这样的循环函数可以一定程度上增加模型的泛化能力。


图表8 Transformer计算token的循环函数

但BERT直接训练一个position embedding来保留位置信息,每个位置随机初始化一个向量,加入模型训练,最后就得到一个包含位置信息的embedding,最后这个position embedding和word embedding的结合方式上,BERT选择直接拼接。

4.2 Masked Language Model
BERT 用了两个步骤,试图去正确地训练Transformer模型的参数。第一个步骤是把一篇文章中15% 的词汇遮盖,让模型根据上下文全向地预测被遮盖的词。假如有 1 万篇文章,每篇文章平均有 100 个词汇,随机遮盖 15% 的词汇,模型的任务是正确地预测这 15 万个被遮盖的词汇。通过全向预测被遮盖住的词汇,来初步训练 Transformer 模型的参数。

图表9 Masked图例

虽然这确实能获得双向预训练模型,但这种方法有两个缺点。首先,预训练和fine-tuning之间不匹配,因为在fine-tuning期间从未看到[MASK]token。为了解决这个问题,团队并不总是用实际的[MASK]token替换被“masked”的词汇,作者按一定的比例在需要预测的词位置上输入原词或者输入某个随机的词。

如:my dog is hairy
1. 有80%的概率用“[mask]”标记来替换——my dog is [MASK]

2. 有10%的概率用随机采样的一个单词来替换——my dog is apple

3. 有10%的概率不做替换——my dog is hairy

当然,由于一次输入的文本序列中只有mask的词被用来进行训练,因此BERT在效率上会低于普通的语言模型,作者也指出BERT的收敛需要更多的训练步数,不过结果的情境意识增加了,比如BERT训练的embedding中苹果在不同语境下的词向量也是不同的,可能是水果也可能是公司。

4.3 sentence-level representation
在很多任务中,仅仅靠encoding是不足以完成任务的(这个只是学到了一堆token级的特征),还需要捕捉一些句子级的模式,来完成SLI、QA、dialogue等需要句子表示、句间交互与匹配的任务。对此,BERT又引入了另一个极其重要却又极其轻量级的任务,来试图把这种模式也学习到。

譬如从1 万篇文章中,挑选 20 万对语句,总共 40 万条语句。挑选语句对的时候,其中 10 万对语句,是连续的两条上下文语句,另外 10 万对语句,不是连续的语句。然后让 Transformer 模型来识别这 20 万对语句,哪些是连续的,哪些不连续。

为了帮助模型区分开训练中的两个句子,输入在进入模型之前要按以下方式进行处理:
1. 在第一个句子的开头插入 [CLS] 标记,在每个句子的末尾插入 [SEP] 标记。

2. 将表示句子 A 或句子 B 的一个句子 embedding 添加到每个 token 上。

3. 给每个 token 添加一个位置 embedding,来表示它在序列中的位置。

如图10所示,最终BERT的输入结果会变成下面3个embedding拼接的表示。 

图表10 BERT的最终输入组成

为了预测第二个句子是否是第一个句子的后续句子,用下面几个步骤来预测:
1. 整个输入序列输入给 Transformer 模型。

2. 用一个简单的分类层将 [CLS] 标记的输出变换为 2×1 形状的向量。

3. 用 softmax 计算 IsNextSequence 的概率。

在训练 BERT 模型时,Masked LM 和 Next Sentence Prediction 是一起训练的,目标要最小化两种策略的组合损失函数。

以上的描述涵盖了BERT在模型结构和训练目标上的主要创新点,当然除了模型结构,模型大小和数据量都很重要,而BERT的成功还有一个很大的原因就是来自于模型的体量以及训练的数据量。

BERT训练数据采用了英文的开源语料BooksCropus 以及英文维基百科数据,一共有33亿个词。同时BERT模型的标准版本有1亿的参数量,与GPT持平,而BERT的大号版本有3亿多参数量,这应该是目前自然语言处理中较大的预训练模型了。

当然,这么大的模型和这么多的数据,训练的代价也是不菲的。谷歌用了16个自己的TPU集群(一共64块TPU)来训练大号版本的BERT,一共花了4天的时间。对于是否可以复现预训练,作者在曾经有一个大致的回复,指出OpenAI当时训练GPT用了将近1个月的时间,而如果用同等的硬件条件来训练BERT估计需要1年的时间。不过他们会将已经训练好的模型和代码开源,方便大家在训练好的模型上进行后续任务。

虽然训练的代价很大,但是这个研究还是带来了一些思考和启发,相信在未来的一段时间,自然语言处理中预训练的神经网络语言模型会得到更多的关注和运用。

声明:本文版权归原作者所有,文章收集于网络,为传播信息而发,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括:各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2019-12-12 07:00 , Processed in 0.178782 second(s), 25 queries .