BERT(NAACL 2019)-NLP预训练大模型论文解读

news2024/11/18 0:35:56

文章目录

  • 摘要
  • 算法
    • BERT预训练
      • Masked LM
      • NSP
    • Fine-tune BERT
  • 实验
    • GLUE
    • SQuAD v1.1
    • SQuAD v2.0
    • SWAG
    • 消融实验
      • 预训练任务影响
      • 模型大小影响
      • BERT基于特征的方法
  • 结论

论文: 《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》
github: https://github.com/google-research/bert

摘要

BERT利用左右双向上下文表征在无标注文本进行预训练,通过增加额外输出层,应用于下游任务,在多个任务取得SOTA性能;

本文主要贡献:
1、通过MLM(masked language models)进行双向表征预训练;
2、BERT通过finetune而不需特定结构即可达到SOTA;

算法

BERT分为两步:
预训练、finetune;如图1所示,
在这里插入图片描述
模型结构:
B E R T b a s e ( L = 12 , H = 768 , A = 12 , T o t a l P a r a m e t e r s = 110 M ) BERT_{base} (L=12, H=768, A=12, Total Parameters=110M) BERTbase(L=12,H=768,A=12,TotalParameters=110M)
B E R T l a r g e ( L = 24 , H = 1024 , A = 16 , T o t a l P a r a m e t e r s = 340 M ) BERT_{large} (L=24, H=1024, A=16, Total Parameters=340M) BERTlarge(L=24,H=1024,A=16,TotalParameters=340M)
输入输出:
单个句子(任意范围)或成对句子(比如问答),输入表征由对应token、segment及位置编码构成,如图2。
在这里插入图片描述

BERT预训练

Masked LM

双向模型比单向模型或两单向模型concate后模型表达能力要强;标准有条件语言模型只能单向训练,双向将导致每个单词间接看到自己;
因此作者对输入token进行随机mask(15%),然后预测这些token,该过程为MLM(masked LM),最终mask token对应中间向量送入输出softmax与标准LM一致;
但是这样会导致预训练与finetuen不一致,因为finetune时没有mask token,为缓和此问题,作者使用仍随机选择15% token,若第i个token被选中,则其有80%概率替换为[MASK],10%概率选择随机token,10%概率保持不变。

NSP

为理解句子之间相关关系,比如问答系统(QA)、自然语言推理(NLI),作者增加下句话预测(NSP)任务,具体而言,每个训练样例选择句子A和句子B,句子B有50%概率紧跟句子A,有50%概率为语料库中随机选取,如图1中C用于预测B是否为A的下一句,预训练中可达到97%-98%精度;
作者使用文档级语料库而非打乱句子级别语料库,用于提取长连续序列

Fine-tune BERT

对于每个具体任务,插入任务相关输入、输出,训练BERT所有参数;sequence-level任务如图4a、4b;token-level任务如图4c、4d。
在这里插入图片描述

实验

GLUE

利用最后一层向量 C ∈ R H C \in R^H CRH,为输入token[CLS]对应的聚合特征,通过分类层输出需要结果;
结果如表1,BERT大幅超越现有方法;
在这里插入图片描述

SQuAD v1.1

任务:给出问题及来自维基百科包含该问题答案的一段话,该任务可以预测答案在段落中范围;
作者引入起始位置向量 S ∈ R H S \in R^H SRH及结束位置向量 E ∈ R H E\in R^H ERH;位置i,j为答案区域得分 S c o r e = S ⋅ T i + E ⋅ T j Score=S·T_i + E·T_j Score=STi+ETj
实验结果如表2,BERT集成系统超越top1方案1.5F1、单系统超越1.3F1;
在这里插入图片描述

SQuAD v2.0

SQuAD v2.0允许提供段落中可能不存在答案;作者在【CLS】token设置start和end标志位,根据 s n u l l = S ⋅ C + E ⋅ C s_{null} = S·C + E·C snull=SC+EC判断是否有答案;实验结果如表3,超越最佳方案5.1F1。
在这里插入图片描述

