10 BERT

目录

1 综述

1.1 BERT的核心思想

1.2 BERT的关键技术:预训练阶段

1.3 微调阶段

2 BERT的架构

2.1 输入处理

3. 特征选择/学习模块

BERT 的自注意力过程

4. 预训练任务:同时进行

4.1 Next Sentence Prediction (NSP)

4.2 Masked Language Model (MLM)

4.3  模型的输出以及使用

4.3.1 序列级别的输出

4.3.2 词级别的输出


        

前面介绍了transformer模型,本篇开始介绍BERT;

任务类型:

BERT模型的输出包括序列级别的输出和词级别的输出。序列级别的输出通常用于文本分类等任务,而词级别的输出则用于词级别的任务,如命名实体识别。这些输出是通过模型的前向传播得到的,并且可以用于各种下游任务。

  • Bert最擅长信息提取任务,如文本分类、名词识别等。
  • 大模型如LLaMA、ChatGLM性能更强在自然对话、问答等生成型任务。

1 综述

        BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型,BERT模型是一个双向基于上下文嵌入模型。由Google的研究人员在2018年提出。BERT模型的主要贡献在于它能够理解文本中词语的上下文含义,并且能够双向地处理这些上下文信息,这使得它在许多自然语言处理任务中表现出色。

BERT模型:

  • BERT-large:L=24,A=16,H=1024
  • BERT-base:L=12,A=12,H=768
  • BERT-medium:L=8,A=8,H=512
  • BERT-small:L=4,A=8,H=512
  • BERT-mini:L=4,A=4,H=256
  • BERT-tiny:L=2,A=2,H=128

1.1 BERT的核心思想

  1. 双向性:与之前大多数语言模型仅能从左到右(单向)处理句子不同,BERT能够同时考虑给定词前面和后面的上下文,这使得它能够更好地理解词语的多义性和上下文敏感性。

  2. 预训练:BERT首先在大量未标记文本上进行预训练,学习到通用的语言表示,然后再针对特定任务进行微调(fine-tuning),这样可以显著提高下游任务的表现。

1.2 BERT的关键技术:预训练阶段

  1. Masked Language Model (MLM):在预训练过程中,BERT会随机遮盖掉输入文本中的一部分单词(大约15%),然后尝试根据剩余的上下文预测这些被遮盖的单词。这种方法能够使模型学习到单词之间的双向关系。

  2. Next Sentence Prediction (NSP):除了MLM外,BERT还采用了另一个预训练目标,即预测两个句子是否连续。这对于理解文本段落的结构非常有用。

1.3 微调阶段

在预训练完成后,BERT模型可以根据具体的任务需求进行微调。对于不同的任务,如文本分类、问答系统等,只需要添加一个简单的输出层,并使用少量标注数据进行训练即可。

2 BERT的架构

transformer是基于机器翻译任务提出的,采用了主流的encoder-decoder框架。而做为后来者的BERT,其核心特征提取模块延用了transformer中的encoder,继而又把此模块应用到了一个(两个子任务)新的任务上。个人看法,BERT在算法上并没有做很多的改进,但在算法的应用上,取得了很大的成功,奠定了预训练模型在NLP领域的主导地位。
  为了适用新的任务,BERT构建了自己的输入处理模块与输出处理模块。整体结构如下图:

         

        如上图所示模块1为输入模块,其作用是对原始的文字输入进行信息提取,分别提取了字信息,位置信息与句信息(文字是属于前一句还是后一句。)。模块2为特征提取模块,结构采用了transformer中的encoder结构,之前在transfor的文章里讲过,这里不在赘述。模块3为任务处理模块,主要是对模块2的输出做了相应的转换,以支持不同的子任务。后面的两个小节会详细讲解第1和第3个模块。

2.1 输入处理

       INPUT: token vector + 位置编码 + 句子特征;

  1. Token Embeddings:每个单词的嵌入向量。
  2. Segment Embeddings:用于区分句子A和句子B的嵌入向量,例如在问答任务中,问题和答案可能分别属于句子A和句子B。
  3. Position Embeddings:表示单词在句子中的位置。

        BERT的输入与transformer的输入相比,多了一项句子特征,即当前字符是属于第一句话,还是属于第二句话。之所以增加这个特征,是因为BERT在训练时有个预测句子关系的任务。

3. 特征选择/学习模块

