BERT论文略读

        《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》 (https://arxiv.org/abs/1810.04805)

         摘要:前人优秀工作仅用了单向信息且不能很好的应用到各类下游任务,本文提出一种基于Transformer的双向处理预训练模型——BERT,在预训练完成后,采用统一的结构进行多个NLP下游任务微调,均达到SOTA。

        BERT模型关键词:预训练;双向信息;MLM(Masked Language Model)预训练任务;NSP(Next Sentence Predict)预训练任务。

1.预训练相关工作

        BERT之前的ELMo和GPT都是预训练机制,并且取得不错成绩,但他们都是基于单向的,存在缺点。 BERT为了解决单向预训练带来的不足,引入了MLM和NSP两个预训练任务,让模型能够从双向来理解语言。

        BERT模型结构

        BERT的构建与使用分为两个阶段,预训练和微调。所有下游任务微调时,均采用预训练好的参数进行全局初始化、全 局训练。

        BERT模型结构很简单,完全基于Transformer的encoder,并且有base和large两个版本,attention block、hidden size 和 head分别为(L=12, H=768, A=12, Total Parameters=110M) (L=24, H=1024,A=16, Total Parameters=340M)。

         BERT的输入设计很巧妙,使得一个结构适应了多个NLP任务。输入设计为序列形式,将一个句子、两个句子都组装成为 一个序列,输入到模型中。输入上,设计了两个特殊的token,cls和sep。

        cls:可以理解为序列的全局特征,用于文本分类、情感分析这类的seq2cls的任务。

        sep:用于将句子1和句子2进行拼接的token。

        在embedding处理上,设计了额外的segment embedding来标记句子是第一句、还是第二句。具体的输入embedding由 三部分组成,如下图所示:

2.BERT的预训练——MLM

        BERT的第一种预训练任务是MLM(masked language model),是对一句话中的一些单词进行隐藏,然后让模型根据 上下文内容,在该mask的token位置上要求预测该单词。例如:“白切鸡” 经过MLM处理变为 “白mask鸡”,输入到BERT 模型,BERT模型的输出标签是“白切鸡“。

         在进行mask是需要一定概率的,文章中对全文的15%的token进行遮罩,然后这15%里,80%真正变为mask,10%为随 机token,10%为原始token。这么做的原因是,下游任务中并没有mask这个特殊token,为了保障微调时的性能,这里做了这样的设置。( a downside is that we are creating a mismatch between pre-training and fine-tuning, since the [MASK] token does not appear during fine-tuning. )

3.BERT的预训练——NSP

        BERT的第一种预训练任务是NSP(Next Sentence Prediction),由于NLP任务中有一些是需要理解两个句子之间的关 系,例如QA和NLI任务。为了让BERT掌握句子之间的理解能力,设计了NSP。

        NSP是一个二分类任务。输入的是两个句子组成的序列,输出的是IsText or Not Text。含义是这两个句子是否是前后两 句。论文举的例子:

        预训练实验预训练采用了2个数据集:BooksCorpus (800M words) (Zhu et al.,2015) and English Wikipedia (2,500M words)。

        预训练参数及耗时如下:bs=256, epoch=40, 100万step, 1万step预热, lr=1e-4, base:16个TPU训4天, large:64个TPU训4 天。

4.BERT的微调——下游任务

        有了预训练好的BERT模型,可以快速方便的应用到各类NLP的下游任务,直接看下图列举的四种典型的任务:

        (1)seq2cls:输入是多个句子,用sep拼接,输出用cls的特征向量接softmax实现分类。         (2)seq2cls:输入是单个句子,处理同上。

        (3)seq2seq:输入是两段话构成的序列,输出是第二段话中要求各token输出3个类别,用于标记哪些是答案的开始、 答案的结束和无关内容。可以理解为词表为3的序列生成任务。

        (4)seq2seq:输入是一句话,输出是每个token的分类类别,类别数根据任务而定,例如NER任务中,类别数是(实 体种类*2 + 1),一个实体需要两个类别,实体开始和实体结束两个标记,1表示无关类别。

5.下游任务微调实验

        超参数基本固定,可以套用大部分任务:

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

        Number of epochs: 2, 3, 4

        Batch size: 16, 32

        且采用的计算资源也很少,单个TPU一小时,单GPU几个小时即可,真实亲民的好模型。

7.论文小结

        BERT是在ELMo和GPT之后提出来的一种基于Transformer的Encoder实现双向信息交互的预训练架构,并且可在一个模 型结构上实现多种下游任务的微调,具有统一结构。BERT对于NLP的预训练-微调,算得上开创性的作品,为NLP微调 范式打开了大门,后续的NLP任务大多基于BERT范式。

        本论文需重点学习的几点如下:

        1. BERT最大亮点是双向信息交互和MLM+NSP的预训练-微调范式;

        2. MLM执行时,15%选中为mask候选token,再根据8:1:1比例进行真mask、随机token、原始token的设置

        3. NSP任务采用sep特殊的token来拼接句子,实现一个序列输入,包含多个句子,sep的引入为模型统一多个任务提 供了可能

        4. 预训练耗时4天,微调仅需数小时,此方案非常亲民。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三种分布式锁实现方式

目录 1、数据库自增 2、Redis自增 3、Zookeeper 4、其他 4.1、雪花算法 4.2、Tinyid 4.3、Leaf 4.4、数据库号段 1、数据库自增 利用数据库表的自增特性,或主键唯一性,实现分布式ID REPLACE INTO id_table (stub) values (’a‘) ; SELECT LA…

4A的「A」会变成AI的「A」吗?

戛纳国际创意节上,广告集团WPP的全球CEO Mark Read 和英国CEO Karen Blackett 解释了WPP如何应对AIGC所带来的「威胁」。同时,Mark Read 与Elon Musk对话,讨论「技术创新的变革力量,人工智能如何重塑创造力、商业和社会&#xff0…

Ueditor中集成135编辑器

一、背景 在资讯项目平台运营过程中,资讯需要排版,一般都是在135编辑器排好以后,复制到平台中UEditor编辑器中,所以,他们建议集成一下135哈 二、了解135编辑器 开始调研了解135编辑器,发现人家就支持集成…

PVE 8.2.2安装OpenWrt 23.05.3

1,下载官方openwrt 23.5.3镜像并解压 2,进入pve上传镜像 复制这段文字之后需要使用 创建虚拟机 删除磁盘 安装完毕后 shell 运行 qm importdisk 100 /var/lib/vz/template/iso/openwrt-23.05.3-x86-64-generic-ext4-combined-efi.img local-lvm 其中100是虚拟…

mac菜单栏应用管理软件:Bartender 4 for Mac 中文激活版

Bartender 4 是一款由Bearded Men Games开发的适用于Mac操作系统的应用程序,它被设计用来优化和美化Mac菜单栏的功能。自从macOS Big Sur开始,Mac的菜单栏可以自定义,用户可以添加和移除各种图标。Bartender 4就是在这个背景下应运而生&#…

Spring Boot中获取请求参数的几种方式

前言 在构建现代 Web 应用时,处理来自客户端的请求参数是不可或缺的一部分。Spring Boot作为构建微服务应用的领先框架,提供了多种灵活高效的方式来获取请求参数,满足各种应用场景。 无论您是Spring Boot的初学者,还是希望更深入…

[分布式网络通讯框架]----Protobuf安装配置--附带每一步截图

Protobuf Protobuf(Protocol Buffers)协议是一种由 Google 开发的二进制序列化格式和相关的技术,它用于高效地序列化和反序列化结构化数据,通常用于网络通信、数据存储等场景。 为什么要使用Protobuf Protobuf 在许多领域都得到…

【PL理论深化】(8) Ocaml 语言:元组和列表 | 访问元组中的元素 | 列表中的 head 和 tail | 基本列表操作符

💬 写在前面:本章我们将探讨 OCaml 中的元组(tuple)和列表(list),它们是函数式编程语言中最常用的数据结构。 目录 0x00 元组(Tuple) 0x01 访问元组中的元素 0x02 列表&…

电脑开机之后,键盘鼠标需要重新插拔才能正常使用?

前言 小白平时修电脑修得多,总是会遇到各种各样的奇葩问题。这不,又有一位小伙伴来咨询:电脑开机之后,键盘鼠标都不能用,需要重新插拔一下才能正常使用。 啧啧啧,真的是很奇怪的问题,基本上没见…

OpenCV报错已解决:Vector析构异常OpencvAssert CrtlsValidHeapPointer

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 在使用OpenCV进行图像处理时,我们可能会遇到Vector析构异常OpencvAssert CrtlsValidHeapPointer的问题。本文将…

Kubernetes之 资源管理

系列文章目录 Kubernetes之 资源管理 文章目录 系列文章目录前言一、资源管理介绍二、YAML语言介绍 1.1.YAML语法:2.读入数据总结 一、资源管理介绍 在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。 1. kub…

深度解析RocketMq源码-IndexFile

1.绪论 在工作中,我们经常需要根据msgKey查询到某条日志。但是,通过前面对commitLog分析,producer将消息推送到broker过后,其实broker是直接消息到达broker的先后顺序写入到commitLog中的。我们如果想根据msgKey检索一条消息无疑…

如何理解AKM?

关于Wi-Fi的加密认证过程,我们前面已经讲解:WLAN数据加密机制_tls加密wifi-CSDN博客 今天我们来理解下AKM,AKM(Authentication and Key Management)在Wi-Fi安全中是指认证和密钥管理协议。它是用于确定Wi-Fi网络中的认…

Linux学习第54天:Linux WIFI 驱动:蓝星互联

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 数字化、现代化的今天,随处的WIFI给与了大众极大的方便,也感受到了科技的力量。万物互联、无线互联越来越成为一个不可逆转的趋势。现在比较火…

ISP IC/FPGA设计-第一部分-SC130GS摄像头分析(0)

1.介绍 SC130GS是一款国产的Global shutter CMOS图像传感器,最高支持1280Hx1024V240fps的传输速率;SC130GS有黑白和彩色款,作为ISP开发选择彩色的,有效像素窗口为1288Hx1032V,支持复杂的片上操作,选择他理…

谈谈WebComponents | 前端开发

一、 源起 让我们以一个例子开始。 假设我们要做一个环形进度条,它可以: 1、根据进度数值的不同,计算出百分比,以渲染对应的角度值。 2、根据设置的进度不同,我们用不同的颜色加以区分。 3、在环的中间我们以动画递增的…

基于RabbitMQ的异步消息传递:发送与消费

引言 RabbitMQ是一个流行的开源消息代理,用于在分布式系统中实现异步消息传递。它基于Erlang语言编写,具有高可用性和可伸缩性。在本文中,我们将探讨如何在Python中使用RabbitMQ进行消息发送和消费。 安装RabbitMQ 在 Ubuntu 上安装 Rabbi…

wps的domain转为shp矢量

wps的namelist制作、python出图和转矢量 简介 wps(WRF Preprocessing System)是中尺度数值天气预报系统WRF(Weather Research and Forecasting)的预处理系统。 wps的安装地址在GitHub上:https://github.com/wrf-model/WPS 下载完成后&…

注册中心不知选哪个?Zookeeper、Eureka、Nacos、Consul和Etcd 5种全方位剖析对比

本文给大家讲解 5 种常用的注册中心,对比其流程和原理,无论是面试还是技术选型,都非常有帮助。 对于注册中心,在写这篇文章前,我其实只对 ETCD 有比较深入的了解,但是对于 Zookeeper 和其他的注册中心了解甚…

pytorch统计学分布

1、pytorch统计学函数 import torcha torch.rand(2,2) print(a) print(torch.sum(a, dim0)) print(torch.mean(a, dim0)) print(torch.prod(a, dim0))print(torch.argmax(a, dim0)) print(torch.argmin(a, dim0)) print(torch.std(a)) print(torch.var(a)) print(torch.median…