资源行业动态解密 BERT

解密 BERT

2019-10-21 | |  56 |   0

原标题:文本生成图像简要回顾 text to image synthesis

来源:CSDN博客「 博主:mohole_zhang」     链接:https://www.yanxishe.com/TextTranslation/2180


毫不夸张的讲,谷歌AI实验室的BERT深刻影响了NLP的格局。

1570521856315872.png

想象一下这样一个在大量未标注数据集中训练的模型,你仅仅只需要做一点的微调,就可以在11个不同的NLP任务上取得 SOTA结果。没错,BERT就是这样,它彻底改变了我们设计NLP模型的方式。


BERT之后,许多NLP架构、训练方法与语言模型如雨后春笋般涌现,比如谷歌的TransformerXL、OpenAI’s GPT-2、 XLNet、ERNIE2.0、 RoBERTa等。


注:在这篇文章中,我会提及许多Transformer的内容,如果你对Transformer不了解的话,可以先看看这篇文章——How do Transformers Work in NLP? A Guide to the Latest State-of-the-Art Models.


什么是BERT?


你一定听说过BERT,也知道了它是多么不可思议以致改变了NLP的领域格局,但BERT究竟是什么?


以下是BERT团队对该框架的描述:

BERT全称Bidirectional Encoder Representations from Transformers(Transformers的双向编码表示),对未标注的文本,通过上下文约束预训练深层双向表示。训练完成后,只需要对BERT预训练模型进行fine-tune,再加上针对特定任务的输出层就可以取得SOTA结果。


对新人来说这样的解释不够明白,但这确实很好的总结了BERT的机制。接下来,我们一点点的进行剖析。


首先可以明确的是,BERT全称Bidirectional Encoder Representations from Transformers,名字中的每一个单词都有其意义,我们会在后面的段落一一介绍。从BERT的名字中,我们能得到最重要信息就是:BERT是基于Transformer架构的。


其次,BERT是在大量的未标注文本上预训练得到,包括整个Wikipedia(有25亿单词)和图书语料库(8亿单词)。


预训练这一步对BERT来讲是至关重要的。正是由于如此庞大的语料库的支撑,模型在训练过程中才能对语言的工作原理进行更深入、更准确的提取,通过此过程提取到的知识对所有NLP任务来说都是‘万滑油’。


然后,BERT是“深度双向”模型,双向就意味着BERT在训练过程中关注当前位置的上下文信息。


上下文信息对准确理解语义很重要的。看下面这个例子,两句话中都包含了同一个单词“bank”:

1570521855946104.png

                                              BETR捕获上下文信息


如果我们想仅依靠上文或者下文的信息去理解“bank”的含义,那么对这两句话中的“bank”,我们是无法区分它们的不同含义的。


解决方法就是在预测之前同时考虑上下文信息,BERT就是这样做的。


最后,BERT最吸引人的在于,我们仅仅通过在模型后根据自己的需求加上输出层部分就可以在各类NLP任务取得SOTA结果。


从Word2Vec到BERT:NLP对语言表示的探索

“自然语言处理领域最大的挑战之一就是训练数据的短缺。NLP是一个多元领域,任务繁多,大多数特定领域的数据集仅仅包含几千或几十万人工标注的数据。”——谷歌AI


Word2Vec和GloVe


预训练模型从大量未标注文本数据中学习语言表示的思想来源于词嵌入,如Word2Vec and GloVe。


词嵌入改变了进行NLP任务的方式。通过嵌入,我们能够捕获单词的上下文关系。

1571672195902429.png

图中所示的这些嵌入方法被广泛用于下游NLP任务的训练模型,以便获取较好的预测结果。


之前的嵌入方法的一大缺陷在于只使用了很浅的语言模型,那就意味着它们捕获到的信息是有限的。


另外一个缺陷就是这些嵌入模型没有考虑单词的上下文。就像之前提到的“bank”例子,在不同的语境下同一个单词可能会有不同的含义。


然而,WordVec之类的模型将不同语境中的“bank”以同样的向量表示。于是,一些重要的信息被遗漏了。


ELMo与ULMFiT


1571672272156375.png


ELMo是对语言多义性问题提出的解决方案——针对那些在不同上下文中具有不同含义的单词。

从训练浅层前馈网络(Word2vec)开始,我们逐步过渡到使用复杂的双向LSTM结构来训练词嵌入。

这意味着同一单词根据其所在的上下文可以具有多个ELMO嵌入。


从那时起,我们开始注意到预训练的优势将使其在NLP任务中发挥重要作用。


05.png


ULMFiT更进一步,在文档分类任务中,即使只有很少的数据(少于100),对该框架训练的语言模型进行微调就能够提供出色的结果。这意味着ULMFiT解决了NLP任务中的迁移学习问题。


这是我们提出的NLP迁移学习黄金公式:

   NLP迁移学习 = 预训练 + 微调


在ULMFIT之后,许多NLP任务根据上述公式进行训练,并获得了新的基准。


OpenAI的GPT


OpenAI’s GPT进一步扩展了ULMFiT和ELMo中引入的pre-training和fine-tuning方法。

GPT的关键是用基于Transformer的结构取代了基于LSTM的语言建模结构。


不仅是文档分类任务,GPT模型还可以对其他NLP任务进行


fine-tuned,例如常识推理,语义相似性和阅读理解。


OpenAI的GPT在多项任务获得SOTA结果,验证了Transformer架构的鲁棒性和有效性。  

