关于BERT预训练模型,你想知道的都在这~
原创:晋百川
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预训练模型,你想知道的都在这~相关推荐
- 手把手教 | 使用Bert预训练模型文本分类(内附源码)
作者:GjZero 标签:Bert, 中文分类, 句子向量 本文约1500字,建议阅读8分钟. 本文从实践入手,带领大家进行Bert的中文文本分类和作为句子向量进行使用的教程. Bert介绍 Bert ...
- 使用Bert预训练模型进行中文文本分类(基于pytorch)
前言 最近在做一个关于图书系统的项目,需要先对图书进行分类,想到Bert模型是有中文文本分类功能的,于是打算使用Bert模型进行预训练和实现下游文本分类任务 数据预处理 2.1 输入介绍 在选择数据集 ...
- 如何学习使用Bert预训练模型
目录 (一)bert预训练模型下载 (二)使用bert做中文文本分类 (一)bert预训练模型下载 在bert官网下载自己需要的预训练模型. 下图是进入官网的图片. 点击想要选择的模型,选择Files ...
- 如何下载和在本地使用Bert预训练模型
bert 预训练模型的下载有许多方式,比如从github官网上下载(官网下载的是tensorflow版本的),还可以从源码中找到下载链接,然后手动下载,最后还可以从huggingface中下载. 关于 ...
- 金融领域首个开源中文BERT预训练模型,熵简科技推出FinBERT 1.0
出品 | AI科技大本营 头图 | CSDN付费下载于东方IC 为了促进自然语言处理技术在金融科技领域的应用和发展,熵简科技 AI Lab 近期开源了基于 BERT 架构的金融领域预训练语言模型 Fi ...
- 刷新中文阅读理解水平,哈工大讯飞联合发布基于全词覆盖中文BERT预训练模型...
作者 | HFL 来源 | 哈工大讯飞联合实验室(ID:rgznai100) 为了进一步促进中文自然语言处理的研究发展,哈工大讯飞联合实验室发布基于全词覆盖(Whole Word Masking)的中 ...
- 【文本分类】基于BERT预训练模型的灾害推文分类方法、基于BERT和RNN的新闻文本分类对比
·阅读摘要: 两篇论文,第一篇发表于<图学学报>,<图学学报>是核心期刊:第二篇发表于<北京印刷学院学报>,<北京印刷学院学报>没有任何标签. ·参考文 ...
- BERT预训练模型系列总结
BERT预训练模型系列总结 文章目录 BERT预训练模型系列总结 BERT模型 BERT模型的输入输出 BERT模型的预训练任务 BERT模型的下游任务 ROBERTa模型 ALBERT模型 MacB ...
- BERT预训练模型的演进过程!(附代码)
文章目录 1. 什么是BERT 2. 从Word Embedding到Bert模型的发展 2.1 图像的预训练 2.2 Word Embedding 2.3 ELMO 2.4 GPT 2.5 BERT ...
- BERT预训练模型简单应用(中文句子向量相关性分析)
目录 一.BERT简单认识 二.Google BERT以及中文模型下载 1.Google BERT源码下载 2.bert-as-server 框架下载 3.中文预训练模型下载 三.bert生成中文句子 ...
最新文章
- mysql数据库的F5_windows下mysql每天定时备份数据库几种方法
- 移动平台对 meta 标签的定义
- 不该失去的,一块钱也不放弃
- Cell | 大规模多组织转录组学研究揭示长非编码RNA与人类复杂疾病的联系
- matlab中表示拉普拉斯分布_神奇的正态分布
- 程序员让开,硅谷将是物理学家的天下,薪水高得离谱
- 10.Doctrine2 (2)
- 十分钟走进大数据世界
- OrCAD PSpice添加Spice模型——Cadence 17.4
- 机器学习与Web安全结合的基础
- kubernetes学习总结-9Kubernetes的存储机制
- Angluar编译过程中出现的TS2339问题
- Dubbo入门基础与实例讲解(超详细)
- 用nodejs和vue实现消息盒子
- tweenMax代码未定义问题
- python爬虫(十七)12306案例
- 一般英文(java)
- 一个月薪10000的北京程序员的真实生活
- 【Flutter】GridView的使用之GridView.extent
- 记录hyperic-hq搭建开发环境遇到的坑