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

news2024/11/15 13:46:29

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.coloradmin.cn/o/1575388.html

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

相关文章

初识C++ · 类和对象(上)

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5.类的作用域 6.类的实例化 7.类的对象大小的计算 8.类成员函数的this指针 1.面向过程和面向对象初步认识 C语言是一门面向过程的语言,注重的…

ASP.Net添加Swagger注释

文章目录 Swagger添加Swagger注释 Swagger 添加Swagger注释 1、右击项目->选择属性->点击生成->输出,选中文档文件 2、配置服务 在program.cs 文件里配置SwaggerUI //增加项一 builder.Services.AddSwaggerGen(c> {c.SwaggerDoc("v1", ne…

pytorch 演示 tensor并行

pytorch 演示 tensor并行 一.原理二.实现代码 本文演示了tensor并行的原理。如何将二个mlp切分到多张GPU上分别计算自己的分块,最后做一次reduce。 1.为了避免中间数据产生集合通信,A矩阵只能列切分,只计算全部batch*seqlen的部分feature 2.因为上面的步骤每张GPU只有部分featu…

Leetcode刷题-哈希表详细总结(Java)

哈希表 当我们想使⽤哈希法来解决问题的时候,我们⼀般会选择如下三种数据结构。 数组set (集合)map(映射) 当我们遇到了要快速判断⼀个元素是否出现集合⾥的时候,就要考虑哈希法。如果在做⾯试题⽬的时候…

搭建好WordPress网站后的基本操作流程

考虑到很多朋友是第一次使用WordPress,这里给大家分享一下基本的WordPress操作流程,你可以跟着实际情况决定操作步骤。 1.设置网站SSL安全证书。 我采用的是Hostease家的Linux主机产品,自带免费SSL证书 。支持一键安装wordpress程序。 2.进…

智慧驿站式的“智慧公厕”,给城市新基建带来新变化

随着智慧城市建设的推进,智慧驿站作为一种多功能城市部件,正逐渐在城市中崭露头角。这些智慧驿站集合了智慧公厕的管理功能,为城市的新基建带来了全新的变革。本文以智慧驿站智慧公厕源头实力厂家广州中期科技有限公司,大量精品案…

MyBatis操作数据库(1)

前言 在应用分层的学习时, 我们了解到web应用程序一般分为三层,即Controller, Service, Dao. 之前的案例中, 请求流程如下: 浏览器发起请求, 先请求Controller, Controller接受到请求后,调用Service进行业务逻辑处理, Service再调用Dao, 但是Dao层的数据是Mock的, 真实的数据…

基于 Vue3 + Webpack5 + Element Plus Table 二次构建表格组件

基于 Vue3 Webpack5 Element Plus Table 二次构建表格组件 文章目录 基于 Vue3 Webpack5 Element Plus Table 二次构建表格组件一、组件特点二、安装三、快速启动四、单元格渲染配置说明五、源码下载地址 基于 Vue3 Webpack5 Element Plus Table 二次构建表格组件&#x…

【白菜基础】蛋白组学之生信分析(1)

刚换了一个新课题组,新老板的研究方向为蛋白组学,从未接触过蛋白组学的我准备找一组模拟数据进行生信分析的入门学习。 蛋白组学数据挖掘流程图,参考公众号:蛋白质组学数据挖掘思路解析 (qq.com) 一、认识数据 我们组的数据主要…

【高校科研前沿】中国科学院南京地理与湖泊研究所肖启涛博士为一作在Sci. Bull发文:我国湖泊二氧化碳从大气的源向汇转变

目录 1.文章简介 2.研究内容 3.文章引用 1.文章简介 论文名称:Lakes shifted from a carbon dioxide source to a sink over past two decades in China 第一作者及通讯作者:肖启涛(博士生),段洪涛(研究…

【已解决】HalconDotNet.HOperatorException:“HALCON error #1201: Wrong type of control

前言 最近在学习Halcon视觉和C#的联合开发,碰到一个比较有意思的问题记录一下,大致的报错信息是说我用的halcondotnet版本和我在halcon导出的使用的halcondotnet.dll版本不一致,所以才报错的! 解决 首先你得找到你安装halcon的…

接口自动化入门:Jmeter的多组数据测试、JDBC驱动及数据断言!

在进行接口测试时,我们经常需要对接口进行多组数据测试,以验证接口在不同输入条件下的表现。同时,我们也需要对接口返回的数据进行断言,以确保接口返回的数据符合预期结果。JMeter正是一个强大的工具,可以帮助我们实现…

【Linux】正则表达式实验操作实例

正则表达式是一种强大的工具,用于在文本中查找、匹配和替换特定的字符串模式。 实验目的 掌握正则表达式的表达方式掌握grep/egrep命令的用法掌握sed 命令的用法掌握awk命令的用法 正则表达式 实验目的实验内容实验过程创建grep文件来进行如下操作用sed命令完成下列…

寻找排序数组中的最小值

题目描述 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次…

如何水出第一篇SCI:SCI发刊历程,从0到1全过程经验分享!!!

如何水出第一篇SCI:SCI发刊历程,从0到1全路程经验分享!!! 详细的改进教程以及源码,戳这!戳这!!戳这!!!B站:Ai学术叫叫兽e…

机器学习(30)

文章目录 摘要一、文献阅读1. 题目2. abstract3. 网络架构3.1 Sequence Generative Adversarial Nets3.2 SeqGAN via Policy Gradient3.3 The Generative Model for Sequences3.4 The Discriminative Model for Sequences(CNN) 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过…

UWB 雷达动目标检测

1. 静态载波滤除 1. 首先对所有接收脉冲求平均得出参考接收脉冲 [Cir数据为二维数组64*n, 其中n为慢时间域采样的数据帧数] 2. 接着利用每一束接收脉冲减去参考接收脉冲就可以得到目标回波信号,参考接收脉冲的表达式为 2. RD 谱 对雷达回波做静态载波滤…

Linux:IO多路转接之epoll

文章目录 epoll历史epoll的接口epoll_createepoll_waitepoll_ctl epoll原理代码实验 前面的内容介绍了select多路转接,也分析了其利弊,后面用poll改良了select,解决了部分的缺点,但是对于一些核心的缺点还是不能保证,比…

Langchain教程 | langchain+OpenAI+PostgreSQL(PGVector) 实现全链路教程,简单易懂入门

前提: 在阅读本文前,建议要有一定的langchain基础,以及langchain中document loader和text spliter有相关的认知,不然会比较难理解文本内容。 如果是没有任何基础的同学建议看下这个专栏:人工智能 | 大模型 | 实战与教程…

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

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