【NLP】关于BERT模型的一些认知

BERT(Bidirectional Encoder Representations from Transformers)模型是由Google在2018年提出的预训练Transformer模型,用于自然语言处理任务。

一. BERT模型的架构

1.1 输入表示 / Encoder模块

BERT中的Encoder模块是由三种Embedding(词嵌入)共同组成,如下图所示:
encoder

  • Token Embeddings:词嵌入张量
    • BERT首先将输入文本通过WordPiece或Subword Tokenization进行分词,每个分词(token)被映射到一个固定维度的词嵌入向量中,这样文本就被转化成了连续向量表示;
    • 词嵌入张量的第一个单词是CLS标志, 可以用于之后的分类任务。
  • Segment Embeddings:句子分段嵌入张量
    • 对于序列对输入(如两个句子),BERT还包括段落嵌入(segment embeddings),用来区分两个不同的文本片段(如句子A和句子B);
    • 用于服务后续的两个句子为输入的预训练任务(NSP)。
  • Positional Embeddings:位置编码张量
    • 由于Transformer结构本身不包含循环机制,无法直接感知顺序信息,因此BERT引入了位置嵌入(Positional Encodings),它们是与token嵌入相加的向量,用来编码每个token在序列中的位置信息;
    • 和传统的Transformer不同,BERT模型的位置编码不是三角函数计算的固定位置编码,而是通过学习得出来的。

在BERT模型的训练过程中,位置嵌入会与其他的嵌入(如单词嵌入和段嵌入)一起被模型使用。当模型在处理一个单词时,它会参考该单词的位置嵌入,以理解这个单词在句子中的位置。然后,模型会根据这个位置信息以及其他嵌入信息,来预测被掩盖的单词或者判断两个句子是否连续(这就是BERT模型的两大与训练任务)。
在训练过程中,模型会根据其预测结果与实际标签的差异,计算出一个损失函数。然后,通过反向传播算法,模型会更新包括位置嵌入在内的所有参数,以最小化这个损失函数。这样,随着训练的进行,位置嵌入会逐渐学习到如何更好地表示单词在句子中的位置信息,从而提高模型在特定任务上的表现。
需要注意的是,由于BERT是一个预训练模型,其位置嵌入是在大量的无监督文本数据上学习得到的。因此,这些位置嵌入已经捕获了丰富的语言结构和位置信息,可以被直接用于各种下游任务,或者作为微调的基础。

1.2 双向Transformer模块

02

BERT中只使用了经典Transformer架构中的Encoder部分,并由多层Transformer Encoder堆叠而成,完全舍弃了Decoder部分。
每一层Transformer Encoder都包含以下部分:

  • 多头注意力(Multi-Head Attention)机制,用于捕获词语间的双向依赖关系;
  • 随后是一个前馈神经网络(Feed-Forward Network,FFN),通常包含两层线性变换和ReLU激活函数,负责对注意力机制输出的特征进行进一步的处理和转换;
  • 规范化层(Layer Normalization)和残差连接层(Residual Connections)也是每一层的重要组成部分,用于稳定训练和提升性能;其中规范化层有助于加速模型的训练过程,并提高模型的稳定性,而残差连接则有助于缓解深度神经网络中的梯度消失问题,使模型能够更深入地学习文本的表示。

1.3 输出模块

经过中间层双向Transformer模块的处理后,BERT的最后一层可以根据任务的不同需求而做不同的调整。
而BERT预训练模型的输出一般主要包含以下两个部分:

  • last_hidden_state:
    这是模型的主要输出之一,形状为 (batch_size, sequence_length, hidden_size),其中 batch_size 表示批处理样本的数量,sequence_length 是输入序列的长度(包括特殊标记如[CLS]和[SEP]),而 hidden_size 是BERT模型的隐藏层维度(通常是768或更大,取决于具体的BERT变体)。这个输出代表了模型对输入序列中每个位置(token)的深度编码表示,它包含了从双向Transformer编码器中获取的上下文相关的语义信息
  • pooler_output:
    形状为 (batch_size, hidden_size),它是对整个输入序列的高层次抽象表示。具体而言,它是序列的第一个标记(通常是[CLS]标记,用于表示整个序列的语义)在最后一层Transformer编码器后的隐藏状态,并经过一个附加的线性层(有时带有softmax激活函数)进一步处理。这个输出常用于后续的分类任务,如情感分析或文本分类,作为整个序列的“聚合”表示

二. BERT模型的两大预训练任务

正如在上文中提到的,BERT模型的两大预训练任务分别是:

  • 遮蔽语言模型(Masked Language Model, MLM):BERT通过对输入序列中的某些token随机遮蔽,并要求模型预测这些遮蔽掉的部分,从而在无监督环境中学习语言模型的上下文表征能力。
  • 下一句预测(Next Sentence Prediction, NSP):在预训练阶段,BERT还会接收两个句子输入,并判断它们是否是连续的上下文关系。这有助于模型捕捉句子间的关系。

