https://zhuanlan.zhihu.com/p/46997268

NLP突破性成果 BERT 模型详细解读

章鱼小丸子

不懂算法的产品经理不是好的程序员

​关注她

82 人赞了该文章

Google发布的论文《Pre-training of Deep Bidirectional Transformers for Language Understanding》,提到的BERT模型刷新了自然语言处理的11项记录。最近在做NLP中问答相关的内容,抽空写了篇论文详细解读。我发现大部分关注人工智能领域的朋友看不懂里面的主要结论,为了让你快速了解论文精髓,这里特地为初学者和刚接触深度学习的朋友们奉上技能点突破roadmap。如果别人写的论文解读你看不懂,代表你需要补充基础知识啦。另外给了主要论文参考,在第五部分,希望对你在NLP领域全面的了解有所帮助。

一、 总体介绍

BERT模型实际上是一个语言编码器,把输入的句子或者段落转化成特征向量(embedding)。论文中有两大亮点:1.双向编码器。作者沿用了《attention is all you need》里提到的语言编码器,并提出双向的概念,利用masked语言模型实现双向。2.作者提出了两种预训练的方法Masked语言模型和下一个句子的预测方法。作者认为现在很多语言模型低估了预训练的力量。Masked语言模型比起预测下一个句子的语言模型,多了双向的概念。

二、 模型框架

BERT模型复用OpenAI发布的《Improving Language Understanding with Unsupervised Learning》里的框架,BERT整体模型结构与参数设置都尽量做到OpenAI GPT一样,只在预训练方法做了改造。而GPT让编码器只学习每一个token(单词)与之前的相关内容。

上图是根据OpenAI GPT的架构图做的改动,以便读者更清楚的了解整个过程。

整体分为两个过程:1.预训练过程(左边图)预训练过程是一个multi-task learning,迁移学习的任务,目的是学习输入句子的向量。2微调过程(右边图)可基于少量监督学习样本,加入Feedword神经网络,实现目标。因为微调阶段学习目标由简单的feedward神经网络构成,且用少量标注样本,所以训练时间短。

1.输入表示

对比其他语言模型输入是一个句子或者文档,Bert模型对输入做了更宽泛的定义,输入表示即可以是一个句子也可以一对句子(比如问答和答案组成的问答对)。

输入表示为每个词对应的词向量,segment向量,位置向量相加而成。(位置向量参考《attention is all you need》)

2.预训练过程-Masked语言模型

Masked语言模型是为了训练深度双向语言表示向量,作者用了一个非常直接的方式,遮住句子里某些单词,让编码器预测这个单词是什么。

训练方法为:作者随机遮住15%的单词作为训练样本。

(1)其中80%用masked token来代替。

(2)10%用随机的一个词来替换。

(3)10%保持这个词不变。

作者在论文中提到这样做的好处是,编码器不知道哪些词需要预测的,哪些词是错误的,因此被迫需要学习每一个token的表示向量。另外作者表示,每个batchsize只有15%的词被遮盖的原因,是性能开销。双向编码器比单项编码器训练要慢。

3.预测下一个句子。

预训练一个二分类的模型,来学习句子之间的关系。预测下一个句子的方法对学习句子之间关系很有帮助。

训练方法:正样本和负样本比例是1:1,50%的句子是正样本,随机选择50%的句子作为负样本。

[CLS]为句子起始符,[MASK]为遮蔽码,[SEP]为分隔符和截止符

4.预训练阶段参数

(1)256个句子作为一个batch,每个句子最多512个token。

(2)迭代100万步。

(3)总共训练样本超过33亿。

(4)迭代40个epochs。

(5)用adam学习率, 1 = 0.9, 2 = 0.999。

(6)学习率头一万步保持固定值,之后线性衰减。

(7)L2衰减,衰减参数为0.01。

(8)drop out设置为0.1。

(9)激活函数用GELU代替RELU。

(10)Bert base版本用了16个TPU,Bert large版本用了64个TPU,训练时间4天完成。

