0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NLP领域取得最重大突破!BERT模型开启了NLP的新时代!

DPVg_AI_era 来源:未知 作者:李倩 2018-10-18 10:55 次阅读

今天,NLP领域取得最重大突破!谷歌AI团队新发布的BERT模型,在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩:全部两个衡量指标上全面超越人类,并且还在11种不同NLP测试中创出最佳成绩。毋庸置疑,BERT模型开启了NLP的新时代!

今天请记住BERT模型这个名字。

谷歌AI团队新发布的BERT模型,在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩:全部两个衡量指标上全面超越人类!并且还在11种不同NLP测试中创出最佳成绩,包括将GLUE基准推至80.4%(绝对改进7.6%),MultiNLI准确度达到86.7% (绝对改进率5.6%)等。

谷歌团队的Thang Luong直接定义:BERT模型开启了NLP的新时代!

本文从论文解读、BERT模型的成绩以及业界的评价三方面做介绍。

硬核阅读:认识BERT的新语言表示模型

首先来看下谷歌AI团队做的这篇论文。

论文地址:

https://arxiv.org/abs/1810.04805

BERT的新语言表示模型,它代表Transformer的双向编码器表示。与最近的其他语言表示模型不同,BERT旨在通过联合调节所有层中的上下文来预先训练深度双向表示。因此,预训练的BERT表示可以通过一个额外的输出层进行微调,适用于广泛任务的最先进模型的构建,比如问答任务和语言推理,无需针对具体任务做大幅架构修改。

论文作者认为现有的技术严重制约了预训练表示的能力。其主要局限在于标准语言模型是单向的,这使得在模型的预训练中可以使用的架构类型很有限。

在论文中,作者通过提出BERT:即Transformer的双向编码表示来改进基于架构微调的方法。

BERT 提出一种新的预训练目标:遮蔽语言模型(masked language model,MLM),来克服上文提到的单向性局限。MLM 的灵感来自 Cloze 任务(Taylor, 1953)。MLM 随机遮蔽模型输入中的一些 token,目标在于仅基于遮蔽词的语境来预测其原始词汇 id。

与从左到右的语言模型预训练不同,MLM 目标允许表征融合左右两侧的语境,从而预训练一个深度双向 Transformer。除了遮蔽语言模型之外,本文作者还引入了一个“下一句预测”(next sentence prediction)任务,可以和MLM共同预训练文本对的表示。

论文的核心:详解BERT模型架构

本节介绍BERT模型架构和具体实现,并介绍预训练任务,这是这篇论文的核心创新。

模型架构

BERT的模型架构是基于Vaswani et al. (2017) 中描述的原始实现multi-layer bidirectional Transformer编码器,并在tensor2tensor库中发布。由于Transformer的使用最近变得无处不在,论文中的实现与原始实现完全相同,因此这里将省略对模型结构的详细描述。

在这项工作中,论文将层数(即Transformer blocks)表示为L,将隐藏大小表示为H,将self-attention heads的数量表示为A。在所有情况下,将feed-forward/filter 的大小设置为 4H,即H = 768时为3072,H = 1024时为4096。论文主要报告了两种模型大小的结果:

: L=12, H=768, A=12, Total Parameters=110M

: L=24, H=1024, A=16, Total Parameters=340M

为了进行比较,论文选择,它与OpenAI GPT具有相同的模型大小。然而,重要的是,BERT Transformer 使用双向self-attention,而GPT Transformer 使用受限制的self-attention,其中每个token只能处理其左侧的上下文。研究团队注意到,在文献中,双向 Transformer 通常被称为“Transformer encoder”,而左侧上下文被称为“Transformer decoder”,因为它可以用于文本生成。BERT,OpenAI GPT和ELMo之间的比较如图1所示。

图1:预训练模型架构的差异。BERT使用双向Transformer。OpenAI GPT使用从左到右的Transformer。ELMo使用经过独立训练的从左到右和从右到左LSTM的串联来生成下游任务的特征。三个模型中,只有BERT表示在所有层中共同依赖于左右上下文。

输入表示(input representation)

论文的输入表示(input representation)能够在一个token序列中明确地表示单个文本句子或一对文本句子(例如, [Question, Answer])。对于给定token,其输入表示通过对相应的token、segment和position embeddings进行求和来构造。图2是输入表示的直观表示:

图2:BERT输入表示。输入嵌入是token embeddings, segmentation embeddings 和position embeddings 的总和。

具体如下:

