预训练模型 ---- BERT架构

news2024/11/20 23:17:58

目录

什么是BERT

BERT的架构

BERT的预训练任务

小节总结

BERT的特点

BERT和GPT的区别


笔记参考:【2023最新!4个小时带你重新认识【BERT+transformer】,详解self-attention,翻遍全网找不到比它更详细的了!!!】 https://www.bilibili.com/video/BV1JV4y1o7TP/?p=11&share_source=copy_web&vd_source=69ae8a9276e595b2c242a5fcedcd7dcc

原文链接:[1810.04805] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (arxiv.org) 

什么是BERT

BERT是2018年10月由Google AI研究院提出的一种预训练模型。

  1. BERT的全称是Bidirectional Encoder Representation from Transformers。
  2. BERT在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩:全部两个衡量指标上全面超越人类,并且在11种不同NLP测试中创出SOTA表现。包括将GLUE基准推高至80.4%(绝对改进7.6%),MultiNLI准确度达到86.7%(绝对改进5.6%),成为NLP发展史上的里程碑式的模型成就。

BERT的架构

总体架构:如下图所示最左边的就是BERT的架构图(图来源于Bing搜索),可以很清楚的看到BERT采用了Transformer Encoder Block进行连接,因此它是一个典型的双向编码模型。

从上面的架构图中可以看到,宏观上BERT分三个主要模块。

  • 最底层黄色标记的Embedding模块 ---- 输入层(Embedding)
  • 中间层蓝色标记的Transformer模块 ---- 编码层(Tansformer encoder)
  • 最上层绿色标记的预微调模块 ---- 输出层

1. Embedding模块

