李沐论文精读:BERT 《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》

BERT是深度学习在自然语言处理领域的里程碑,通过预训练和微调,实现广泛任务的高性能。论文提出带掩码的语言模型(MLM)和Next Sentence Prediction(NSP)任务,利用无标签数据训练深层双向Transformer,提升了NLP任务的性能。BERT模型结构包括多层Transformer Encoder,使用WordPiece分词,通过输入嵌入、位置嵌入和段落嵌入来处理输入序列。预训练和微调过程中,BERT在多个NLP任务上展现出优越性能,如GLUE、SQuAD等。
摘要由CSDN通过智能技术生成

https://github.com/google-research/bert

论文地址:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

官方代码地址:https://github.com/google-research/bert

课程推荐:李宏毅机器学习--self-supervised:BERT

参考:BERT 论文逐段精读【论文精读】 - 哔哩哔哩

目录

1.前言

2.摘要

3 导论

4 结论

5 相关工作

5.1 基于特征的无监督方法

5.2 无监督的微调方法

5.3 监督数据中的迁移学习  

6 BERT模型结构和输入输出

6.1BERT框架两个步骤:预训练和微调

6.2模型结构

6.3可学习参数的大小

6.4模型输入输出

input sequence

WordPiece

特殊记号

3种embedding

7 BERT预训练(MLM+NSP)

7.1 Task 1:Masked LM

7.2 Task 2:Next Sentence Prediction(NSP)

7.3 预训练数据和参数

8 BERT微调

微调参数

9 实验

9.1 GLUE数据集(分类)

9.2 SQuAD v1.1(问答)

9.3 SQuAD v2.0(问答)

9.4 SWAG(句子对任务)

10消融试验

10.1 模型各部分的影响

10.2 模型配置的影响

10.3 将BERT作为特征提取器   

11 总结


1.前言

     在计算机视觉里面很早就能够在一个大的数据集(比如说ImageNet)上训练出一个CNN模型,用这个模型可以用来处理一大片的机器视觉任务,来提升他们的性能;但是在自然语言处理里面,在BERT出来之前,在NLP领域没有一个这样的深度神经网络模型,还是对每个任务构造自己的神经网络,自己训练。BERT的出现使得我们能够在一个大的数据集上面训练好一个比较深的神经网络,然后应用在很多的NLP任务上面,这样既简化了NLP任务的训练,又提升了它的性能,所以BERT和它之后的一系列工作使得自然语言处理在过去三年中有了质的飞跃。

        BERT的主要贡献,是将预训练模式推广到深层双向体系结构,而具体的实现,是通过MLM任务来完成。通过完形填空的自监督训练机制,不需要使用监督语料,而是预测句子中被masked的词是什么,从而抽取文本特征。

        由此BERT极大的拓展了Transformers的应用,使其可以在更大的无标签的数据集上训练,其效果比有标签、更小数据集上训练的模型效果还要好。

2.摘要

  我们介绍一种新的语言表示模型叫BERT,它是Bidirectional Encoder Representations fromTransformers的缩写(双向Transformer编码器)。

BERT和ELMo、GPT的区别:

  • GPT使用新的 Transformers结构,用左侧信息取预测未来信息,单向模型的主要缺点在于不能获得足够好的词表示;
  • ELMo通过从左向右(LTR)和从右向左(RTL)两个模型的输出拼接获得词的表示,双向信息融合的很浅,且由于基于RNN的架构,在应用到下游任务时,需要对架构做一些调整;
  • BERT是基于Transformer,用了左右侧信息,使用的是没有标号的数据,用到一些下游任务的时候,和GPT一样只需要微调输出层就可以了。

从创新的角度来看,bert其实并没有过多的结构方面的创新点。本文将ELMo双向的想法和GPT的transformer架构结合起来就成为了BERT。BERT的主要特征是,对于不同的任务都有一个统一的模型结构,是一个泛化能力较强的预训练模型。

3 导论

        语言模型预训练可以改善许多NLP任务,这些任务包括:

  • 句子级别的任务,主要是用来建模句子之间的关系,比如说对句子的情绪识别或者两个句子之间的关系
  • 词元层面的任务(token-level):包括实体命名的识别(对每个词识别是不是实体命名,比如说人名、街道名),这些任务需要输出一些细腻度的词元层面上的输出  

        在使用预训练模型做特征表示的时候,一般有两类策略

  • 一个策略是基于特征feature-based的,代表作是ELMo,对每一个下游的任务构造一个跟这个任务相关的神经网络,然后将预训练好的这些表示(比如说词嵌入)作为一个附加特征,希望这些特征已经有了比较好的表示,把它们和原始输入一起放进模型中。因为附加特征已经有了好的表示,所以模型训练起来相对来说比较容易,这也是NLP中使用预训练模型最常用的做法
  • 另一个策略是基于微调fine-tuning的,这里举的是GPT的例子,就是把预训练好的模型放在下游任务的时候不需要改变太多,只需要简单的修改一些输出层,再用我们自己的数据进行一个增量训练,对预训练好的参数会在下游的数据上再进行微调        

  

        这两种方法在预训练的过程中使用的是同一个目标函数,即单向的语言模型(给定一些词去预测下一个词是什么东西,说一句话然后预测这句话下面的词是什么东西),限制了预训练表示的能力。比如,在GPT中使用的是一个从左到右的架构(在看句子的时候只能从左看到右),这样的坏处在于如果要做句子层面的分析的话,比如说要判断一个句子层面的情绪是不是对的话,从左看到右和从右看到左都是合法的,另外,就算是词元层面上的一些任务,比如QA的时候也是看完整个句子再去选答案,而不是一个一个往下走。如果将两个方向的信息都放进去的话,应该是能够提升这些任务的性能的。

   针对上面提出的问题,作者提出了BERT,使用的是带掩码的语言模型(MLM,masked language model)预训练目标,减轻了先前提到的单向语言模型限制 。

  • 遮蔽语言模型在输入中每次随机屏遮蔽某些token,目的是根据其上下文来预测被遮蔽的单词(原始词表对应的id),等价于将一个句子挖一些空完后进行完形填空。
  • 跟标准的语言模型从左看到右的不同之处在于:带掩码的语言模型是允许看到左右的信息的,这样的话它允许训练深的双向的transformer模型。
  • 此外,还训练了一个任务,给定两个句子,然后判断这两个句子在原文里面是相邻的,还是随机采样得来的,这样就让模型学习了句子层面的信息。   

        本文的贡献如下:

  • 我们证明了双向预训练对于语言表示的重要性。
    • GPT使用单向语言模型进行预训练,BERT使用遮蔽语言模型来实现预训练的深度双向表示。
    • ELMo只是很简单地把一个从左看到右的语言模型和一个从右看到左的语言模型简单地合并到一起,类似于双向的RNN模型。BERT在双向信息的应用上更好
  • 假设有一个比较好的预训练模型,就不需要再针对特定任务精心设计模型结构。BERT是第一个基于fine-tuning的表示模型,可在一系列sentence-level和token-level任务上实现最先进的性能,其性能优于许多任务特定的体系结构。
  • BERT推动了11项NLP任务的发展。 可以在BERT上找到代码和经过预先训练的模型。代码和模型全部放在:https://github.com/google-research/bert

4 结论

  最近的实验表明,丰富的、无监督的预训练使得即使是资源少(样本少)的任务也可以享受深度神经网络。我们的主要贡献是把前人的工作扩展到深层双向体系结构,使得同样的预训练模型能够成功解决各种NLP任务。

5 相关工作

5.1 基于特征的无监督方法

主要是讲词嵌入、ELMo和之后的一些工作,跳过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值