BERT 的自注意力过程

  1. 输入嵌入

    • 输入文本被分词并转换为词嵌入向量。
    • 词嵌入向量与位置编码向量相加,以提供位置信息。
    • 对于句子对任务,还需要添加段落嵌入向量以区分不同的句子。
  2. 多头自注意力

    • BERT 使用多头自注意力机制来处理输入序列。
    • 在每个注意力头中,输入嵌入向量通过三个不同的线性变换得到Query (Q)、Key (K) 和 Value (V) 向量。
  3. 计算注意力分数

    • 对于每个位置 𝑖i,计算该位置与其他所有位置 𝑗j 之间的注意力分数。
    • 注意力分数通过计算Query向量 𝑄𝑖 与Key向量 𝐾𝑗 的点积来得到,然后除以缩放因子 (其中 𝑑𝑘​ 是Key向量的维度)。
    • 注意力分数通过Softmax函数进行归一化,得到最终的注意力权重。
  4. 加权求和

    • 使用注意力权重对Value向量进行加权求和,得到每个位置的新表示。
    • 新的表示向量是通过加权求和得到的,即 ,其中 𝛼𝑖j 是位置 𝑖关注位置 𝑗的注意力权重。              
  5. 头的拼接

    • 多个注意力头的输出被拼接到一起形成一个更大的向量。
    • 拼接后的向量通过一个线性变换映射回原来的维度。
  6. 前馈神经网络

    • 拼接后的向量通过一个位置前馈网络(Position-wise Feed-Forward Network)进行进一步处理。
    • 前馈网络由两个线性层组成,中间夹着一个激活函数(如ReLU)。
  7. 残差连接与层归一化

    • 在每个子层前后添加残差连接。
    • 在每个子层输出后进行层归一化。

4. 预训练任务:同时进行

        Bert的训练有两个子任务,一个任务(NSP, Next Sentence Prediction)是预测输入中的A和B是不是上下句。另一个是预测随机mask掉的字符的任务(MLM, Masked LM)。两个子任务的输入均来自特征抽取模块,不同的是NSP任务的输入只选取了CLS对应的输出,而序列预测任务的输入则是除CLS对应位置的其它位置的数据。模型最终的损失是这两个子任务损失的加和。整体如下图。

4.1 Next Sentence Prediction (NSP)

Next Sentence Prediction是BERT原始版本中的一个任务,其目的是让模型学会理解句子之间的关系。这个任务后来在RoBERTa中被移除,因为研究发现它对最终性能的影响有限。

  • 构造样本:在训练过程中,对于每一个句子A,会随机选择一个句子B作为下一个句子。50%的情况下,句子B确实是句子A在原文本中的下一个句子;另外50%的情况下,句子B是从语料库中随机抽取的一个不相关的句子。
  • 训练目标:模型需要判断句子B是否是句子A的下一个句子。这是一个二分类问题,即模型需要学习一个分类器来预测句子A和句子B是否连续。
  • 损失函数: MLM的损失函数通常采用交叉熵损失(Cross-Entropy Loss);

4.2 Masked Language Model (MLM)

       Masked Language Model是BERT的一个核心组成部分。它的目的是让模型学习如何预测被随机遮蔽掉的单词。具体步骤如下:

  • 遮蔽策略:在输入的句子中,大约15%的token会被随机遮蔽。这15%中,80%的token被替换成特殊标记[MASK],10%保持不变,另外10%随机替换成其他token。这样的设计有助于模型学习更复杂的上下文关系。
  • 训练目标:模型的任务是基于未被遮蔽的token预测被遮蔽的token。也就是说,模型要从输入的序列中预测出哪些token被遮蔽掉了,并尽可能准确地预测出它们的真实值。
  • 损失函数: MLM的损失函数通常采用交叉熵损失(Cross-Entropy Loss);

4.3  模型的输出以及使用

4.3.1 序列级别的输出

序列级别的输出通常指的是第一个token([CLS]标记)的输出向量。这个向量通常用于文本分类等任务,因为它综合了整个输入序列的信息。

特点

  • 维度固定:序列级别的输出向量的维度是固定的,通常与模型的隐藏层大小相同。
  • 全局信息:这个向量包含了整个输入序列的信息,可用于分类等任务。
  • 用于分类任务:在下游任务中,序列级别的输出通常用于文本分类任务,通过一个线性层和softmax函数转换为类别概率分布。

输出大小

  • 维度:序列级别的输出向量的维度是固定的,通常与模型的隐藏层大小相同。
  • 具体大小:例如,在BERT-base模型中,隐藏层大小为768,所以序列级别的输出向量的大小是768。
4.3.2 词级别的输出