BERT中的该模块是由三种Embedding共同组成,如下图所示(图来源于原文截图

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

2. 双向Transformer模块

BERT中只使用了经典Transformer架构中的Encoder部分,完全舍弃了Decoder部分。而两大预训练任务也集中体现在训练Transformer模块中;

Encoder部分使用的是具有强大特征提取能力的Transformer的编码器,其同时具有RNN提取长距离依赖关系的能力和CNN并行计算的能力。这两种能力主要是得益于Transformer-encoder中的self-attention结构,在计算当前词的时候同时利用了它上下文的词使其能提取词之间长距离依赖关系;由于每个词的计算都是独立不互相依赖,所以可以同时并行计算所有词的特征。

3. 预微调模块

经过中间层Transformer的处理后,BERT的最后一层根据任务的不同需求而做不同的调整即可。

比如对于sequence-level的分类任务,BERT直接取第一个[CLS] token 的final hidden state再加一层全连接层后进行softmax来预测最终的标签。

对于不同的任务,微调都集中在预微调模块,几种重要的NLP微调任务架构图展示如下(图来源于原文截图):

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

(a)句对分类

判断两句子之间的关系,如句子语义相似度、句子连贯性判定等,其本质是文本分类。

输入:两句子

输出:句子关系标签

(b)单句子文本分类

判断句子属于哪个类别,如新闻自动分类、问题领域分类等。

输入:一个句子

输出:输出句子类别标签

(c)抽取式问答

给定问答和一段文本,从文本中抽取出问题的答案,如机器阅读理解等。其本质是序列标注。

输入:一个问题,一段文本

输出:答案在文本中的索引

(d)单句子序列标注

给输入句子的每个token打上目标标签,如分词、词性标注、实体识别等。

输入:一段文本

输出:文本中每个token对应的标签


针对google开源的中文BERT模型和源码,对两类任务做微调的用法如下:

序列标注

(1)加载预训练Bert模型

(2)取输出字向量:embedding = bert_model.get_sequence_output()

(3)然后构建后续网络

 文本分类

(1)加载预训练BERT模型

(2)取输出句向量:output_layer=bert_model.get_pooled_output()

(3)然后构建后续网络


对于BERT预训练模型的超参数建议如下:

batch size: 16, 32
learning rate (Adam): 5e-5, 3e-5, 2e-5
epochs:3, 4

BERT的预训练任务

BERT包含两个预训练任务:

  • 任务一:Masked LM(带mask的语言模型训练)
  • 任务二:Next Sentence Prediction(句子连贯性判定)

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

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

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

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

  • 在80%的概率下,用[MASK]标记替换该token,比如 my dog is hairy -> my dog is [MASK]
  • 在10%的概率下,用一个随机的单词替换token,比如 my dog is hairy -> my dog is apple
  • 在10%的概率下,保持该token不变,比如 my dog is hairy -> my dog is hairy

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

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

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

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

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

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

BERT预训练任务——笔记

任务一:MLM任务(mask的语言模型任务

随机抽取15%token 作为MASK对象

  • 在80%概率下使用MASK替换为token
  • 10%的概率,使用随机单词得换token
  • 10%的概率,保持token不变

任务二:NSP任务(下一句的预测任务)

  • 50%句子是源语句真实的下一句话,标记IsNext 正样本
  • 50%句子不是源语句的真实的下一句话,标记NotNext 负样本

小节总结

学习了什么是BERT

  • BERT是一个基于Transformer Encoder的预训练语言模型。BERT在11种NLP测试任务中创出SOAT表现

学习了BERT的结构

  • 最底层的Embedding模块,包括Token Embeddings,Segment Embeddings, Position Embeddings
  • 中间层的Transformer模块,只使用了经典Transformer架构中的Encoder部分
  • 最上层的预微调模块,具体根据不同的任务类型来做相应的处理

学习了BERT的两大预训练任务

MLM任务(Masked Language Model),在原始文本中随机抽取15%的token参与任务

  • 在80%概率下用[MASK]替换该token
  • 在10%概率下,用一个随机的单词替换该token
  • 在10%概率下,保持该token不变

NSP任务(Next Sentence Prediction),采用的方式是输入句子对(A,B),模型预测句子B是不是句子A的真实的下一句话

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

BERT的特点

(1)真正的双向:使用双向 Transformer,能同时利用当前单词的上下文信息来做特征提取,这与双向RNN分别单独利用当前词的上文信息和下文信息来做特征提取有本质不同,与CNN将上下文信息规定在一个限定大小的窗口内来做特征提取有本质不同;

(2)动态表征:利用单词的上下文信息来做特征提取,根据上下文信息的不同动态调整词向量,解决了word2vec一词多义的问题;

(3)并行运算的能力:Transformer组件内部使用自注意力机制(self-attention),能同时并行提取输入序列中每个词的特征。

(4)易于迁移学习:使用预训练好的BERT,只需加载预训练好的模型作为自己当前任务的词嵌入层,后续针对特定任务构建后续模型结构即可,不需对代码做大量修改或优化。

BERT和GPT的区别

BERT和GPT都是基于Transformer架构的预训练语言模型,但在一些关键方面有所不同。

预训练任务

BERT采用的是Masked Language Model (MLM)和Next Sentence Prediction (NSP) 两个任务。其中,MLM任务是将输入文本中的一部分随机被遮挡掉,然后模型需要根据上下文预测这些遮挡掉的词是什么;NSP任务则是判断两个句子是否是相邻的。这两个任务使得BERT在理解句子内部和句子之间的关系方面都具有很好的表现。

GPT则采用的是单一的预测任务,即语言模型。该模型通过训练预测一个序列中下一个单词的概率分布,从而学习到文本中单词之间的关系。

训练数据

BERT的训练数据来自于网页文本和书籍,因此涵盖了非常广泛的领域和主题。

而GPT则主要采用了新闻和维基百科等文章,使其在学术和知识层面的表现更好。

网络结构

BERT是一个双向的Transformer Encoder,通过自注意力机制来学习句子内部和句子之间的关系。

而GPT是一个单向的Transformer Decoder,仅通过自注意力机制学习句子内部的关系。

应用场景

由于BERT具有双向性和广泛的训练数据,因此在自然语言理解的任务中表现非常出色。而GPT则在生成自然语言的任务中表现更加突出,比如文本摘要、对话生成和机器翻译等方面。

主要区别在于两者要解决的问题不同,BERT(完形填空),GPT(预测未来)。BERT主要用于自然语言理解的任务,而GPT则主要用于生成自然语言的任务。

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

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

相关文章

工作记录:在线 word - 列表

需求&#xff1a;上传 word 文档&#xff0c;在页面的富文本编辑器中展示、编辑后&#xff0c;再导出成 word 格式。 我负责开发列表功能 为什么不用 ul 一开始想用<ul> <li> 去实现列表&#xff0c;但随即发现一些问题&#xff1a; 问题一&#xff1a;word 中的…

知乎+chatgpt炸了!撸点小钱~

大家好&#xff0c;我是五竹。 之前分享了一下&#xff0c;朋友圈的好友如何复制我的玩法利用chatgpt赚点小钱的实战&#xff1a;TMD&#xff0c;被人偷窥了一个月&#xff01; 紧接着我自己最近也在知乎小赚了一笔&#xff01;我以为在知乎上那篇文章的热点就消退了&#xff0…

字节25K就面试这些?简直惊呆我了...

互联网行业竞争是一年比一年严峻&#xff0c;作为软件测试工程师的我们唯有不停的学习&#xff0c;不断提升自己才能保证自己的核心竞争力从而拿到更好的薪水&#xff0c;进入心仪的企业&#xff08;阿里&#xff0c;字节跳动&#xff0c;腾讯&#xff0c;美团&#xff09; 话不…

获取安卓签名文件的MD5值与SHA1码

目录 前言 一、用命令行的方式仅能获取SH1、SHA256 ​编辑 二、用gradle的方式可以获取MD5值 1.打开Android Studio&#xff0c;点击右边的Gradle 2.点击大象&#xff0c;输入查询签名信息的命令 总结 前言 公司App项目要备案&#xff0c;要搜集MD5值与SHA1码&#xff0…

Software List

Ubuntu22 Goldendict Ubuntu安装划词翻译软件Goldendict 单词翻译 句子翻译_ubuntu划词翻译_Bourne_Boom的博客-CSDN博客有道词典长期未更新&#xff0c;由于某些模块不支持的问题已经无法在Ubuntu18.04中使用了。现在介绍另一款强大的翻译软件——Goldendict。1.安装&#…

Android Qcom Display学习(十四)

该系列文章总目录链接与各部分简介&#xff1a; Android Qcom Display学习(零) 本章主要就是学习一下开机logo和开机动画是怎么加载&#xff0c;客制化修改的。 Bootlogo QcomChargerApp.c QcomChargerApp_MonitorChargingQcomChargerAppDisplay_DispBattSymbol(DispImageTy…

SARscape连接图编辑(ConnectGraph)

SARscape连接图编辑ConnectGraph 0 连接图是什么1 什么时候需要编辑连接图2 连接图编辑步骤 0 连接图是什么 连接图ConnectGraph就是差分干涉数据对的关系图。 在SARscape中进行干涉叠加Interferometric Stacking处理&#xff0c;常见的包括PS和SBAS。 首先就要根据数据的空间…

美团小组长薪资被应届生员工倒挂7K,不把老员工当人?

一位美团的小管理爆出&#xff0c;无意中看到了整个部门薪资&#xff0c;本以为自己算比较高的&#xff0c;但看完之后整个人都傻眼了。小组长的职位月薪28K&#xff0c;而手下组员却是35K&#xff0c;当天晚上抽了一包烟也没想明白是为什么。 楼主表示&#xff0c;自己是美团的…

git提交分支

1. git提交分支相关 在本地新建分支&#xff0c;保证和远程分支一样 git checkout -b 分支名如果分支已存在&#xff0c;只需要切换的话 git checkout 分支名提交前先把代码拉下来更新一下&#xff0c;确保不会覆盖别人的代码 git pull origin 远程分支(如果有)解决冲突 g…

低代码平台名声臭,用起来却真香——90%重复工作给你完成喽

一、前言 开发过程中&#xff0c;只是觉得前端后端合起来&#xff0c;有很多冗余信息&#xff0c;被代码一遍遍重复表达&#xff0c;是一件很枯燥、无聊的事情。 这些枯燥的重复工作&#xff0c;完全可以由机器来做&#xff0c;以便解放出我们的时间&#xff0c;来做更有价值的…

智慧班牌源码源,SaaS云平台端、智慧校园管理平台端、家长/教师微信移动端、智慧班牌学生端

智慧电子班牌系统包括&#xff1a;SaaS云平台端、智慧校园管理平台端、家长/教师微信移动端、智慧班牌学生端四大软件平台。 文末获取联系&#xff01; 技术架构&#xff1a; 1、使用springboot框架Javavue2 2、数据库MySQL5.7 3、移动端小程序使用小程序原生语言开发 4、电子班…

xlsx是什么格式

xlsx是什么格式? xlsx是Excel文档的扩展名&#xff0c;其基于Office Open XML标准的压缩文件格式&#xff0c;取代了其以前专有的默认文件格式&#xff0c;在传统的文件名扩展名后面添加了字母x&#xff0c;即.xlsx取代.xls。 xlsx文件是什么格式? xlsx是Excel表格的文件格…

【Linux】-- 基础IO和动静态库

一、系统文件IO 1.文件与读写字符串 对于C文件接口&#xff0c;假如想向特定文件写入字符串&#xff1a; cFile.c #include<stdio.h>int main() {FILE * fp fopen("./log.txt","w");if(NULL fp){perror("fopen error");return 1;}int co…

CC1打不通时的另外一条链CC3

在CC1和CC6中&#xff0c;我们最终弹计算器都是通过Runtime.exec进行调用&#xff0c;从CC3我们要介绍一种不通过Runtime来弹计算器的方法&#xff0c;也就是Java中常提到的动态类加载&#xff0c;动态类加载可以让我们通过一个路径来加载一个恶意类&#xff0c;如果这个恶意类…

照片中对象识别模型YOLOv3在iOS项目中的浅析与使用

YOLOv3模型为苹果开发者官网提供的图形识别对象的CoreML模型&#xff0c;可识别80种对象&#xff0c;并给识别出的对象在图形中的位置和大小。 我们可以直接在官网下载该模型&#xff1a; 机器学习 - 模型 - Apple Developer 然后直接将模型拖入工程中&#xff08;使用的是x…

面试进阶齐飞!Github一天万赞的阿里Java系统性能优化有多牛?

前两天在知乎上看到一个问答&#xff0c;说的是&#xff1a; 一个Java程序员具备什么样的素质和能力才可以称得上高级工程师&#xff1f; 这个问题也引发了我的一些思考&#xff0c;可能很多人会说&#xff0c;“作为高级工程师&#xff0c;基础得过硬、得熟练掌握一门编程语…

信创办公–基于WPS的PPT最佳实践系列 (项目11 绘制流程图)

信创办公–基于WPS的PPT最佳实践系列 &#xff08;项目11 绘制流程图&#xff09; 目录 应用背景操作步骤1、流程图制作过程 应用背景 如果在smartart图形当中没有找到你所需要的图形&#xff0c;想要快速绘制&#xff0c;可以试试以下方法。 操作步骤 以图1为例&#xff0c…

AI智慧安防平台EasyCVR无法成功通过RTMP协议接入是什么原因?

EasyCVR视频融合平台基于云边端协同架构&#xff0c;具有强大的数据接入、处理及分发能力。平台可支持多协议、多类型的前端设备接入&#xff0c;包括市场主流标准协议与厂家私有协议及SDK&#xff0c;如&#xff1a;国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、宇视S…

AIGC和ChatGPT推进百度、阿里、腾讯、华为大模型技术创新

AIGC | PC集群 | PC Farm | GPU服务器 生成式AI | Stable Diffusion | ChatGPT 2022 年 12 月&#xff0c;OpenAI 推出了 ChatGPT&#xff0c;这是一种高性能计算的大型语言生成模型。它的出现推动了人机对话技术的发展&#xff0c;并在网络上引起了极大的关注。目前&#xff…

K-verse “韩流崛起”合作伙伴介紹

你们可以通过这次 K-verse LAND 销售活动认识许多品牌和 IP。更多详情见下文。 Netmarble Netmarble IP LAND 以全新方式来享受一系列以 Netmarble 的标志性 IP 为特色的内容&#xff01; Netmarble Corporation 于 2000 年在韩国成立&#xff0c;是全球最畅销手机游戏的领先…