SWAG

任务:给出一个句子,从四个选择中选择最可能的下一句;
实验结果如表4, B E R T l a r g e BERT_{large} BERTlarge超越最优方案GPT 8.3
在这里插入图片描述

消融实验

预训练任务影响

结果如表5,移除NSP对QNLI、MNLI、SQuAD 1.1任务影响比较大;在所有任务上LTR比MLM结果更糟糕;
在这里插入图片描述

模型大小影响

ppl越小,模型越好
表6展示BERT不同模型大小影响,
在这里插入图片描述

BERT基于特征的方法

如图7, B E R T l a r g e BERT_{large} BERTlarge基于预训练方案比整个模型finetune的SOTA方法低0.3
在这里插入图片描述

结论

作者提出的双向网络结构,可将同一预训练模型成功处理多个NLP任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/338820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT+OpenGL 摄像机

QTOpenGL 摄像机 本篇完整工程见gitee:QtOpenGL 对应点的tag,由turbolove提供技术支持,您可以关注博主或者私信博主 OpenGL本身没有摄像机的定义,但是我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一…

Linux内核启动(2,0.11版本)内核启动前的苦力活与内核启动

内核启动前的工作 在上一章的内容中,我们跳转到了setup.s的代码部分,这章我们先讲一讲setup做了什么吧 entry start start:! ok, the read went well so we get current cursor position and save it for ! posterity.mov ax,#INITSEG ! this is done …

Flowable进阶学习(十)定时器、ServiceTask服务任务、ScriptTask脚本任务

文章目录一、定时器1. 流程定义定时激活2. 流程实例定时挂起3. 定时任务执行过程ServiceTask 服务任务委托表达式表达式类中字段ScriptTask 脚本任务JS TASK一、定时器 相关知识链接阅读:事件网关——定时器启动事件 1. 流程定义定时激活 可以通过activateProces…

材质笔记 - Simluate Solid Surface

光的行为 当光和物体相遇时,光会有三种行为:被物体反射、穿过物体(物体是透明或半透明的)或者被吸收。 高光反射和漫反射 高光反射(Specular Reflection)会在表面光滑且反光的物体上看到,比如镜…

SMART PLC时间间隔定时器应用(高速脉冲测频/测速)

高速脉冲计数测量频率,专栏有系列文章分析讲解,这里不再赘述(原理都是利用差分代替微分)。具体链接如下: 西门子SMART PLC高速脉冲计数采集编码器速度(RC滤波)_RXXW_Dor的博客-CSDN博客这篇文章主要讲解西门子 SMART PLC高速计数采集编码器脉冲信号计算速度,根据编码器脉…

鸢尾花数据集分类(PyTorch实现)

一、数据集介绍 Data Set Information: This is perhaps the best known database to be found in the pattern recognition literature. Fisher’s paper is a classic in the field and is referenced frequently to this day. (See Duda & Hart, for example.) The data…

[Android Studio]Android 数据存储-文件存储学习笔记-结合保存QQ账户与密码存储到指定文件中的演练

🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 📋笔记目…

戴尔游匣G16电脑U盘安装系统操作教程分享

戴尔游匣G16电脑U盘安装系统操作教程分享。有用户在使用戴尔游匣G16电脑的时候遇到了系统问题,比如电脑蓝屏、自动关机重启、驱动不兼容等问题。遇到这些问题如果无法进行彻底解决,我们可以通过U盘重新安装系统的方法来解决,因为这些问题一般…

I.MX6ULL内核开发7:led字符设备驱动实验

目录 一、led字符设备驱动实验 二、驱动模块初始化 三、虚拟地址读写 四、自定义led的file_operation接口 五、拷贝数据 六、register_chrdev函数 七、 __register_chrdev函数 八、编译执行 一、led字符设备驱动实验 驱动模块内核模块(.ko)驱动接口(file_operations) …