词级别的输出是指每个词(token)的输出向量。这些向量可以用于词级别的任务,如命名实体识别、词性标注等。

特点

  • 维度固定:每个词级别的输出向量的维度也是固定的,通常与模型的隐藏层大小相同。
  • 词级信息:每个输出向量包含了该词的信息及其上下文信息。
  • 用于词级别任务:词级别的输出可以用于词级别的任务,如通过一个线性层转换为每个词的标签概率分布。

输出大小

  • 维度:每个词级别的输出向量的维度也是固定的,通常与模型的隐藏层大小相同。
  • 具体大小:例如,在BERT-base模型中,隐藏层大小为768,所以每个词级别的输出向量的大小也是768。
  • 输出形状:如果输入序列长度为N,那么词级别的输出形状是 𝑁×768N×768。

输出的使用

下游任务

  • 文本分类:使用序列级别的输出,通过一个线性层和softmax函数转换为类别概率分布。
  • 命名实体识别:使用词级别的输出,通过一个线性层转换为每个词的标签概率分布。
  • 问答系统:使用序列级别的输出或词级别的输出来定位答案的起始和结束位置

ref:

https://blog.csdn.net/nocml/article/details/124951994

https://zhuanlan.zhihu.com/p/681208726

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

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

相关文章

基于微信小程序+SpringBoot+Vue的网络安全科普系统(带1w+文档)

基于微信小程序SpringBootVue的网络安全科普系统(带1w文档) 基于微信小程序SpringBootVue的网络安全科普系统(带1w文档) 优质的网络安全科普系统不仅可以单纯的满足工作人员管理的日常工作需求,还可以满足用户的需求。可以降低工作人员的工作压力,提高效…

rust 初探 -- 常用的集合

rust 初探 – 常用的集合 Vector 存储在堆内存上的数据&#xff0c;运行时可以动态变大或者变小。 Vec 特性&#xff1a; 由标准库提供&#xff0c;可以存储多个相同类型的值&#xff0c;并且值在内存中连续存放 Vector 的创建 fn main() {// Vec::new()let v: Vec<i32…

Mojo模型的自动调参:深度学习优化的新境界

Mojo模型的自动调参&#xff1a;深度学习优化的新境界 深度学习模型的参数调优是提高模型性能的关键步骤之一&#xff0c;但同时也是一个耗时且复杂的过程。Mojo模型作为一个先进的深度学习框架&#xff0c;其设计理念包含了自动化调参的概念&#xff0c;以简化模型训练流程并…

2024.7.29 作业

1> 写一个日志文件&#xff0c;将程序启动后&#xff0c;每一秒的时间写入到文件中 #include <myhead.h> int main(int argc,const char *argv[]) {FILE *fp NULL;if((fpfopen("./log.txt","r"))NULL) {perror("open error1");return…

解决 Git 访问 GitHub 时的 SSL 错误

引言 在使用 Git 进行版本控制时&#xff0c;我们可能会遇到各种网络相关的错误。其中一种常见的错误是 SSL 连接问题&#xff0c;这会导致 Git 无法访问远程仓库。本文将介绍一个具体的错误 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0&#xff0c;以及如何通过禁用 SSL 证…

Python数值计算(1)

准备总结一下通过Python进行数值计算的环境&#xff0c;先说一下数值计算的基本语法和库。 1.基本运算 Python中提供基本运算符&#xff0c;常见的加减乘除&#xff0c;唯一需要注意的是除法&#xff0c;整数除法和浮点数除法不一样。 一般除法/&#xff0c;无论参与运算的数…

【嵌入式英语教程--3】C语言中的基本数据类型

C语言中的基本数据类型 英文原文 In the C programming language, basic data types form the building blocks of any program. These include int, float, char, and bool. The int type is used for integer values, float for floating-point numbers, char for single c…

相机拍摄如何正确曝光

不同场景下的曝光思路 数码时代&#xff0c;我们并不需要准确曝光&#xff0c;我们只需要用单张或者多张照片&#xff0c;记录下场景的全部亮度信息直方图可以辅助我们确认&#xff0c;是否完整记录下了场景的亮度信息正常光比环境&#xff0c;提倡“向右曝光”。大光比环境&a…

通信系统的均衡技术

1、摘要 在通信系统中&#xff0c;信号从发送端发出&#xff0c;经过信道&#xff0c;到达接收端&#xff0c;而在传输的过程中&#xff0c;信号会发生失真&#xff0c;产生失真的原因有很多&#xff0c;包括阻抗不匹配&#xff0c;干扰等。为了优化信号质量&#xff0c;需要进…

