自然语言处理: 第十一章BERT(Bidirectional Encoder Representation from Transformers)

news2024/11/25 10:14:31

论文地址:[1810.04805] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (arxiv.org)

理论基础

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NLQ7sXAF-1692627057893)(image/11_BERT/1692077733067.png)]

之前介绍GPT的搭建的方式的时候,将BERT与GPT进行了对比,我们可以知道BERT和GPT都是基于transformer架构下的分支,二者在最初提出的时间差不多,但是却有着完全不同的走向,以BERT为代表的decorder-only家族发展出了RoBERTa, ALBERT , 以及DeBERTa 等,但是在这之后就没有更好的架构提出了,而是以GPT为代表的decorder-only家族以及T5这种Encorder-decorder架构遍地开花结果。但是这并不影响BERT在NLP发展上的历史地位,它的一些思想我们在如今的大模型上还是能看到它的影子。下面我们就慢慢的走近BERT的世界。


BERT的全称为Bidirectional Encoder Representation from Transformers, 参数大概约有340M的参数,训练数据大概有3M个字, 从名字我们就可以看到BERT的几个关键点:

  • Encoder : 代表它是一个Encoder-only的架构
  • Bidirection: 代表它是一个双向的架构
  • Transformer:代表它是一个基于transformer框架的架构

有关于transformer 和 encoder 的关键点可以参考我的上一篇博客Transformer- 现代大模型的基石 ,BERT出名其主要的核心思想是在于:

  • Encoder - only 代表 , 经过接不同的任务头进行fine_tune 可以完成各式各样的任务
  • 提出了MLM(masked language model)的预训练方法


首先,BERT的输入是所有如下图,除了每个词的Token之外,还有两个输入:

  1. 句子成分,由于后续需要句子顺序
  2. 位置信息,与GPT一样补偿位置信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5vxiow2p-1692627057894)(image/11_BERT/1692107798567.png)]




Pre-trained

BERT的预训练目标是同样也是一种无监督的学习,具体的就是从网上大量爬下来的语料库中做填空题,如下图,在网上爬了一个短语台湾大学,MLM的原理就是随机的mask某个单词可以用 <mask>或者随机的用某个字去代替这个字,然后将mask后的句子全部输入给BERT,BERT是一个seq2seq的架构,它能输出一个等长的向量,然后将mask的位置输出的字与原本盖住的字得到loss,最后去做梯度下降,这个就是MLM任务的基本原理. 以BERT为代表的encoder-only的架构的预训练都是以MLM类似填空题为主的,区别于GPT的问答机制。

PS: 如果想利用BERT在自己的domain上做一些任务,将自己的语料库做MLM 会对性能有提升,这个叫domain adaption.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fjfo3yqX-1692627057894)(image/11_BERT/1692088976900.png)]



在整个BERT种,为了保持整个预训练资料的稳定性,所以作者应该是根据效果应用了15% 的masking,其中80 %是用mask替代, 然后 10 % 是随机词,还有10%保持一致(这个是为了保证BERT不会每次都去修改原文)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tmZYwfaU-1692627057895)(image/11_BERT/1692107523162.png)]



Fine_tuning

经过Google本身预训练的之后,BERT已经具备了填空的能力,但是如果要适应于不同的下游任务,需要BERT通过fine_tune(接不同的任务头)就可以适用于不同的下游任务,fine_tune不同于pre_train,它是一种有监督的任务,需要你提供有label的数据集让BERT + Head去学习,下面介绍4个BERT适用于不同的下游任务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-93q2eMIt-1692627057895)(image/11_BERT/1692089744749.png)]



Case1: Sentiment Analysis

BERT适用于情感分析任务只需要将预训练好的BERT接一个linear head 最后输出对应的情感,你只需要收集大量的情感分析的case 给这个模型去做梯度下降就可以了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QPlvSrgK-1692627057895)(image/11_BERT/1692089928740.png)]



Case2: POS tagging

词性标注任务同样也是NLP任务的一种,相比于情感分析,它稍微复杂的地方就是他需要对每个输出位置都进行分类,而不是跟情感分析一样只对第一个整体进行分类。最终将loss叠加然后再进行梯度下降。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gNrc83xO-1692627057896)(image/11_BERT/1692090192941.png)]



Case3: Natural Language Inference

自然语言推理,就是将前提premise + 假设jypothesis 全部输入给模型,然后让他判断二者的关系,其实也是一种分类问题。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nqVYKaRJ-1692627057896)(image/11_BERT/1692090240355.png)]



Case4: Extraction-based Question Answering

基于语料的问答,同样它需要输入给模型文章 + 问题, 模型输出两个数字{s , e} 这两个数字代表的是答案在语料库中的起始位置,如下面gravity 就是文本的第17个字开始,到17个字结束。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jvkxxPW9-1692627057896)(image/11_BERT/1692090443108.png)]

具体一点的做法就是将question 和 document 拼起来之后全部输入给BERT, 然后初始化两个随机向量, 然后将每个随机化得向量与document对应的位置的输出做点积然后将整个output做一个softmax得到开始的位置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ttlMqabo-1692627057897)(image/11_BERT/1692090637191.png)]



