BERT 详解

栏目: 编程工具 · 发布时间: 5年前

内容简介:目前最强NLP模型,横扫NLP11项任务。利用Transformer去预训练双向语言模型和NSP任务,再finetune达到了各种任务的最优效果。在NLP中,利用语言模型去做预训练,能显著提升许多任务的效果。两种迁移方式

目前最强NLP模型,横扫NLP11项任务。利用Transformer去预训练双向语言模型和NSP任务,再finetune达到了各种任务的最优效果。

背景

简介

在NLP中,利用语言模型去做预训练,能显著提升许多任务的效果。

句子级别
词级别

两种迁移方式

  • 基于特征:ELMo
  • 基于finetune:OpenAI GPT

存在的问题

单向语言模型和两个方向语言模型简单拼接,这两个方法的能力都小于双向语言模型。

单向语言模型对于:

sentence-level
token-level

相关研究

1. 基于特征的方法

  • 词向量
  • sentenceparagraph 向量
  • 从语言模型中获得具有上下文语义的向量--ELMo

2. 基于Finetune的方法

预训练一个语言模型,在下游任务只需要简单finetune,只需要从新训练很少的参数。

3. 基于监督数据的迁移学习

从一些大规模是数据集中进行迁移学习。比如

BERT模型

模型架构

1. 总体架构

利用Transformer的Encoder去训练双向语言模型 BERT ,再在BERT后面接上特定任务的分类器。

BERT 详解

使用方法示例:

BERT 详解

2. 输入与输出

BERT 详解

BERT 详解

BERT 详解

3. 两种规模

  • \(\rm{BERT}_{BASE}\)\(\rm{L=12, H=768, A=12}\) 。总参数为110M。和GPT一样
  • \(\rm{BERT}_{LARGE}\)\(\rm{L=24, H=1024, A=16}\) 。总参数为340M。最优模型

BERT 详解

BERT 详解

单个位置的输入

每个位置输入三个部分相加而成:

wordpiece-token
位置向量
段向量

一些符号:

  • CLS :special classification embedding,用于分类的向量,会聚集所有的分类信息
  • SEP :输入是QA或2个句子时,需添加 SEP 标记以示区别
  • \(E_A\)\(E_B\) :输入是QA或2个句子时,标记的sentence向量。如只有一个句子,则是sentence A向量

BERT 详解

特定任务的BERT

  • 单句子分类:CLS+句子。利用CLS进行分类
  • 多句子分类:CLS+句子A+SEP+句子B。利用CLS分类
  • SQuAD:CLS+问题+SEP+文章。利用所有文章单词的输出做计算start和end
  • NER:CLS+句子。利用句子单词做标记

BERT 详解

预训练语言模型

我们都知道单向语言模型的能力很差,单独训练两个方向的语言模型再把结果拼接起来也不好。那么怎么才能训练一个真正的双向语言模型呢?如何让一个单词 is conditioned on both left and right context 呢?答案就是 Masked Language Model

Masked LM

在进行WordPiece之后,随机掩盖一些(15%)词汇,再去预测这些词汇。

BERT 详解

但是有2个缺点

缺点1 大量mask标记,造成预训练和finetune时候的差距,因为finetune没有mask

  • 80%:替换为mask
  • 10%:随机替换为其它词汇
  • 10%:保留原来的词汇。这部分正确的保留,保证了语言能力。

由于Transformer不知道要预测哪个词语,所以它会强制学习到所有单词的上下文表达。

缺点2 收敛很慢,但是效果好

比单向语言模型收敛较慢。

预训练NSP任务

对于像QA、NLI等需要理解多个句子之间关系的下游任务,只靠语言模型是不够的。还 需要提前学习到句子之间的关系

Next Sentence Prediction

NSP- Next Sentence Prediction ,是一个二分类任务。输入是A和B两个句子,标记是 IsNextNotNext ,用来判断B是否是A后面的句子。这样,就能从大规模预料中学习到一些句间关系。

BERT 详解

模型最终能达到97%-98%的准确率,对QA和NLI都很有效果。

预训练细节

数据组成

语料是下面两个库,合计33亿词汇。采用文档级别的语料,有利于学习长依赖序列。

BooksCorpus
英文维基百科

从语料库中随机选择2个片段(较长)作为两个AB句子,构成一条输入数据:

  • 0.5概率A-B两个句子连续,0.5概率随机选择B
  • A使用A embedding,B使用B embedding
  • A和B总长度最大为512 tokens

WordPiece Tokenization 后再mask掉15%的词汇。

训练参数

  • batch_size :256。每条数据长度:512
  • 100万步,40个epoch。语料合计33亿词汇
  • Adam\(\beta_1=0.9, \beta_2=0.999\)
  • L2权值衰减为0.01。所有层的dropout为0.1
  • 学习率的warmup 的step为10000
  • GELU 激活函数
  • 训练loss:LM和NSP的loss加起来
  • BERT base 16个TPU,Large 64个TPU,训练4天

Finetune细节

两种不同类型的任务所需要的向量,详情见特定任务的BERT

  • sentence-level :一般只拿 CLS 位置的向量,过线性层再softmax即可得到分类结果
  • token-level :SQuAD或NER,取对应位置的向量,过线性层再softmax得到相应的结果

