原创:晋百川

BERT模型自18年10月推出,到目前为止已经有3年多时间了。BERT问世即引起轰动,之后,各种改进版本的预训练模型(Pre-Training Model, PTM)与应用层出不穷。BERT及它的继任者们,确实也不负众望,在多种NLP数据集竞赛榜单,连续多年被各种新出现的预训练模型霸榜,有些榜单,个别模型已经把指标刷到超过人类。今天就带大家聊一下BERT并进行案例实战。

一、BERT介绍

BERT的架构图如图1所示,从架构图我们可以看到BERT分三个模块,分别是Embedding模块、Transformer模块和输出的预微调模块。

(1)Embedding模块:BERT中的该模块是由三种Embedding共同组成而成,如下图所示。


  • Token Embeddings 是词嵌入张量,第一个单词是CLS标志,可以用于之后的分类任务。
  • Segment Embeddings 是句子分段嵌入张量,是为了服务后续的两个句子为输入的预训练任务。
  • Position Embeddings 是位置编码张量,此处注意和传统的Transformer不同,不是三角函数计算的固定位置编码,而是通过学习得出来的。
  • 整个Embedding模块的输出张量就是这3个张量的直接加和结果。

(2)双向Transformer模块:BERT中只使用了经典Transformer架构中的Encoder部分,完全舍弃了Decoder部分。BERT的Transformer的Encoder部分具有12个隐层,输出768维张量,共有12个自注意力头。

不了解Transformer的同学可以看这里!!!

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

(3)预微调模块:

  • 经过中间层Transformer的处理后,BERT的最后一层根据任务的不同需求而做不同的调整即可。
  • 比如对于sequence-level的分类任务,BERT直接取第一个[CLS] token 的final hidden state,再加一层全连接层后进行softmax来预测最终的标签。

  • 对于不同的任务,微调都集中在预微调模块,几种重要的NLP微调任务架构图展示如下

从上图中可以发现,在面对特定任务时,只需要对预微调层进行微调,就可以利用Transformer强大的注意力机制来模拟很多下游任务,并得到SOTA的结果(句子对关系判断, 单文本主题分类, 问答任务(QA),单句贴标签(NER))。

二、BERT的预训练任务

  • 任务一:Masked LM (带mask的语言模型训练)

    • 关于传统的语言模型训练,都是采用left-to-right,或者left-to-right + right-to-left结合的方式,但这种单向方式或者拼接的方式提取特征的能力有限。为此BERT提出一个深度双向表达模型(deep bidirectional representation)。即采用MASK任务来训练模型。

    • 1 在原始训练文本中,随机的抽取15%的token作为参与MASK任务的对象。

    • 2 在这些被选中的token中,数据生成器并不是把它们全部变成[MASK],而是有下列3种情况。

      • 2.1 在80%的概率下,用[MASK]标记替换该token,比如my dog is hairy -> my dog is [MASK]

      • 2.2 在10%的概率下,用一个随机的单词替换token,比如my dog is hairy -> my dog is apple

      • 2.3 在10%的概率下,保持该token不变,比如my dog is hairy -> my dog is hairy

    • 3.模型在训练的过程中,并不知道它将要预测哪些单词?哪些单词是原始的样子?哪些单词被遮掩成了[MASK]?哪些单词被替换成了其他单词?正是在这样一种高度不确定的情况下,反倒逼着模型快速学习该token的分布式上下文的语义,尽最大努力学习原始语言说话的样子。同时因为原始文本中只有15%的token参与了MASK操作,并不会破坏原语言的表达能力和语言规则。


  • 任务二:Next Sentence Prediction (下一句话预测任务)

    • 在NLP中有一类重要的问题比如QA(Quention-Answer),NLI(Natural Language Inference),需要模型能够很好的理解两个句子之间的关系,从而需要在模型的训练中引入对应的任务。在BERT中引入的就是Next Sentence Prediction任务。采用的方式是输入句子对(A,B),模型来预测句子B是不是句子A的真实的下一句话。

    • 1.所有参与任务训练的语句都被选中作为句子A。

      • 1.1 其中50%的B是原始文本中真实跟随A的下一句话。(标记为IsNext,代表正样本)

      • 1.2 其中50%的B是原始文本中随机抽取的一句话。(标记为NotNext,代表负样本)

    • 2.在任务二中,BERT模型可以在测试集上取得97%-98%的准确率。

BERT的变体有哪些

  • bert-base-uncased: 编码器具有12个隐层, 输出768维张量,12个自注意力头,共110M参数量,在小写的英文文本上进行训练而得到。
  • bert-large-uncased: 编码器具有24个隐层,输出1024维张量,16个自注意力头,共340M参数量,在小写的英文文本上进行训练而得到。
  • bert-base-cased: 编码器具有12个隐层,输出768维张量,12个自注意力头,共110M参数量,在不区分大小写的英文文本上进行训练而得到。
  • bert-large-cased: 编码器具有24个隐层,输出1024维张量,16个自注意力头,共340M参数量,在不区分大小写的英文文本上进行训练而得到。
  • bert-base-multilingual-uncased: 编码器具有12个隐层,输出768维张量,12个自注意力头,共110M参数量,在小写的102种语言文本上进行训练而得到。
  • bert-large-multilingual-uncased: 编码器具有24个隐层,输出1024维张量,16个自注意力头,共340M参数量,在小写的102种语言文本上进行训练而得到。
  • bert-base-chinese: 编码器具有12个隐层,输出768维张量,12个自注意力头,共110M参数量,在简体和繁体中文文本上进行训练而得到。