工作原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IPK6Sjd0-1692627057897)(image/11_BERT/1692095807847.png)]

有关于BERT理论成功的原因,这里有一些研究,有人发现将不同的词输入给BERT后得到的embedding,由于读过上下文且经过了Attention注意力机制 , 得到的词向量有着意思相近的余弦距离就更小的特性,所以相比于Word2Vec ,BERT更像是一个动态的CBOW模型,并且有着比word2vec更好的效果因为注意力的加入,他能结合上下文动态的改变词向量,从而表达多义词,因此有人称BERT为Contextualized word embedding

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uObiOMp4-1692627057897)(image/11_BERT/1692096205026.png)]


除此之外,还有研究将一个Multi-lingual BERT 对其在不同语言的问答上做fine_tune但是只在中文的问答做测试。最后结果如下,可以看到即使是在英文的数据上做fine-tune结果还是能在中文的问答上做测试,结果也并没有下降的很多。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9wTLjSrC-1692627057898)(image/11_BERT/1692096721900.png)]

这里提出了一个猜想,就是将英文的数据经过BERT之后, 以及将中文数据经过BERT之后,发现二者embedding的距离是一个稳定的值。类似下图种,将英文语料通过multi-BERT后得到的词向量 + 一个稳定大小的向量后 然后这些词向量能完全对应上中文语料。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hDXOmH7p-1692627057898)(image/11_BERT/1692096883792.png)]

除此之外,有研究也表明了经过MLM的BERT的预训练模型不仅仅在NLP上有效果,在其他领域如预测蛋白质,DNA 以及音乐分类上都有很好的效果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pYG7ways-1692627057898)(image/11_BERT/1692108879996.png)]





BERT进化体

其实,在预训练阶段除了做MLM,BERT还采用了Next Sentence Prediction技术,就是在语料库中抽取一个句子作为上文,然后再随机的从语料库或者本身下文拿出来组成pair,输入给BERT 令其判断这两个句子是否是上下文。 但是这个技术在BERT的进化版中,RoBERTa提出了这个方法并没有多大的效果。所以在之后的ALBERT中提出了Sentence order prediction (句子排序)是有用的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KNVe97kz-1692627057899)(image/11_BERT/1692089355714.png)]

除了上面说的类似BERT 的MLM方法去预训练一个decoder-only的架构, 也能根据类似的方法去预训练Encoder - decoder的架构。 BART就是基于BERT的思想提出来的,但是不同的是他是一个Encoder - decoder的架构, 而且预训练的方法也在mlm的基础上做了一个改进,它主要用到了下面5种方法做预训练:

  1. MLM,然后需要恢复原始句子
  2. 删掉某个字,然后需要恢复原始句子
  3. 打乱单词顺序,然后需要恢复原始句子
  4. 将短句顺序做旋转,然后需要恢复原始句子
  5. mask + 选装顺序,,然后需要恢复原始句子

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VYYqbjA5-1692627057899)(image/11_BERT/1692091470254.png)]

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

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

相关文章

Android 1.2.1 使用Eclipse + ADT + SDK开发Android APP

1.2.1 使用Eclipse ADT SDK开发Android APP 1.前言 这里我们有两条路可以选&#xff0c;直接使用封装好的用于开发Android的ADT Bundle&#xff0c;或者自己进行配置 因为谷歌已经放弃了ADT的更新&#xff0c;官网上也取消的下载链接&#xff0c;这里提供谷歌放弃更新前最新…

PHP8数组的类型-PHP8知识详解

php 8 引入了对数组的类型提示&#xff0c;以帮助开发者更准确地定义和验证数组的结构。以下是 PHP 8 中支持的数组类型&#xff1a;索引数组、关联数组、混合类型数组。 1、索引数组 (Indexed arrays): PHP索引数组一般表示数组元素在数组中的位置&#xff0c;它由数字组成&a…

centos7关闭防火墙和selinux(内核防火墙)

centos7关闭防火墙和selinux&#xff08;内核机制或叫内核防火墙&#xff09; 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.关闭防火墙&#xff0c;centos7默认是firewalld #关闭 systemctl stop firewalld.service #关闭开机自启 systemctl disable firewalld.ser…

Opencv 图像金字塔----高斯和拉普拉斯

原文&#xff1a;图像金字塔----高斯和拉普拉斯 图像金字塔是图像中多尺度表达的一种&#xff0c;最初用于机器视觉和图像压缩&#xff0c;最主要用于图像的分割、融合。 高斯金字塔 ( Gaussian pyramid): 高斯金字塔是由底部的最大分辨率图像逐次向下采样得到的一系列图像…

Vue.js 报错:Cannot read property ‘validate‘ of undefined“

错误解决 起因&#xff0c;是我将elemnt-ui登录&#xff0c;默认放在mounted()函数里面&#xff0c;导致vue初始化就调用这个函数。 找了网上&#xff0c;有以下错误原因&#xff1a; 1.一个是你ref写错了&#xff0c;导致获取不了这个表单dom&#xff0c;我这显然不是。 2.…