使用WordPiece嵌入(Wu et al., 2016)和30,000个token的词汇表。用##表示分词。

使用学习的positional embeddings,支持的序列长度最多为512个token。

每个序列的第一个token始终是特殊分类嵌入([CLS])。对应于该token的最终隐藏状态(即,Transformer的输出)被用作分类任务的聚合序列表示。对于非分类任务,将忽略此向量。

句子对被打包成一个序列。以两种方式区分句子。首先,用特殊标记([SEP])将它们分开。其次,添加一个learned sentence A嵌入到第一个句子的每个token中,一个sentence B嵌入到第二个句子的每个token中。

对于单个句子输入,只使用 sentence A嵌入。

关键创新:预训练任务

与Peters et al. (2018) 和 Radford et al. (2018)不同,论文不使用传统的从左到右或从右到左的语言模型来预训练BERT。相反,使用两个新的无监督预测任务对BERT进行预训练。

任务1: Masked LM

从直觉上看,研究团队有理由相信,深度双向模型比left-to-right 模型或left-to-right and right-to-left模型的浅层连接更强大。遗憾的是,标准条件语言模型只能从左到右或从右到左进行训练,因为双向条件作用将允许每个单词在多层上下文中间接地“see itself”。

为了训练一个深度双向表示(deep bidirectional representation),研究团队采用了一种简单的方法,即随机屏蔽(masking)部分输入token,然后只预测那些被屏蔽的token。论文将这个过程称为“masked LM”(MLM),尽管在文献中它经常被称为Cloze任务(Taylor, 1953)。

在这个例子中,与masked token对应的最终隐藏向量被输入到词汇表上的输出softmax中,就像在标准LM中一样。在团队所有实验中,随机地屏蔽了每个序列中15%的WordPiece token。与去噪的自动编码器(Vincent et al., 2008)相反,只预测masked words而不是重建整个输入。

虽然这确实能让团队获得双向预训练模型,但这种方法有两个缺点。首先,预训练和finetuning之间不匹配,因为在finetuning期间从未看到[MASK]token。为了解决这个问题,团队并不总是用实际的[MASK]token替换被“masked”的词汇。相反,训练数据生成器随机选择15%的token。例如在这个句子“my dog is hairy”中,它选择的token是“hairy”。然后,执行以下过程:

数据生成器将执行以下操作,而不是始终用[MASK]替换所选单词:

80%的时间:用[MASK]标记替换单词,例如,my dog is hairy → my dog is [MASK]

10%的时间:用一个随机的单词替换该单词,例如,my dog is hairy → my dog is apple

10%的时间:保持单词不变,例如,my dog is hairy → my dog is hairy. 这样做的目的是将表示偏向于实际观察到的单词。

Transformer encoder不知道它将被要求预测哪些单词或哪些单词已被随机单词替换,因此它被迫保持每个输入token的分布式上下文表示。此外,因为随机替换只发生在所有token的1.5%(即15%的10%),这似乎不会损害模型的语言理解能力。

使用MLM的第二个缺点是每个batch只预测了15%的token,这表明模型可能需要更多的预训练步骤才能收敛。团队证明MLM的收敛速度略慢于 left-to-right的模型(预测每个token),但MLM模型在实验上获得的提升远远超过增加的训练成本。

任务2:下一句预测

许多重要的下游任务,如问答(QA)和自然语言推理(NLI)都是基于理解两个句子之间的关系,这并没有通过语言建模直接获得。

在为了训练一个理解句子的模型关系,预先训练一个二进制化的下一句测任务,这一任务可以从任何单语语料库中生成。具体地说,当选择句子A和B作为预训练样本时,B有50%的可能是A的下一个句子,也有50%的可能是来自语料库的随机句子。例如:

Input = [CLS] the man went to [MASK] store [SEP]

he bought a gallon [MASK] milk [SEP]

Label = IsNext

Input = [CLS] the man [MASK] to the store [SEP]

penguin [MASK] are flight ##less birds [SEP]

Label = NotNext

团队完全随机地选择了NotNext语句,最终的预训练模型在此任务上实现了97%-98%的准确率。

实验结果

如前文所述,BERT在11项NLP任务中刷新了性能表现记录!在这一节中,团队直观呈现BERT在这些任务的实验结果,具体的实验设置和比较请阅读原论文。

图3:我们的面向特定任务的模型是将BERT与一个额外的输出层结合而形成的,因此需要从头开始学习最小数量的参数。在这些任务中,(a)和(b)是序列级任务,而(c)和(d)是token级任务。在图中,E表示输入嵌入,Ti表示tokeni的上下文表示,[CLS]是用于分类输出的特殊符号,[SEP]是用于分隔非连续token序列的特殊符号。