相信大家学到这里肯定又了一些收获,把你们的收获和疑问可以打在评论区,大家一起交流学习!!!

关于BERT预训练模型,你想知道的都在这~相关推荐

  1. 手把手教 | 使用Bert预训练模型文本分类(内附源码)

    作者:GjZero 标签:Bert, 中文分类, 句子向量 本文约1500字,建议阅读8分钟. 本文从实践入手,带领大家进行Bert的中文文本分类和作为句子向量进行使用的教程. Bert介绍 Bert ...

  2. 使用Bert预训练模型进行中文文本分类(基于pytorch)

    前言 最近在做一个关于图书系统的项目,需要先对图书进行分类,想到Bert模型是有中文文本分类功能的,于是打算使用Bert模型进行预训练和实现下游文本分类任务 数据预处理 2.1 输入介绍 在选择数据集 ...

  3. 如何学习使用Bert预训练模型

    目录 (一)bert预训练模型下载 (二)使用bert做中文文本分类 (一)bert预训练模型下载 在bert官网下载自己需要的预训练模型. 下图是进入官网的图片. 点击想要选择的模型,选择Files ...

  4. 如何下载和在本地使用Bert预训练模型

    bert 预训练模型的下载有许多方式,比如从github官网上下载(官网下载的是tensorflow版本的),还可以从源码中找到下载链接,然后手动下载,最后还可以从huggingface中下载. 关于 ...

  5. 金融领域首个开源中文BERT预训练模型,熵简科技推出FinBERT 1.0

    出品 | AI科技大本营 头图 | CSDN付费下载于东方IC 为了促进自然语言处理技术在金融科技领域的应用和发展,熵简科技 AI Lab 近期开源了基于 BERT 架构的金融领域预训练语言模型 Fi ...

  6. 刷新中文阅读理解水平,哈工大讯飞联合发布基于全词覆盖中文BERT预训练模型...

    作者 | HFL 来源 | 哈工大讯飞联合实验室(ID:rgznai100) 为了进一步促进中文自然语言处理的研究发展,哈工大讯飞联合实验室发布基于全词覆盖(Whole Word Masking)的中 ...

  7. 【文本分类】基于BERT预训练模型的灾害推文分类方法、基于BERT和RNN的新闻文本分类对比

    ·阅读摘要: 两篇论文,第一篇发表于<图学学报>,<图学学报>是核心期刊:第二篇发表于<北京印刷学院学报>,<北京印刷学院学报>没有任何标签. ·参考文 ...

  8. BERT预训练模型系列总结

    BERT预训练模型系列总结 文章目录 BERT预训练模型系列总结 BERT模型 BERT模型的输入输出 BERT模型的预训练任务 BERT模型的下游任务 ROBERTa模型 ALBERT模型 MacB ...

  9. BERT预训练模型的演进过程!(附代码)

    文章目录 1. 什么是BERT 2. 从Word Embedding到Bert模型的发展 2.1 图像的预训练 2.2 Word Embedding 2.3 ELMO 2.4 GPT 2.5 BERT ...

  10. BERT预训练模型简单应用(中文句子向量相关性分析)

    目录 一.BERT简单认识 二.Google BERT以及中文模型下载 1.Google BERT源码下载 2.bert-as-server 框架下载 3.中文预训练模型下载 三.bert生成中文句子 ...

最新文章

  1. mysql数据库的F5_windows下mysql每天定时备份数据库几种方法
  2. 移动平台对 meta 标签的定义
  3. 不该失去的,一块钱也不放弃
  4. Cell | 大规模多组织转录组学研究揭示长非编码RNA与人类复杂疾病的联系
  5. matlab中表示拉普拉斯分布_神奇的正态分布
  6. 程序员让开,硅谷将是物理学家的天下,薪水高得离谱
  7. 10.Doctrine2 (2)
  8. 十分钟走进大数据世界
  9. OrCAD PSpice添加Spice模型——Cadence 17.4
  10. 机器学习与Web安全结合的基础
  11. kubernetes学习总结-9Kubernetes的存储机制
  12. Angluar编译过程中出现的TS2339问题
  13. Dubbo入门基础与实例讲解(超详细)
  14. 用nodejs和vue实现消息盒子
  15. tweenMax代码未定义问题
  16. python爬虫(十七)12306案例
  17. 一般英文(java)
  18. 一个月薪10000的北京程序员的真实生活
  19. 【Flutter】GridView的使用之GridView.extent
  20. 记录hyperic-hq搭建开发环境遇到的坑

热门文章

  1. Blender 如何添加渲染AO,Bloom~~
  2. Rosalind全排列的问题
  3. 【基于UDP的网络聊天室】
  4. java模拟HTTP请求(集合了网上搜来的各种)
  5. Gitte (https://gitee.com/) 常用git指令--实例
  6. 如何破解超级用户密码?
  7. Jenkins Gitlab 插件及 Gitlab 全局变量
  8. ViewFlipper用法
  9. 与爱同行,育润走进贫困家庭,助推公益事业
  10. 99.扩展183.信息系统运维维护服务