文章目录

  • 前言
  • 1. 模型结构
    • 1.1 总体框图
    • 1.2 Embedding
    • 1.3 迁移策略
  • 2. 预训练方法
    • 2.1 Masked LM
    • 2.2 Next Sentence Prediction
  • 3. 总结
  • 参考文献

前言

本文讲解Google在2019年发表的论文BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding。从标题可以看出,该论文基于Transformer模型,提出了一款用于语言理解的预训练模型,并在GLUE, SQuAD等nlp任务中都取得了很好的效果。该模型的创新点实际上不在于模型结构,而在于预训练的方法。以下围绕这两方面都进行一些讲解。


1. 模型结构

1.1 总体框图

首先最好还是先理解一下Transfomer,这是BERT模型的基础所在。简而言之,Transfomer包含N个编码器和解码器。编码器将输入序列编码成带有全局新的特征序列,解码器将编码器的特征序列解码成预测结果。BERT使用的正是其中的编码器,模型如下所示。

注意:并不是一个Tm代表一个Transformer,可以看成一行Tm表示一个Transformer的编码器,而编码器也不是两层可以有多层。那么,输入序列送入BERT后,最后一层Tm将对每一个输入token都生成一个新的特征序列,而T则表示任务,一般都是用全连接层来完成分类任务。另外用来对比的是,与GPT是单向的Transformer连接,ELMo是双向的LSTM连接。

1.2 Embedding

从框图上可以看到,输入序列是各token的embedding。在Transfomer中,这种嵌入由word embedding加上positional embedding而来。而在BERT中,还要额外加上一个segment embedding,用于指示各个token属于输入的第几个句子。这是因为有的nlp任务是输入一对句子的,需要借此加以区分。而且,positional embedding也不是沿用三角函数,三种embedding都是学习出来的。
另外,一开始的token,除了要在一开始添加一个起始标志[CLS]之外,还要在不同句子的过渡位置插一个[SEP]标志(如果有多句子的话)。

1.3 迁移策略

BERT是一个预训练模型,所以我们要怎么拿过来用呢?官方为我们提供了各种任务的应用方法。
首先,NLP的下游任务可以分为4类:

  • 句子关系判断:识别蕴含(entailment)、识别语义相似等
  • 分类任务:文本分类、情感计算等
  • 序列标注:分词、实体识别、语义标注等
  • 生成式任务:机器翻译、文本摘要等

    图中 (a) 解决的是句子关系判断问题,MultiNLI(识别蕴含,M推理出N,蕴含/矛盾/中立),QQP(识别语义相似),QNLI(识别是否回答了问题),STS-B(识别语义相似),MRPC(识别语义等价,微软)、RTE(识别蕴含,小数据),SWAG(识别回答问题,大数据)。
    (b) 解决的是分类任务,SST-2(情感计算,斯坦福),CoLA(句子语言性判断,是否能成句)。
    © 解决的是序列标注任务,SQuAD(判断回答的起始和结束时刻,斯坦福问答数据集,从phrase中选取answer)。
    (d) 解决的是序列标注任务,NER(命名实体识别)。
    总的来说 (a) 和 (b) 都是分类任务,差别在于输入的是一个句子还是一对句子。这类任务,只需通过在第一个token(即[CLS]标志)的特征序列送入全连接层即可获取识别结果。© 和 (d) 都是序列标注任务,这类则在多个token的特征序列送入全连接层,获取各自的标注结果。可以看到,目前只有生成式任务还没有被ko。

p.s. 大名鼎鼎的GLUE任务集则包含了MultiNLI、QQP、QNLI、STS-B、MRPC、RTE、WNLI(也是识别蕴含)、SST-2、CoLA。

2. 预训练方法

常见的预训练方法一般是给前面的序列去预测下一个token(像是GPT)。而BERT就提出了两个比较有意思的训练任务 —— Masked LM 和 Next Sentence Prediction。

2.1 Masked LM

为了实现模型的双向,就不能一直给定前面预测后面,于是作者提出了一个trick。在训练过程中,随机mask掉15%的token,即把相应位置的token替换成一个[MASK]标识,而任务的目标就是要去恢复这个句子(包含MASK的词),而损失函数只考虑了MASK位置的预测值,忽视掉非masked的值。这样,MASK的词可前可后,就实现了模型的双向性。

由此也衍生出了一个问题,就是在实际预测的时候是不会碰到[MASK]的,用了太多[MASK]就容易影响到模型。所以作者又用了个小技巧,选中了要mask的token后,其中10%的token会被替代成其他token,10%的token不替换,剩下的80%才被替换为[MASK]。

2.2 Next Sentence Prediction

由于nlp中存在需要输入两个句子的句子关系判断任务,所以需要增设一个让模型理解句子之间关系的任务,于是Next Sentence Prediction应运而生。具体而言,就是输入两个句子,由模型来判断这两个句子是不是连续的上下句。其中,为了保持样本平衡性,选了50%的连续的正样本,再随机选50%的无关的负样本。其实这个任务和seq2seq的任务有点异曲同工之妙,只是从单词级别变到了句子级别。举个例子:
正样本:今天[MASK](天气)真好,正好我们[MASK](出去)吃饭吧。
负样本:今天[MASK](天气)真好,[MASK](我)吃饱了。

3. 总结