(论文定义了两个版本,一个是base版本,一个是large版本。Large版本(L=24, H=1024, A=16, Total Parameters=340M)。base版本( L=12, H=768, A=12, Total Pa- rameters=110M)。L代表网络层数,H代表隐藏层数,A代表self attention head的数量。)

5.微调阶段

微调阶段根据不同任务使用不同网络模型。在微调阶段,大部分模型的超参数跟预训练时差不多,除了batchsize,学习率,epochs。

训练参数:

Batch size: 16, 32

Learning rate (Adam): 5e-5, 3e-5, 2e-5

Number of epochs: 3, 4

三、实验效果

1.分类数据集上的表现

2.问答数据集上的表现

在问答数据集SQuAD v1.1上的表现,TriviaQA是一个问答数据集。EM的基本算法是比较两个字符串的重合率。F1是综合衡量准确率和召回率的一个指标。

3.命名实体识别上的表现

4.常识推理上的表现

四、模型简化测试

Blation study就是为了研究模型中所提出的一些结构是否有效而设计的实验。对该模型推广和工程化部署有极大作用。

1.预训练效果测试

NO NSP: 用masked语言模型,没用下一个句子预测方法(next sentence prediction)

LTR&NO NSP: 用从左到右(LTR)语言模型,没有masked语言模型,没用下一个句子预测方法

+BiLSTM: 加入双向LSTM模型做预训练。

2.模型结构的复杂度对结果的影响

L代表网络层数,H代表隐藏层数,A代表self attention head的数量。

3.预训练中training step对结果的影响

4.基于特征的方法对结果的影响

五、重要参考论文

如何你想了解2017年到2018年NLP领域重要发展趋势,你可以参考以下几篇论文。google直接就可以下载。

《Attention is all you need》2017年NLP领域最重要突破性论文之一。

《Convolutional Sequence to Sequence Learning》2017年NLP领域最重要突破性论文之一。

《Deep contextualized word representations》2018年NAACL最佳论文,大名鼎鼎的ELMO。

《Improving Language Understanding by Generative PreTraining》,OpenAI GPT,Bert模型主要借鉴和比较对象。

《An efficient framework for learning sentence representations》句子向量表示方法。

《Semi-supervised sequence tagging with bidirectional language models》提出双向语言模型。

六、个人观点

个人觉得如果你大概了解近两年NLP的发展的话,BERT模型的突破在情理之中,大多思想是借用前人的突破,比如双向编码器想法是借助这篇论文《Semi-supervised sequence tagging with bidirectional language models》。并且,他提出的一些新的思想,是我们自然而然就会想到的。(十一在家的时候,在做问答模型的时候,我就在想,为什么不能把前一个句子和后一个句子作为标注数据,组成一个二分类模型来训练呢。)

整片论文最有价值的部分,我认为是预训练的两种方法,不需要大量标注数据,在工程实践和一些NLP基础训练中具有很大借鉴意义。

自然语言处理领域2017年和2018年的两个大趋势:一方面,模型从复杂回归到简单。另一方面,迁移学习和半监督学习大热。这两个趋势是NLP从学术界向产业界过渡的苗头,因为现实情况往往是,拿不到大量高质量标注数据,资源设备昂贵解决不了效率问题。