图4:GLUE测试结果,由GLUE评估服务器给出。每个任务下方的数字表示训练样例的数量。“平均”一栏中的数据与GLUE官方评分稍有不同,因为我们排除了有问题的WNLI集。BERT 和OpenAI GPT的结果是单模型、单任务下的数据。所有结果来自https://gluebenchmark.com/leaderboard和https://blog.openai.com/language-unsupervised/

图5:SQuAD 结果。BERT 集成是使用不同预训练检查点和微调种子(fine-tuning seed)的 7x 系统。

图6:CoNLL-2003 命名实体识别结果。超参数由开发集选择,得出的开发和测试分数是使用这些超参数进行五次随机重启的平均值。

超过人类表现,BERT刷新了11项NLP任务的性能记录

论文的主要贡献在于:

证明了双向预训练对语言表示的重要性。与之前使用的单向语言模型进行预训练不同,BERT使用遮蔽语言模型来实现预训练的深度双向表示。

论文表明,预先训练的表示免去了许多工程任务需要针对特定任务修改体系架构的需求。 BERT是第一个基于微调的表示模型,它在大量的句子级和token级任务上实现了最先进的性能,强于许多面向特定任务体系架构的系统。

BERT刷新了11项NLP任务的性能记录。本文还报告了 BERT 的模型简化研究(ablation study),表明模型的双向性是一项重要的新成果。相关代码和预先训练的模型将会公布在goo.gl/language/bert上。

BERT目前已经刷新的11项自然语言处理任务的最新记录包括:将GLUE基准推至80.4%(绝对改进7.6%),MultiNLI准确度达到86.7% (绝对改进率5.6%),将SQuAD v1.1问答测试F1得分纪录刷新为93.2分(绝对提升1.5分),超过人类表现2.0分。

BERT模型重要意义:宣告NLP范式的改变

北京航空航天大学计算机专业博士吴俣在知乎上写道:BERT模型的地位类似于ResNet在图像,这是里程碑式的工作,宣告着NLP范式的改变。以后研究工作估计很多都要使用他初始化,就像之前大家使用word2vec一样自然。

BERT一出,那几个他论文里做实验的数据集全被轰平了,大家洗洗睡了。心疼swag一秒钟,出现3月,第一篇做这个数据集的算法,在超了baseline 20多点的同时也超过人了。

通过BERT模型,吴俣有三个认识:

1、Jacob在细节上是一等一的高手

这个模型的双向和Elmo不一样,大部分人对论文作者之一Jacob的双向在novelty上的contribution 的大小有误解,我觉得这个细节可能是他比Elmo显著提升的原因。Elmo是拼一个左到右和一个右到左,他这个是训练中直接开一个窗口,用了个有顺序的cbow。

2、Reddit对跑一次BERT的价格讨论

For TPU pods:

4 TPUs * ~$2/h (preemptible) * 24 h/day * 4 days = $768 (base model)

16 TPUs = ~$3k (large model)

For TPU:

16 tpus * $8/hr * 24 h/day * 4 days = 12k

64 tpus * $8/hr * 24 h/day * 4 days = 50k

For GPU:

"BERT-Large is 24-layer, 1024-hidden and was trained for 40 epochs over a 3.3 billion word corpus. So maybe 1 year to train on 8 P100s? "

3、不幸的是,基本无法复现,所以模型和数据谁更有用也不好说。

BERT的成功也说明,好的深度学习研究工作的三大条件: 数据,计算资源,工程技能点很高的研究员(Jacob在微软时候,就以单枪匹马搭大系统,而中外闻名)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    45

    文章

    3641

    浏览量

    134499
  • nlp
    nlp
    +关注

    关注

    1

    文章

    488

    浏览量

    22034