就这样,BERT在Transformer的基础上横空出世,并给NLP领域带来巨大变革。


BERT出世


至此,解决NLP任务离不开这两步:

1. 在未标注的大型文本语料库上训练语言模型(无监督或半监督)

2. 针对特定的NLP任务对大型语言模型进行微调,以充分利用预训练模型的大量知识(监督)

接下来,我们将详细了解BERT如何训练模型,并在未来一段时间内成为NLP领域的行业标杆。


BERT是如何工作的?干货讲解


深入BERT,理解为什么BERT建立的语言模型如此有效。


1. BERT的结构

BERT架构建立在Transformer之上。 我们目前有两个可用的变体:

● BERT Base:12层(transformer模块),12层注意力,1.1亿参数

● BERT Large:24层(transformer模块),16层注意力,3.4亿参数

1571672457430055.png

与OpenAI的GPT模型相比,BERT Base模型大小与其相似,同时BERT Base的所有transformer层都仅包括编码部分。


如果你对transformer结构了解不是很清楚,建议你先读一下这篇文章。


现在我们已经了解了BERT的整体架构。在正式构建模型之前,需要先进行一些文本处理工作。

1571672487855231.png

2. 文本预处理


BERT背后的开发人员添加了一组特定的规则来表示模型的输入文本。其中许多都是创造性的设计选择可以让模型表现更好。


首先,每个输入嵌入都是三个嵌入的组合:


1.位置嵌入:BERT学习并使用位置嵌入来表达单词在句子中的位置。添加该嵌入是为了克服Transformer的局限性,与RNN不同,Transformer无法捕获“序列”或“顺序”信息


2.段嵌入:BERT也可以将句子作为任务的输入(问题-解答)。因此,它为第一句话和第二句话学习了独特的嵌入,以帮助模型区分它们。在上面的示例中,所有为EA的标记都属于句子A(对于EB一样)


3.令牌嵌入:这些是从WordPiece令牌词汇表中为特定令牌学习的嵌入


对于给定的令牌,其输入表示形式是通过将相应的令牌,段和位置嵌入相加而构造的。

这种全面的嵌入方案包含许多有用的模型信息。

这些预处理步骤的组合使BERT如此通用。


3. 预训练任务

BERT对两项NLP任务进行预训练:

  • 遮掩语言模型

  • 下句预测

让我们更详细地理解这两个任务!


a. 遮掩语言模型(双向)

BERT是深层的双向模型,该网络从第一层到最后一层始终关注当前单词的上下文进行信息捕获。

08.png

单词序列预测


传统的语言模型要么是利用从右到左的文本信息进行训练预测下一个单词(例如GPT),要么是使用从左到右的文本信息进行训练,这使模型不可避免的丢失一些信息,从而导致错误。


ELMo试图通过训练两个LSTM语言模型(一个利用从左到右的文本信息,一个利用从右到左的文本信息),并将它们进行连接来解决这个问题。这样虽然在一定程度上取得进步,但还远远不够。


1571680458861262.png


相对于GPT与ELMo,BERT在利用上下文信息这一方面取得重要突破,如上图所示。

图中的箭头表示一层到下一层的信息流,顶部的绿色框表示每个输入单词的最终表示。

从以上图片可以明显看到:BERT是双向的,GPT是单向的(从左到右的信息流),ELMo是浅层双向的。

关于遮掩语言模型——这是BERT双向编码的奥秘。

对这样一个句子——“I love to read data science blogs on Analytics Vidhya”,我们怎样用它训练双向语言模型呢。

我们首先将“Analytics”替换为“[MASK]”, “[MASK]”  表示将该位置的单词掩盖。

然后我们需要训练一个模型,使其能够预测mask掉的单词:“I love to read data science blogs on [MASK] Vidhya.”

这就是遮掩语言模型的关键。BERT的作者还介绍了一些遮掩语言模型的注意事项:

  • 为了防止模型过于关注特定位置或被遮掩的标记,研究人员随机遮掩15%的单词

  • 被遮掩的单词并不总是[MASK]取代,在针对特定任务的微调阶段是不需要[MASK]标记的

  • 为此,研究人员的一般做法是:(对 15%需要[MASK] 单词 )

  • (15%的)80%的单词被[MASK]遮掩

  • 其余10%的单词被其他随机单词取代

  • 其余10%的单词保持不变

在我之前的一篇文章中,我详细介绍了如何在Python中实现遮掩语言模型:Introduction to PyTorch-Transformers: An Incredible Library for State-of-the-Art NLP (with Python code)


发起:唐里 校对:鸢尾 审核:唐里

参与翻译(2人):爱曼纽•西蒙、季一帆

英文原文:Demystifying BERT: The Groundbreaking NLP Framework

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:滴滴张博宣布开放城市交通指数数据集,助力交通领域科研发展 | CNCC 2019

下一篇:简单实用的数据清洗代码

用户评价
全部评价

热门资源

  • 国内人才报告:机...

    近日,BOSS 直聘职业科学实验室 &BOSS 直聘研究院...

  • AI使物联网更智能...

    看到微软对物联网和人工智能的结合感兴趣是一个明...

  • 推荐一批学习自然...

    这里推荐一批学习自然语言处理相关的书籍,当然,...

  • 安防智能化大势下...

    大部分传统安防设备不仅拍摄视野有限,而且无法事...

  • 20亿创业基金、10...

    近日,杭州举办了建设国家新一代人工智能创新发展...