【PyTorch笔记】训练时显存一直增加到 out-of-memory?真相了!

最近用 Pytorch 训模型的过程中&#xff0c;发现总是训练几轮后&#xff0c;出现显存爆炸 out-of-memory 的问题&#xff0c;询问了 ChatGPT、查找了各种文档。。。 在此记录这次 debug 之旅&#xff0c;希望对有类似问题的小伙伴有一点点帮助。 问题描述&#xff1a; 训练过…

mysql的唯一索引和普通索引有什么区别

在MySQL中&#xff0c;唯一索引&#xff08;UNIQUE Index&#xff09;和普通索引&#xff08;普通索引&#xff0c;也称为非唯一索引&#xff09;有一些关键的区别。以下是它们的比较以及性能分析&#xff1a; 唯一索引与普通索引的区别 唯一性&#xff1a; 唯一索引&#xff…

也来聊一聊反复开关空调是否更费电

文章目录 为了制造噱头而刻意开展的毫无实际价值的实验空调制冷的基本原理空调主要耗电部件分析空调主要耗电阶段分析启动阶段&#xff1a;瞬时功率较高&#xff0c;但持续时间较短制冷运行阶段&#xff1a;压缩机持续运行&#xff0c;耗电量最大温度达到设定值后的阶段&#x…

深入探索非线性数据结构:树与图的世界

在数据结构的广阔天地中&#xff0c;非线性结构以其独特的逻辑关系和广泛的应用场景&#xff0c;成为计算机科学领域的重要组成部分。其中&#xff0c;树和图作为两种典型的非线性数据结构&#xff0c;不仅深刻影响了算法的设计与分析&#xff0c;也广泛应用于各种实际问题的解…

基于tkinter的学生信息管理系统之登录界面和主界面菜单设计

目录 一、tkinter的介绍 二、登陆界面的设计 1、登陆界面完整代码 2、部分代码讲解 3、登录的数据模型设计 4、效果展示 三、学生主界面菜单设计 1、学生主界面菜单设计完整代码 2、 部分代码讲解 3、效果展示 四、数据库的模型设计 欢迎大家进来学习和支持&#xff01…

灯具外贸公司用什么企业邮箱好

灯具外贸公司面对海外市场的推广、产品销售、客户沟通、市场信息收集等多重需求&#xff0c;选择一个合适的企业邮箱显得尤为重要。本文将介绍灯具外贸公司为什么应选择Zoho Mail企业邮箱&#xff0c;并详细探讨其优势和功能。 一、公司背景 广东省深圳市光明新区&#xff0c…

持久化存储:Mojo模型中模型保存与加载的艺术

持久化存储&#xff1a;Mojo模型中模型保存与加载的艺术 在机器学习项目中&#xff0c;模型的持久化存储是一个关键环节&#xff0c;它允许我们将训练好的模型保存下来&#xff0c;并在需要时重新加载使用。Mojo模型&#xff0c;作为一个虚构的高级机器学习框架&#xff0c;支…

Redis 安装和数据类型

Redis 安装和数据类型 一、Redis 1、Redis概念 redis 缓存中间件&#xff1a;缓存数据库 nginx web服务 php 转发动态请求 tomcat web页面&#xff0c;也可以转发动态请求 springboot 自带tomcat 数据库不支持高并发&#xff0c;一旦访问量激增&#xff0c;数据库很快就…

vTESTstudio中如何添加DLL文件?

文章目录 一、CANoe添加DLL二、vTESTstudio中添加DLL1.手动添加2.代码添加 一、CANoe添加DLL 在CANoe中添加DLL的路径如下图&#xff0c;在Simulation Setup中选择需要添加的节点&#xff0c;右键选择Configuration进行添加DLL。 二、vTESTstudio中添加DLL 1.手动添加 在打…

java中 VO DTO BO PO DAO

VO、DTO、BO、PO、DO、POJO 数据模型的理解和实际使用_vo dto bo-CSDN博客 深入理解Java Web开发中的PO、VO、DTO、DAO和BO概念_java dto dao-CSDN博客

【计算机网络】WireShark和简单http抓包实验

一&#xff1a;实验目的 1&#xff1a;熟悉WireShark的安装流程和界面操作流程。 2&#xff1a;学会简单http的抓取和过滤&#xff0c;并分析导出结果。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a; Windows 2019操作系统的计算机等。 软件&#xff1a;WireShark、…