其实BERT模型除了提出这两种训练方法外,大量的数据肯定对这个预训练模型有很强的作用,不过一般人没这种计算资源…所以还是很感谢谷歌开源出来的预训练模型,可以很方便的使用并达到非常好的效果。在使用时,如果需要用到自己的数据库上,要么就是完全自己写然后导入BERT模型,要么可以直接使用官方的代码,如run_glue.py,只需要修改数据的预处理,定义好新的类,然后指定类别数等参数,就可以直接使用了。

参考文献

https://www.cnblogs.com/rucwxb/p/10277217.html
https://zhuanlan.zhihu.com/p/46652512

【深度学习模型】讲讲横扫nlp任务的BERT模型相关推荐

  1. 深度学习将会变革NLP中的中文分词

    深度学习将会变革NLP中的中文分词 2016-08-08 19:03 转载 陈圳 0条评论 雷锋网按:本文转自ResysChina高翔,文章主要介绍了1)区分中文分词的方法:2)用深度学习的方法来解决 ...

  2. 大数据分析深度学习在自然语言处理NLP中的应用

    通过深度学习的先进技术,自然语言处理取得了令人难以置信的进步.了解这些强大的模型,并发现这些方法与人类水平的理解有多近(或遥远). 人类有很多感觉,但我们的感官体验通常以视觉为主.考虑到这一点,现代机 ...

  3. 在浏览器中进行深度学习:TensorFlow.js (四)用基本模型对MNIST数据进行识别

    2019独角兽企业重金招聘Python工程师标准>>> 在了解了TensorflowJS的一些基本模型的后,大家会问,这究竟有什么用呢?我们就用深度学习中被广泛使用的MINST数据集 ...

  4. 【深度学习】解析神经网络中的数值稳定性、模型初始化和分布偏移(Pytorch)

    [深度学习]解析神经网络中的数值稳定性.模型初始化和分布偏移 文章目录 1 概述1.1 梯度消失和梯度爆炸1.2 打破对称性 2 参数初始化 3 环境和分布偏移3.1 协变量偏移3.2 标签偏移3.3 ...

  5. 机器学习(Machine Learning)、深度学习(Deep Learning)、NLP面试中常考到的知识点和代码实现

    网址:https://github.com/NLP-LOVE/ML-NLP 此项目是机器学习(Machine Learning).深度学习(Deep Learning).NLP面试中常考到的知识点和代 ...

  6. 深度学习图像超分辨率最新综述:从模型到应用

    点击我爱计算机视觉标星,更快获取CVML新技术 今日arXiv新上论文<Deep Learning for Image Super-resolution:A Survey>,详细回顾了近年 ...

  7. CCAI 2017 | 专访德国语言技术领军者 Hans Uszkoreit:深度学习还不足以解决 NLP 核心问题...

    7 月 22 - 23 日,由中国人工智能学会.阿里巴巴集团 & 蚂蚁金服主办,CSDN.中国科学院自动化研究所承办,云栖社区作为独家直播合作伙伴的第三届中国人工智能大会(CCAI 2017) ...

  8. Keras深度学习实战(1)——神经网络基础与模型训练过程详解

    Keras深度学习实战(1)--神经网络基础与模型训练过程详解 0. 前言 1. 神经网络基础 1.1 简单神经网络的架构 1.2 神经网络的训练 1.3 神经网络的应用 2. 从零开始构建前向传播 ...

  9. 「DLP-KDD 2021征文」及上届论文全集,包含深度学习推荐/广告系统、多目标、模型服务等

    「DLP-KDD 2021征文」及上届论文全集,包含深度学习推荐/广告系统.多目标.模型服务等 在DLP-KDD 2021征稿之际,为大家准备了DLP-KDD2020的全部文章和资源列表,内容涵盖了几 ...

最新文章

  1. 华为AR28-31配置光纤接入
  2. Windows驱动中的Crash回调
  3. asp.net DBHelper类
  4. [蓝桥杯][2013年第四届真题]买不到的数目(动态规划)
  5. android层级关系图,画出 View 的层级 3D 图和树形图来分析层级关系
  6. 在线涂鸦画板小程序源码
  7. mysql索引的增删_mysql索引的增删改查怎么实现?
  8. 26个要素,仅仅依靠百度打造成功网站
  9. android 手机 跑分榜,安兔兔跑分最新排行图 2020年4月Android手机性能榜
  10. 20160809下午14:00公司断网处理过程(网络架构VSS模式)
  11. sqlserver中某列转成以逗号连接的字符串及逆转、数据行转列列转行
  12. 麒麟810怎么样_麒麟810+6G+128G+大电池,千元价格的手机上手体验
  13. oh my Zsh使用手册
  14. Linux系统如何添加IP别名
  15. 字节跳动常见算法面试题top50整理
  16. 搭建环境方便简单教程之php环境详细搭建
  17. jacob word另存为
  18. 一鲸落万物生,公链还需看Hoo Smart Chain,六十余家项目报名万物生长计划
  19. 云计算机中弹性,什么是弹性云计算?
  20. internet时间同步服务器地址(中国国家授时中心)

热门文章

  1. 如何根据业务需求来选择合适的代理IP
  2. 定义一个矩形类Rectangle:(知识点:对象的创建和使用)
  3. 正确理解差异的“专业意义”与“统计学意义”
  4. Fragment 可见性监听方案 - 完美兼容多种 case
  5. C/C++订餐管理系统
  6. 误差反向传播的C++实现
  7. [P3374 【模板】树状数组 1](单点修改,区间查询)
  8. 莎士比亚数据集_如何使用深度学习写莎士比亚
  9. 苹果iPhone用户界面设计经验分享
  10. 垃圾分类的正确姿势?用 OpenCV 人工智能图像识别技术来进行