这两个任务共同促使BERT去学习语言的内在规律和结构,从而在各种NLP任务上取得优异的性能。

三. BERT模型训练流程中的两个阶段

在BERT的训练过程中,包括以下两个步骤:

  • 预训练 (Pre-training)
    在这个阶段,BERT模型在大规模未标注文本数据上进行训练,通过两个自定义的预训练任务(如上所述的MLM和NSP)来学习通用的语言表示。这一阶段的目标是让模型掌握语言的基础知识和理解上下文的能力。
  • 微调 (Fine-tuning)
    在预训练完成后,BERT模型会被应用到具体的下游自然语言处理任务上,例如情感分析、问答系统等。此时,会在预训练好的BERT模型顶部添加特定于任务的输出层(比如分类层或序列标注层),然后使用有标签的特定任务数据对该模型进行微调。微调阶段会调整所有参数(包括预训练阶段学到的参数),使模型适应特定任务的需求。

所以,在实际应用中,BERT模型经历了从大量无标注数据学习通用语言表示(预训练)到针对性任务优化(微调)的过程。

四. BERT模型的优缺点

4.1 BERT的优点

  • BERT的根基源于Transformer,相比传统RNN更加高效,可以并行化处理同时能捕捉长距离的语义和结构依赖;
  • BERT采用了Transformer架构中的Encoder模块,不仅仅获得了真正意义上的bidirectional context(双向上下文信息),而且为后续微调任务留出了足够的调整空间。

4.2 BERT的缺点

  • BERT模型过于庞大,参数太多,不利于资源紧张的应用场景,也不利于上线的实时处理;
  • BERT目前给出的中文模型中,是以字为基本token单位的,很多需要词向量的应用无法直接使用。同时该模型无法识别很多生僻词,只能以UNK代替;
  • BERT中第一个预训练任务MLM中,[MASK]标记只在训练阶段出现,而在预测阶段不会出现,这就造成了一定的信息偏差,因此训练时不能过多的使用[MASK],否则会影响模型的表现;
  • 按照BERT的MLM任务中的约定,每个batch数据中只有15%的token参与了训练,被模型学习和预测,所以BERT收敛的速度比left-to-right模型要慢很多(left-to-right模型中每一个token都会参与训练)。

五. BERT系列模型简介(对BERT模型的优化)

03

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

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

相关文章

GD32F470_ DS18B20温度传感器模块移植

DS18B20温度传感器 DS18B20数字温度传感器提供9位至12位精度的温度测量,并具有非易失性用户可编程上下触发点报警功能。DS18B20通过单总线通信,根据定义,只需要一条数据线(和地线)即可与单片机通信。此外,DS18B20可以直接从数据线…

vue2开发好还是vue3开发好vue3.0开发路线

Vue 2和Vue 3都是流行的前端框架,它们各自有一些特点和优势。选择Vue 2还是Vue 3进行开发,主要取决于你的项目需求、团队的技术栈、以及对新特性的需求等因素。以下是一些关于Vue 2和Vue 3的比较,帮助你做出决策: Vue 2&#xff1…

关于项目中遇到的一些form表单校验

1.model 属性绑定 form 数据对象 const formModel ref({username: ,password: ,repassword: })<el-form :model"formModel" >2.v-model 绑定 form 数据对象的子属性 <el-inputv-model"formModel.username":prefix-icon"User"placeh…

设计模式详解(十三)——享元模式

享元模式简介 享元模式定义 享元模式&#xff08;Flyweight Pattern&#xff09;是一种用于优化性能的软件设计模式。它是一种结构型的设计模式。它的主要目的是通过共享物件来减少内存使用量&#xff0c;同时分享信息给尽可能多的相似物件&#xff0c;从而降低内存消耗和提高…

2024.3.20力扣每日一题——数组元素的最小非零乘积

2024.3.20 题目来源我的题解方法一 贪心 题目来源 力扣每日一题&#xff1b;题序&#xff1a;1969 我的题解 方法一 贪心 采用贪心&#xff0c;使得最终的序列应该是满足除了二进制位全为1的 2 p − 1 2^p-1 2p−1之外&#xff0c;其余的首尾两两配对进行交换&#xff0c;最…

docker安装nacos,单例模式(standalone),使用mysql数据库

文章目录 前言安装创建文件夹"假装"安装一下nacos拷贝文件夹删除“假装”安装的nacos容器生成nacos所需的mysql表获取mysql-schema.sql文件创建一个mysql的schema 重新生成新的nacos容器 制作docker-compose.yaml文件查看网站 前言 此处有本人写得简易版本安装&…

log4j 集成 ELK环境搭建

一、前言 1.需要准备一台linux服务器&#xff08;最好是CentOS7&#xff09;,内存至少4g以上&#xff08;三个组件都比较占用内存&#xff09; 2.需要有docker使用经验 3. 三个软件的版本要一致 二、安装ElasticSearch 这里先创建一个网络&#xff1a;因为我们还需要部署k…

VS2022编译OpenCV库(静态库和动态库)

OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方…

品牌定位升级|飞雕开关如何从家庭作坊走上国际之路?