Finetune时超参数基本一致,但有一些是与特定任务相关的。下面是比较好的选择

  • Batch size :16, 32
  • 学习率\(5*10^{-5}\)\(3*10^{-5}\)\(2*10^{-5}\)
  • epoch :3,4

BERT与GPT比较

BERT和OpenAI GPT都是使用Transformer进行预训练语言模型, 再进行finetune达到不错的效果。区别如下:

项目 BERT GPT
训练数据 BooksCorpus(8亿)+维基百科(25亿) BooksCorpus(8亿)
任务 双向语言模型(MLM)+NSP+Finetune 单向语言模型+Finetune
Transformer Encoder Decoder
符号 CLS, SEP, sentence A-B Start, SEP, 结束(CLS)
符号使用 预训练、finetune过程 finetune过程
Batch数据 1M步,128000个词汇 1M步,32000个词汇
finetune学习率 与特定任务相关 与预训练一样, \(5*10^{-5}\)

实验结果

9项GLUE任务

General Language Understanding Evaluation 包含了很多自然语言理解的任务。

1. MNLI

Multi-Genre Natural Language Inference 是一个众包大规模的文本蕴含任务。

给2个句子,判断第二个句子与第一个句子之间的关系。蕴含、矛盾、中立的

2. QQP

Quora Question Pairs

给2个问题,判断是否语义相同

3. QNLI

Question Natural Language Inference 是一个二分类任务,由SQuAD数据变成。

给1个(问题,句子)对,判断句子是否包含正确答案

4. SST-2

Stanford Sentiment Treebank ,二分类任务,从电影评论中提取。

给1个评论句子,判断情感

5. CoLA

The Corpus of Linguistic Acceptablity ,二分类任务,判断一个英语句子是否符合语法的

给1个英语句子,判断是否符合语法

6. STS-B

The Semantic Textual Similarity Benchmark ,多分类任务,判断两个句子的相似性,0-5。由新闻标题和其他组成

给2个句子,看相似性

7. MRPC

Microsoft Research Paraphrase Corpus ,2分类任务,判断两个句子是否语义相等,由网上新闻组成。05年的,3600条训练数据。

给1个句子对,判断2个句子语义是否相同

8. RTE

Recognizing Textual Entailment ,二分类任务,类似于MNLI,但是只是蕴含或者不蕴含。训练数据更少

9. WNLI

Winograd NLI 一个小数据集的NLI。据说官网评测有问题。所以评测后面的评测没有加入这个

GLUE评测结果

对于 sentence-level 的分类任务,只用 CLS 位置的输出向量来进行分类。

BERT 详解

SQuAD-v1.1

SQuAD属于 token-level 的任务,不是用CLS位置,而是用所有的文章位置的向量去计算开始和结束位置。

Finetune了3轮,学习率为 \(5*10^{-5}\) ,batchsize为32。取得了最好的效果

BERT 详解

NER

BERT 详解

SWAG

The Situations With Adversarial Generations 是一个常识性推理数据集,是一个四分类问题。给一个背景,选择一个最有可能会发生的情景。

Finetune了3轮,学习率为 \(2*10^{-5}\) ,batchsize=16

BERT 详解

效果分析

任务影响

No NSP:不加NSP任务;LTR 单向语言模型。

  • NSP:对SQuAD、QNLI、MNLI有影响,下降1个点左右
  • 双向LM:如果是LTR,SQuAD、MRPC都严重下降10个点。因为 token-level的任务,更需要右边上下文的信息

BERT 详解

模型大小

BERT的base和large的参数分别为:110M和340M。

一般来说,对于大型任务,扩大模型会提升效果。但是, BERT得到充分预训练以后,扩大模型,也会对小数据集有提升 !这是第一个证明这个结论的任务。

BERT 详解

训练步数

  • 确实需要训练100万步。12800词/batch
  • MLM收敛到最优慢,但是效果好。在早期就早早超过单向语言模型了

BERT 详解

BERT使用方法

基于finetune

BERT 详解

基于特征

Finetune稍微麻烦一些。可以使用BERT预训练好的 contextualized embeddings ,每一层都有。

BERT 详解

其中效果最好的方法,就是 拼接最后四层的向量

BERT 详解

BERT 详解

参考和思考

参考

思考

  • 今年很流行 无监督预训练和有监督finetune,那么有什么演变历程吗?
  • BERT的成功会是因为更多的数据吗?
  • BERT很通用太重量级,8个GPU据说要训练一年。普通人难以训练。
  • BERT是一个通用预训练模型,那么我们还要继续研究特定任务的架构吗?

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

解密SEO

解密SEO

欧朝晖 / 电子工业出版社 / 2007-05-01 / 49.80元

《解密SEO:搜索引擎优化与网站成功战略》帮助读者建立搜索营销的概念,分析搜索营销中的几种形式的手段,并从认识搜索引擎的原理开始,导出搜索引擎优化的具体解释,向读者引入以搜索引擎优化为宗旨的网站建设的新观念和设计理念。对网站结构优化、单页优化、链接优化等技术进行了详细的解说和示范。读者还可以接触到网站养育的新概念,帮助读者网站发展成熟,达到网络营销的目标。对搜索引擎优化中观念上和技术上常犯的错误,......一起来看看 《解密SEO》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具