【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

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

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

相关文章

4.7Qt

自由发挥应用场景实现一个登录窗口界面。 mywidget.cpp #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口相关设置this->setWindowTitle("原神启动");this->setWindowIcon(QIcon("C:\\Users\\17212\\Pict…

查遍整个知网都没找到的创新点!基于多目标蜣螂算法的微网/综合能源优化调度程序代码!

前言 随着微电网和分布式新能源的发展,利用动物界觅食或繁殖行为进行寻优的方法受到了人们的关注。多目标蜣螂算法(Multi-Objective Cockroach Algorithm,MOCA)是一种基于自然界中蜣螂觅食行为的多目标优化算法。它模拟了蜣螂在寻…

一文了解重塑代币发行方式的创新平台 — ZAP

代币的发行方式对加密市场有着重要的影响,它直接影响着项目的社区建设、流动性、价格稳定性以及投资者的参与度,未来预期等!合适的发行方式可以吸引更多的投资者和用户参与,提升项目的社区建设和价值实现。不当的发行方式和分配&a…

C++ - 第一节

一.C关键字(C98) C总计63个关键字,C语言32个关键字 asmdoifretuntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeid public break elselongsizeoftypenamethrow caseenummutablestaticunionwchar_tcatchexplicitnamespacestatic_castu…

力扣1379---找出克隆二叉树的相同节点(Java、DFS、简单题)

目录 题目描述: 思路描述: 代码: (1): (2): 题目描述: 给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始树 ori…

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

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

微信小程序使用自己的布局

我第一天学习微信小程序,照着黑马程序员老师的操作模仿编辑。因为视频是23年的,我24年4月份学习发现很多地方不一样了。 新版微信开发者工具中没有自带wxss文件。我自己建了一个list.wxss文件,发现用不了,在list.wxml文件中编写v…

【数据分享】1981-2023年全国各城市逐日、逐月、逐年最低气温(shp格式)

气象数据是我们在各种研究中都会使用到的基础数据,之前我们分享了Excel格式的1981-2023年全国各城市的逐日、逐月、逐年最低气温数据(可查看之前的文章获悉详情)。 好多小伙伴拿到数据后问我们有没有GIS矢量格式的该数据,我们专门…

Java-变量

变量是什么:就是可以变化的量!Java是一种强类型语言,每个变量必须声明声明其类型Java变量是程序中最基础的存储单元,其要素包括变量名,变量类型和作用域 type varName [value][{,varName[value]}]; //数据类型 变量…

搜索二维矩阵2 合并两个有序链表

240. 搜索二维矩阵 II - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int i matrix.size() - 1, j 0;while(i > 0 && j < matrix[0].size()){if(matrix[i][j…

软件设计师30--数据库系统章节回顾

软件设计师30--数据库系统章节回顾 章节重要内容考情分析 章节重要内容 考情分析

基于VUE的电影交流平台的设计与实现

摘 要 伴随着信息科技和互联网科技的迅猛发展&#xff0c;人们的消费重心随着生活水平的提高逐渐地转移到了精神层次&#xff0c;而电影则是其中之一。以前电影交流采用面对面交流的方法&#xff0c;局限了电影讨论交流的范围和方式。本系统是一个基于VUE框架&#xff0c;使用…

Java基础入门--Java API课后题

五、编程题 1.编写一个每次随机生成 10个 0&#xff08;包括&#xff09; 到 100 之间的随机正整数。 import java.util.Random;public class Example01{public static void main(String[] args) {for(int i0;i<10;i) {System.out.println(new Random().nextInt(0,100));}}…

ssm026校园美食交流系统+vue

校园美食交流系统 摘 要 1 前 言 3 第1章 概述 4 1.1 研究背景 4 1.2 研究目的 4 1.3 研究内容 4 第二章 开发技术介绍 5 2.1Java技术 6 2.2 Mysql数据库 6 2.3 B/S结构 7 2.4 SSM框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行…

【C++ STL容器适配器】stack 栈

文章目录 【 1. 基本原理 】【 2. stack 的创建 】2.1 创建一个空的的 stack 适配器&#xff0c;并采用默认的 deque 基础容器2.2 指定其他序列式容器2.3 通过基础容器初始化 stack2.4 通过一个 stack 初始化另一个 stack 【 3. stack 支持的成员函数 】 【 1. 基本原理 】 st…

Java 面试宝典:Redis 的线程模型是怎么样的?

大家好&#xff0c;我是大明哥&#xff0c;一个专注「死磕 Java」系列创作的硬核程序员。 本文已收录到我的技术网站&#xff1a;https://www.skjava.com。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经 Redis 的线程模型其实是分两块的&#xff1a; Redis 6.0 …

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第九套

华为海思校园招聘-芯片-数字 IC 方向 题目分享&#xff08;有参考答案&#xff09;——第九套 部分题目分享&#xff0c;完整版获取&#xff08;WX:didadidadidida313&#xff0c;加我备注&#xff1a;CSDN huawei数字芯片题目&#xff0c;谢绝白嫖哈&#xff09; 单选 1&…

探索K-近邻算法(KNN):原理、实践应用与文本分类实战

第一部分&#xff1a;引言与背景 KNN算法在机器学习领域的重要性及其地位 KNN算法作为机器学习中的基石之一&#xff0c;由于其概念直观、易于理解并且不需要复杂的模型训练过程&#xff0c;被广泛应用于多种场景。它在监督学习中占据着特殊的位置&#xff0c;尤其适用于实时…

Tesseract 安装与配置及验证码识别

Tesseract 安装与配置 Tesseract 的使用&#xff0c;需要环境的支持&#xff0c;以实现简单的转换和训练。 1.环境 python版本&#xff1a;3.8.3 &#xff08;python2.7或3以上&#xff09; 操作系统&#xff1a;windows系统 2.Python安装 详见&#xff1a;Miniconda的…

吹爆!遥感高光谱分类(Python)

目录 一、数据集下载 二、安装包 三、数据处理 四、模型训练 五、模型推理 六、踩坑记录 一、数据集下载 Hyperspectral Remote Sensing Scenes - Grupo de Inteligencia Computacional (GIC) (ehu.eus) Installing SPy — Spectral Python 0.21 documentation 二、安装…