原文标题:NLP历史突破!谷歌BERT模型狂破11项纪录,全面超越人类!

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    图解2018年领先的两大NLP模型BERT和ELMo

    谷歌推出BERT模型被认为是NLP新时代的开始,NLP终于找到了一种方法,可以像计算机视觉那样进行迁移学习。本文用图解的方式,生动易懂地讲解
    发表于 01-03 10:21 2192次阅读

    NLP的面试题目

    NLP面试题目6-10
    发表于 05-21 15:02

    解析:华为石墨烯电池的重大突破真的是在超级快充技术领域吗?

    深度的了解一下华为石墨烯电池的重大突破突破的有事哪方面的领域,是否 是超级快充技术时代的到来的前兆!
    发表于 12-12 09:35 3426次阅读

    NLP的介绍和如何利用机器学习进行NLP以及三种NLP技术的详细介绍

    本文用简洁易懂的语言,讲述自然语言处理(NLP)的前世今生。从什么是NLP到为什么要学习NLP,再到如何利用机器学习进行NLP,值得一读。
    的头像 发表于 06-10 10:26 7.7w次阅读
    <b class='flag-5'>NLP</b>的介绍和如何利用机器学习进行<b class='flag-5'>NLP</b>以及三种<b class='flag-5'>NLP</b>技术的详细介绍

    用图解的方式,生动易懂地讲解了BERT和ELMo等模型

    最新的一个里程碑是BERT的发布,这一事件被描述为NLP新时代的开始。BERT是一个NLP模型
    的头像 发表于 12-16 10:17 1.1w次阅读

    详解谷歌最强NLP模型BERT

    面我们介绍 Word Embedding,怎么把一个词表示成一个稠密的向量。Embedding几乎是在 NLP 任务使用深度学习的标准步骤。我们可以通过 Word2Vec、GloVe 等从未标注数据无监督的学习到词的 Embedding,然后把它用到不同的特定任务中。
    的头像 发表于 01-20 09:24 2989次阅读
    详解谷歌最强<b class='flag-5'>NLP</b><b class='flag-5'>模型</b><b class='flag-5'>BERT</b>

    史上最强通用NLP模型诞生

    OpenAI今天在官博上介绍他们的新NLP模型,刷新7大数据集的SOTA(当前最佳结果),并且能够在不进行任何与领域知识相关数据训练的情
    的头像 发表于 02-18 14:19 4210次阅读
    史上最强通用<b class='flag-5'>NLP</b><b class='flag-5'>模型</b>诞生

    NLP 2019 Highlights 给NLP从业者的一个参考

    自然语言处理专家elvis在medium博客上发表关于NLP在2019年的亮点总结。对于自然语言处理(NLP领域而言,2019年是令人印象深刻的一年。在这篇博客文章中,我想重点介绍
    的头像 发表于 09-25 16:56 1728次阅读

    图解BERT预训练模型

    BERT的发布是这个领域发展的最新的里程碑之一,这个事件标志着NLP 新时代的开始。BERT模型
    的头像 发表于 11-24 10:08 3672次阅读

    如何在NLP领域实施对抗攻击

    当视觉领域中的对抗攻击研究很难再有重大突破的时候(坑已满,请换坑),研究人员便把目光转移到了NLP领域。其实就NLP
    的头像 发表于 03-05 16:01 4059次阅读
    如何在<b class='flag-5'>NLP</b><b class='flag-5'>领域</b>实施对抗攻击

    2021 OPPO开发者大会:NLP预训练大模型

    2021 OPPO开发者大会:NLP预训练大模型 2021 OPPO开发者大会上介绍融合知识的NLP预训练大模型。 责任编辑:haq
    的头像 发表于 10-27 14:18 1762次阅读
    2021 OPPO开发者大会:<b class='flag-5'>NLP</b>预训练大<b class='flag-5'>模型</b>

    NLP入门之Bert的前世今生

    对于每个词只能有一个固定的向量表示,今天我们来介绍一个给NLP领域带来革新的预训练语言大模型Bert,对比word2vec和Glove词向量模型
    发表于 02-22 10:29 945次阅读
    <b class='flag-5'>NLP</b>入门之<b class='flag-5'>Bert</b>的前世今生

    理解什么是NLP Subword算法

    Subword算法如今已经成为了一个重要的NLP模型性能提升方法。自从2018年BERT横空出世横扫NLP界各大排行榜之后,各路预训练语言模型
    的头像 发表于 02-22 14:16 560次阅读

    nlp自然语言处理模型怎么做

    自然语言处理(Natural Language Processing,简称NLP)是人工智能领域的一个重要分支,它涉及到计算机对人类语言的理解和生成。随着深度学习技术的发展,NLP领域
    的头像 发表于 07-05 09:59 635次阅读

    nlp逻辑层次模型的特点

    NLP(自然语言处理)逻辑层次模型是一种用于理解和生成自然语言文本的计算模型。它将自然语言文本分解为不同的层次,以便于计算机更好地处理和理解。以下是对NLP逻辑层次
    的头像 发表于 07-09 10:39 394次阅读