飞雕电器,这个名字在中国开关插座行业中如同一面旗帜,自1987年起就扬帆在电工领域的大海中。它不仅见证了这个行业的起起伏伏,还始终以其创新的姿态站在浪尖之上。 飞雕的产品线丰富多彩,除主营的墙壁开关插座领域外,飞雕电器还涉足了与墙壁开关紧密相关的其它领域,现已推出移…

蓝桥杯第十四届C++C组

目录 三国游戏 填充 翻转 【单调队列优化DP】子矩阵 【快速幂、欧拉函数】互质数的个数 【tire树】异或和之差 【质因数分解】公因数匹配 子树的大小 三国游戏 题目描述 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵X, Y, Z (一开始可以认为都…

Linux中安装nacos

Linux中安装nacos 一、前言二、准备1、下载2、上传到服务器3、解压 三、配置1、备份配置文件2、导入sql3、修改前4、修改后 四、使用1、启动2、关闭 一、前言 最近国外的docker似乎是出什么问题&#xff0c;试过很多手段都拉不下 nacos 镜像&#xff0c;就打算在服务器装一下 …

windows git bash 报错 bash: gh: command not found,需要安装 github的做桌面版工具 或者换成git 命令

需要安装 github的做桌面版工具 或者换成git 命令 git clone https://.........git 当你在 Windows 的 Git Bash 中遇到错误 bash: gh: command not found 时&#xff0c;这表示 Git Bash 无法识别 gh 命令。gh 命令是 GitHub 命令行工具的一部分&#xff0c;它提供了从命令行与…

能否安全地删除 Mac 资源库中的文件?

在管理Mac电脑存储空间时&#xff0c;用户确实可能考虑对资源库&#xff08;Library&#xff09;文件夹进行清理以释放空间。Mac资源库是一个系统及应用程序存放重要支持文件的地方&#xff0c;其中包括但不限于配置文件、临时文件、缓存、插件、偏好设置、应用程序支持数据等。…

ModuleNotFoundError: No module named ‘xxx.xx‘; ‘xxx‘ is not a package

ModuleNotFoundError: No module named sqllineage.runner; sqllineage is not a package 数据血缘关系使用python3安装了sqllineage&#xff0c;在执行python脚本时始终报错sqllineage is not a package&#xff0c;经过检查python3安装配置没问题&#xff0c;并且sqllineage…

Rustdesk二次编译,新集成AI功能开源Gpt小程序为远程协助助力,全网首发

环境&#xff1a; Rustdesk1.1.9 sciter版 问题描述&#xff1a; Rustdesk二次编译&#xff0c;新集成AI功能开源Gpt小程序为远程协助助力,全网首发 解决方案&#xff1a; Rustdesk二次编译&#xff0c;新集成开源AI功能Gpt小程序&#xff0c;为远程协助助力&#xff0c…

c语言中有哪些格式说明符,在scanf 会在遇到空白字符(空格、制表符或换行符)时停止读取(即scanf会忽略空格)

在C语言的 scanf 函数中&#xff0c;有几个格式说明符在遇到空白字符&#xff08;包括空格、制表符和换行符&#xff09;时会停止读取。这些格式说明符通常用于读取特定类型的输入数据。以下是一些常用的格式说明符&#xff1a; 1.%d 或 %i&#xff1a;用于读取整数。当 scanf …

【蓝桥杯嵌入式】六、真题演练(三)-2研究篇:第13届第一场真题

温馨提示&#xff1a; 真题演练分为模拟篇和研究篇。本专栏的主要作用是记录我的备赛过程&#xff0c;我打算先自己做一遍&#xff0c;把遇到的问题和不同之处记录到演练篇&#xff0c;然后再返回来仔细研究一下&#xff0c;找到最佳的解题方法记录到研究篇。题目在&#xff1a…

远程过程调用(远程调用)

远程过程调用&#xff08;远程调用&#xff09; 1、什么是分布式计算 在计算机科学中&#xff0c;分布式计算&#xff08;英语&#xff1a;Distributed computing&#xff09;&#xff0c;又译为分散式运算。这个研究领域&#xff0c;主要研究分布式系统&#xff08;Distribu…

学习周报:文献阅读+Fluent案例+水力学理论学习

目录 摘要 Abstract 文献阅读&#xff1a;物理信息的神经网络与湍流传质的非封闭机制模型相结合 文献摘要 提出问题 提出方案 实验设置 所需方程介绍 雷诺时均方程&#xff08;RANS&#xff09; K-epsilon两方程模型 神经网络框架 DNN部分 损失函数定义 PINN部分…

Francek Chen 的128天创作纪念日

目录 Francek Chen 的128天创作纪念日机缘收获日常成就憧憬 Francek Chen 的128天创作纪念日 Francek Chen 的个人主页 机缘 不知不觉的加入CSDN已有两年时间了&#xff0c;最初我第一次接触CSDN技术社区是在2022年4月的时候&#xff0c;通过学长给我们推荐了几个IT社区平台&a…