Mysql 增删改查(一) —— 查询(条件查询where、分页limits、排序order by)

查询 select 可以认为是四个基本操作中使用最为频繁的操作,然而数据量比较大的时候,我们不可能查询所有内容,我们一般会搭配其他语句进行查询: 假如要查询某一个字段的内容,可以使用 where假如要查询前几条记录&#…

STM32----搭建Arduino开发环境

搭建Arduino开发环境前言一、Arduino软件1.软件下载2.软件安装3.软件操作二、Cortex官方内核三、烧录下载四、其他第三方内核1.Libmaple内核2.Steve改进的LibMaple 内核3.STMicroelectronics(ST)公司编写的内核总结前言 本章介绍搭建STM32搭建Arduino开发环境,包括…

leetcode470 用Rand7()实现Rand10()

力扣470 第一步:根据Rand7()函数制作一个可以随机等概率生成0和1的函数rand_0and1 调用Rand7()函数,随机等概率生成1,2,3,4,5,6,7 这时我们设置:生成1,2&a…

“深度学习”学习日记。卷积神经网络--用CNN的实现MINIST识别任务

2023.2.11 通过已经实现的卷积层和池化层,搭建CNN去实现MNIST数据集的识别任务; 一,简单CNN的网络构成: 代码需要在有网络的情况下运行,因为会下载MINIST数据集,运行后会生成params.pkl保留训练权重&…

【吉先生的Java全栈之路】

吉士先生Java全栈学习路线🧡第一阶段Java基础: 在第一阶段:我们要认真听讲,因为基础很重要!基础很重要!基础很重要!!! 重要的事情说三遍。在这里我们先学JavaSE路线;学完之后我们要去学第一个可视化组件编程《GUI》;然后写个《贪吃蛇》游戏耍…

微搭低代码从入门到精通05-变量定义

我们上一篇对应用编辑器有了一个整体的介绍。要想零基础开发小程序,就得从各种概念开始学起。 如果你是零基础学习开发,无论学习哪一门语言,第一个需要掌握的知识点就是变量。 那么什么是变量?变量其实就是存放数据的一个容器&a…

专题 | 防抖和节流

一 防抖:单位时间内,频繁触发事件,只执行最后一次 场景:搜索框搜索输入(利用定时器,每次触发先清掉以前的定时器,从新开始) 节流:单位时间内,频繁触发事件&…

Yii2模板:自定义头部脚部文件,去掉头部脚部文件

一、yii安装完成之后,运行结果如下图二、如何自定义头部脚部文件呢0、默认展示1、在类里定义,在整个类中生效2、在方法中定义,在当前方法中生效3、home模板介绍三、去掉头部脚部文件1、控制 $layout 的值2、把action中的render改为renderPart…

前端对于深拷贝和浅拷贝的应用和思考

浅拷贝 浅拷贝 : 浅拷贝是指对基本类型的值拷贝,以及对对象类型的地址拷贝。它是将数据中所有的数据引用下来,依旧指向同一个存放地址,拷贝之后的数据修改之后,也会影响到原数据的中的对象数据。最简单直接的浅拷贝就…

java ssm集装箱码头TOS系统调度模块的设计与实现

由于历史和经济体制的原因,国内码头物流企业依然保持大而全的经营模式。企业自己建码头、场地、经营集装箱运输车辆。不过近几年来随着经济改革的进一步深入和竞争的激烈,一些大型的码头物流企业逐步打破以前的经营模式,其中最明显的特征就是…

利用机器学习(mediapipe)进行人脸468点的3D坐标检测--视频实时检测

上期文章,我们分享了人脸468点的3D坐标检测的图片检测代码实现过程,我们我们介绍一下如何在实时视频中,进行人脸468点的坐标检测。 import cv2 import mediapipe as mp mp_drawing = mp.solutions.drawing_utils mp_face_mesh = mp.solutions.face_mesh face_mesh = mp_fac…