基于改进莱维飞行和混沌映射的粒子群优化算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

机器人中的数值优化(十)——线性共轭梯度法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

【Linux】如何手动挂载和卸载文件系统?

按块设备名称挂载按文件系统UUID挂载卸载文件系统感谢 &#x1f496; 我们必须了解&#xff0c;只有root用户可以手动挂载和卸载文件系统。 当我们切换到root用户后&#xff0c;可以使用mount命令将存储设备上的文件系统挂载到文件系统层次结构中用作挂载点的目录。 mount 命令…

Beego项目实战

Beego项目实战 beego博客项目-创建项目beego博客项目-集成gormbeego博客项目-集成Bootstrap创建用户表单beego项目实现-添加用户controller和routerBeego博客项目-设计静态页面beego博客项目-用户注册beego博客项目-用户登录beego博客项目-集成markdown编辑器beego博客项目-创建…

CCF是什么?

CCF是计算机学会&#xff08;China Computer Federation&#xff09;的英文缩写&#xff0c;是一个在中国从事计算机领域学术研究和技术发展的国家性非营利学术团体。其宗旨是促进和推动计算机科学技术的发展和应用&#xff0c;发挥学术团体在学术研究、学术交流、学术评价、学…

伺服阀放大器使用手册

控制通用型不带反馈信号输入的伺服阀放大器&#xff0c;对射流管式电液伺服阀、喷嘴挡板式电液伺服阀及国外各类电液伺服阀进行控制。 通过系统参数有10V和4~20mA输入指令信号选择&#xff1b; 供电电源: 24VDC&#xff08;标准&#xff09; 输出电流&#xff1a;最大可达10…

PHP8的多维数组-PHP8知识详解

今天分享的是php8的数组中的多维数组&#xff0c;主要内容有&#xff1a;多维数组的概念、创建和输出二维数组、创建和输出三维数组。 1、多维数组的概念 多维数组是包含一个或多个数组的数组。在多维数组中&#xff0c;主数组中的每一个元素也可以是一个数组&#xff0c;子数…

DHTMLX Gantt 8.0.5 Crack -甘特图

8.0.5 2023 年 9 月 1 日。错误修复版本 修复 修复通过gantt.getGanttInstance配置启用扩展而触发的错误警告修复启用skip_off_time配置时gantt.exportToExcel()的不正确工作示例查看器的改进 8.0.4 2023 年 7 月 31 日。错误修复版本 修复 修复数据处理器不跟踪资源数据…

RT-Thread UART

UART 简介 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;通用异步收发传输器&#xff0c;UART 作为异步串口通信协议的一种&#xff0c;工作原理是将传输数据的每个字符一位接一位地传输。是在应用程序开发过程中使用频率最高的数据总线。 UART …

MySql系列-常用命令

基础知识-常用命令 命令不区分大小写 1、mysql连接 mysql -u username -p 实例: mysql -u root -p 2、元数据查询 //服务器版本信息 SELECT VERSION( ) //当前数据库名 (或者返回空) SELECT DATABASE( ) //当前用户名 SELECT USER( ) //服务器状态 SHOW STATUS //服务…

简单了解Sqoop

文章目录 概述数据导入MySQL到HDFSMySQL到Hive增量数据导入 数据导出 概述 sqoop是一款开源工具&#xff0c;主要运用在Hadoop(Hive)与传统的数据库(mysql\postgresql等)间进行数据的传递&#xff1b; 它最早是作为hadoop的一个第三方模块存在&#xff0c;后来为了让使用者能快…

java八股文面试[java基础]——字节码的组成

什么是字节码&#xff1f; 因为JVM针对各种操作系统和平台都进行了定制&#xff0c;无论在什么平台&#xff0c;都可以通过javac命令将一个.java文件编译成固定格式的字节码&#xff08;.class文件&#xff09;供JVM使用。之所以被称为字节码&#xff0c;是因为.class文件是由…

《人生苦短——我学Python》if条件判断->单向选择

今天我们来看看python中的条件判断。和C语言一样&#xff0c;python中条件判断的关键字也是if&#xff0c;并且判断的逻辑也是相同的&#xff0c;下面就让我们来详细看看吧&#xff01; 关键词&#xff1a;if&#xff0c;代码块&#xff0c;缩进 文章目录 一、要点先知&#x…

CSS中如何隐藏元素但保留其占位空间(display:nonevsvisibility:hidden)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 隐藏元素但保留占位空间⭐ display: none;⭐ visibility: hidden;⭐ 总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&a…

@CacheEvict自动删redis缓存的注意事项

一、前言 今天遇到了一个问题&#xff0c;就是关于CacheEvict&#xff0c;这个相信大家都很熟悉了&#xff0c;是Spring整合一些缓存的专用注解&#xff0c;它和Cacheable是一对。一个是新增缓存一个是删除缓存&#xff0c;搭配使用&#xff0c;不用自己手动删除&#xff01; …