NLP突破性成果 BERT 模型详细解读 bert参数微调相关推荐

  1. YOLO v3模型详细解读

    目录 前言 1.网络架构 1.1 backbone网络 2.Bounding Box Prediction-边界框预测 2.1 多尺度预测 2.2 anchor网格偏移量预测 2.3 Yolo Hea ...

  2. ESIM模型详细解读

    由于最近2019中国高校计算机大赛--大数据挑战赛使用到了ESIM模型,并且效果拔群,所以在这里特意写一下,记录下来. 感兴趣代码和比赛的:https://github.com/LiuYaKu/201 ...

  3. DDD(领域驱动设计)系列主题:失血模型,贫血模型,充血模型和胀血模型详细解读和代码案例说明!

    目录 失血模型,贫血模型,充血模型和胀血模型定义及优点和缺点 失血模型 贫血模型 充血模型 胀血模型 失血模型,贫血模型,充血和胀血代码样例 失血模型代码样例 贫血模型代码样例 充血模型代码样例 DD ...

  4. [深度学习] 自然语言处理 --- BERT模型原理

    一 BERT简介 NLP:自然语言处理(NLP)是信息时代最重要的技术之一.理解复杂的语言也是人工智能的重要组成部分.Google AI 团队提出的预训练语言模型 BERT(Bidirectional ...

  5. NLP大杀器BERT模型解读

    谷歌研究人员通过新的BERT模型在11项NLP任务中夺得STOA结果,这在自然语言处理学界以及工业界都引起了不小的热议.作者通过在33亿文本的语料上训练语言模型,再分别在不同的下游任务上微调,这样的模 ...

  6. [NLP自然语言处理]谷歌BERT模型深度解析

    BERT模型代码已经发布,可以在我的github: NLP-BERT--Python3.6-pytorch 中下载,请记得start哦 目录 一.前言 二.如何理解BERT模型 三.BERT模型解析 ...

  7. 【NLP】从WE、ELMo、GPT到Bert模型—自然语言处理中的预训练技术发展史

    Bert最近很火,应该是最近最火爆的AI进展,网上的评价很高,那么Bert值得这么高的评价吗?我个人判断是值得.那为什么会有这么高的评价呢?是因为它有重大的理论或者模型创新吗?其实并没有,从模型创新角 ...

  8. 从Word Embedding到Bert模型---NLP中预训练发展史

    本文转自张俊林老师,希望加深记忆及理解. 本文的主题是自然语言处理中的预训练过程,会大致说下NLP中的预训练技术是一步一步如何发展到Bert模型的,从中可以很自然地看到Bert的思路是如何逐渐形成的, ...

  9. bert模型简介、transformers中bert模型源码阅读、分类任务实战和难点总结

    bert模型简介.transformers中bert模型源码阅读.分类任务实战和难点总结:https://blog.csdn.net/HUSTHY/article/details/105882989 ...

最新文章

  1. win7修改网络计算机名字,小编分析win7系统修改计算机名字的操作方法
  2. UVA1025 城市里的间谍 A Spy in the Metro(2003 ICPC world final)(DAG上DP)
  3. 深度学习100例-卷积神经网络(CNN)识别眼睛状态 | 第17天
  4. Java 、Python、C++哪一个发展前景更好?
  5. JVM调优总结(一)
  6. IoU,ROI 和 ROC,AUC区分
  7. 中单引号怎么转义_在JavaScript中组合字符串的4种方法
  8. C++ 类的静态成员详细讲解(转)
  9. 基于SSM的停车位收费系统
  10. linux -- CW8.8 编译 提示缺少libstdc++.so.5的error
  11. 这两种方法能使PDF不能被复制和修改
  12. MATLAB数据导入汇总
  13. Spring Boot电商项目54:订单模块三:【前台:订单详情】接口;
  14. evernote 有道_如何备份Evernote笔记本(以防万一)
  15. mysql 1114错误_mysql出现错误编码1114的解决方法
  16. win10 android叹号,win10网络连接感叹号如何解决
  17. app图标icon大全
  18. DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录
  19. PandoraBox登录无法后台,出现/usr/lib/lua/luci/dispatcher.lua:461(2021-12-19亲测)
  20. 布袋除尘器过滤风速多少_布袋除尘器的过滤风速一般取多少

热门文章

  1. 端口映射问题:Bad Request This combination of host and port requires TLS.
  2. 2021-2027年中国视频监控设备行业市场需求预测与投资战略规划分析报告
  3. GCC 连接器、链接标准库 gcc -l、链接手动创建库(指定目录的库 gcc -L)
  4. java数据类型相互转换工具类
  5. 比Momentum更快:揭开Nesterov Accelerated Gradient的真面目NAG 梯度下降
  6. LeetCode简单题之找出数组排序后的目标下标
  7. RESTful风格及其SpringMVC实现
  8. TensorFlow Keras API用法
  9. BEP 7:CUDA外部内存管理插件(上)
  10. 2016计算机二级java_2016计算机二级JAVA练习题及答案