深度学习经典模型之BERT(下)

news2024/11/14 14:45:21

在"深度学习经典模型之BERT(上)"我们描述了BERT基本信息、意义、与GPT和Transformer的区别、预训练、自监督等相关信息后,本章节将介绍BERT的输入、Encoder、微调及两个主流变种。

BERT inputs

切词方法

BERT的切词方法用的是WordPiece embeddings,其思想是如果一个词在整个里面出现的概率不大的话,就应该把它切开,看他的一个子序列,如果它的一个子序列(比如它的词根)出现的概率很大,那么只保留这个子序列就好了,这样可以把一个相对长的词切成一段又一段的片段,这些片段还是经常出现的,就可以用相对较小的30k的词典就能表示一个比较的文本。这样可以避免按照空格切词时一个词作一个token会让数量大进而导致词典变大,让可学习的参数都集中在了嵌套层里的问题。

序列的第一个词永远是一个特殊词元[CLS]代表序列开始(全称:classification), 在每个句子后面放一个特殊词[SEP]表示separate或end,全称separator。如上图所示。

image.png

输入嵌入

Bert输入嵌入包含三部分的内容:token embeddings,position embeddings,和Segment Embeddings(token所属段落编码的embeddings),示意如上图所示。 即对于每一个token(词元)在BERT的向量表示这个token本身的embedding加上它在哪个句子的embedding再加上位置的embedding.

在Transfomer里面位置信息是手动构造出的矩阵,但是在BERT里面不管你是属于哪个句子还是位置在哪,它对应的向量的表示都是通过学习而来的。

  • Token Embeddings:采用look up的方式,将每个token转换成768维的向量。
  • Segment Embeddings:BERT支持双句输入,Segment(0,1)用于区分a、b句。
  • Position Embeddings:采用训练式位置编码,通过look up获取位置编码。

transformer的输入是由 word embedding + position embedding组合而成的向量x.

BERT Encoder

基础架构

image.png

BERT的Encoder包含三个部分的内容:输入、多头注意力与前馈神经网络。对应的是Transformer的Encooder部分, 其中输入部件的组成比Transormer多了一层,具体见Bert input章节。

Bert与Transformer不同的是,BERT仅采用Transfomer的Encoder,分为BERT bae与BERT large,其层数等参数都有所不同。

BERT Base信息

BERT-base采用12层的Transformer Encoder堆叠,上一层的输出作为下一层的输入,基本信息与架构图如下:

基本信息架构示意图
encoder层数(layers) :12层 模型最大输长度(max_len) : 512 维度(dim) : 768 头数(Head,简称h) :12 参数: 110M GPU:7G+image.png

BERT large信息

BERT-large采用24层的Transformer Encoder堆叠,上一层的输出作为下一层的输入,基本信息与架构图如下:

基本信息架构示意图
encoder层数(layers) :24层 模型最大输长度(max_len) : 1024 维度(dim) : 768 头数(Head,简称h) :16 参数: 340M GPU:32G+image.png

BERT Fintune - 微调

预微调模块

BERT本质是通过在海量的语料的基础上运行自监督学习方法为单词学习一个好的特征表示。通过大量的数据预训练得到的通用模型,后续基于通用模型再进行微调。

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

image.png

微调任务

句对分类任务

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

  • 输入: 两句子,[CLS]sentence1[SEP]sentence2[SEP]
  • 输出: 句子关系标签。
  • 做法: 和单句分类操作一样,只不过是二分类。

单句分类任务

单句分类任务是判断句子属于哪个类别,如新闻分类、问题领域分类等。

  • 输入: 一个句子,形如 [CLS]sentence[SEP];
  • 输出: 输出句子类别标签。
  • 做法: 选择bert模型输出的第一个位置的token,也就是[CLS]的向量作为下游任务的输入。

QA任务

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

  • 输入: 一个问题,一段文本,形如[CLS]question[SEP]content[SEP]
  • 输出: 答案在文本中的索引(标出答案的位置)。

NER任务

NER(Named Entity Recognition 命名实体识别)的过程,就是根据输入的句子,预测出其序列标注的过程。

  • 输入: 念熹在清华大学的体育场看了中国男篮的一场比赛
  • 输出: B-PER,E-PER,O, B-ORG,I-ORG,I-ORG,E-ORG,O,B-LOC,E-LOC,O,O,B-ORG,I-ORG,I-ORG,E-ORG,O,O,O,O

其中,“念熹”以PER,“清华大学”以ORG,“体育场”以LOC,“中国男篮”以ORG为实体类别分别挑了出来。

BIOES标注方式中含义

B,即Begin,表示开始
I,即Intermediate,表示中间
E,即End,表示结尾
S,即Single,表示单个字符
O,即Other,表示其他,用于标记无关字符

BERT变种

RoBERTa - 主流

特点

  • 舍弃NSP任务,并使用更长的序列长度
  • 使用更多的预训练数据 (由16GB 升-> 160GB)
  • 更大的batch size (batch size 256 -> batch size 8K)
  • 使用更大的词表 (30K -> 50K)

括号中的数据代表传统bert到ROBERTa时配置变化

动态掩码

原本的BERT采用的是static mask的方式,就是在create pretraining data中,先对数据进行提前的mask。

为了避免在每个epoch中使用相同的mask数据,充分利用数据,定义了dupe factor,这样可以将训练数据复制dupe factor份,然后同一条数据可以有不同的mask,注意这些数据不是全部都喂给同一个epoch,是不同的epoch,例如dupe factor=10,epoch=40则每种mask的方式在训练中会被使用4次。

动态掩码的方式在模型训练阶段实时计算掩码的位置和方法,能够最大限度的保证同一段文本在不同epoch下使用不同的掩码模式,提高了数据的复用效率

ALBERT

  • 词向量因式分解。BERT中 embedding 维度E与Transformer 隐层维度 H一致ALBERT 引入词向量因式分解方法解耦E和H,先将词向量编码到低维空间E,然后通过个全连接层将E映射到H,计算复杂度从 (VH) 降低到 (VE + EH)
  • Transformer 跨层参数共享。ALBERT中每一层Transformer的参数都是一样的,类似于一个循环结构,每次都经过相同的Transformer层
  • 引入sop (Sentence Order Prediction) 任务代替NSP任务

附:Bert中的特殊词元表示

在BERT中,和是特殊的词元(token),用于在输入序列中标记特定的位置和边界。

[CLS]

[CLS]它是表示序列开头的特殊词元,全称为"classification"。在BERT中,输入序列的第一个位置被标记为[CLS],用于表示整个序列的概括信息。在训练过程中,BERT模型学习使用位置的表示来进行各种分类任务,例如文本分类、情感分析等。在编码后的表示中,[CLS]位置的向量通常用作整个序列的汇总表示。

[SEP]

[sep]它是表示序列分割的特殊词元,全称为"separator"。在BERT中,输入的文本序列可以由多个片段(segments)组成,例如两个句子或一个问题和一个回答。为了将这些片段分隔开,[sep]词元用于标记不同片段的边界。它出现在片段之间和序列的末尾,用于告知BERT模型输入序列的结构。

[PAD]

[PAD]它表示填充(padding)的词元,在输入序列中用于填充长度不足的片段或序列。填充是为了使所有输入序列具有相同的长度,以便进行批量处理。

[MASK]

[MASK]它表示掩蔽(mask)的词元,在预训练阶段用于生成掩蔽语言模型(Masked Language Model,MLM)任务。在训练过程中,输入序列中的一部分词元会被随机选择并替换为[MASK]词元,模型需要预测被掩蔽的词元。

[UNK]

[UNK]它表示未知(unknown)的词元,用于表示在预训练期间未见过的词汇。当输入序列中出现未登录词(out-of-vocabulary)时,这些词元将被替换为[UNK]词元。

这些特殊的词元表示方式使BERT模型能够处理不同类型的输入和执行不同的任务,例如分类、回归、命名实体识别等。它们提供了对输入序列的结构和语义的信息,并且在预训练和微调阶段起到关键的作用。

除了[CLS],[SEP],[MASK],[UNK]之外,BERT还可以使用其他自定义的特殊词元表示方式,具体取决于具体的应用场景和任务需求。比如 领域特定词元、标签词元、实体词元等。

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

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

相关文章

MongoDB数据模型和WiredTiger读写模型

MongoDB数据模型 思考:MongoDB为什么会使用BSON? BSON协议与数据类型 JSON JSON是当今非常通用的一种跨语言Web数据交互格式,属于ECMAScript标准规范的一个子集。JSON(JavaScript Object Notation, JS对象简谱)即J…

[word] word艺术字体如何设置? #知识分享#职场发展#媒体

word艺术字体如何设置? 在工作中有些技巧,可以快速提高工作效率,解决大部分工作,今天给大家分享word艺术字体如何设置的技巧,希望可以帮助到你。 1、设置艺术字 选中文字,然后点击菜单栏的【插入】按钮一一…

机器学习复习(6)——numpy的数学操作

加减法运算 # 创建两个不同的数组 a np.arange(4) #list(0,1,2,3 b np.array([5,10,15,20]) # 两个数组做减法运算 b-a 运行结果: 计算数组的平方 #b*2代表数组b每个元素乘以2 #b**2代表数组b每个元素的2次方 b**2 运行结果: 计算数组的正弦值 #…

8.DNS域名解析服务器

目录 1. 概述 1.1. 产生原因 1.2. 作用: 1.3. 连接方式 1.4. 因特网的域名结构 1.4.1. 拓扑: 1.4.2. 分类 1.4.3. 域名服务器类型划分 2. DNS域名解析过程 2.1. 分类: 2.2. 解析图: 2.2.1. 图: 2.2.2. 过…

【学网络安全】kali linux入门及常用简单工具介绍(附工具包)

前言 相信很多同学了解到和学习网络安全的时候都听过kali系统,大家都称之为黑客最喜爱的系统,那么什么是kali,初学者用kali能做些什么,我将在本文中做简单的介绍 一、kali linux是什么? Kali Linux 是专门用于渗透测…

数据结构_单链表题-2.1

一. 反转单链表 将一个单链表反过来。 个人思路(一团浆糊大错特错) 反转嘛,变最后为起点,依次反转过来就行了。 1)找到最后三个链表结点,分别保存下来,以最后一个为首地址。 2)最…

整数对最小和 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 给定两个整数数组array1、array2,数组元素按升序排列。 假设从array1、array2中分别取出一个元素可构成一对元素,现在需要取出k对元素&am…

Qt扩展-muParser数学公式解析

muParser数学公式解析 一、概述1. 针对速度进行了优化2. 支持的运算符3. 支持的函数4. 用户定义的常量5. 用户定义的变量6. 自定义值识别回调7. 其他功能 二、内置函数三、内置二元运算符四、三元运算符五、内置常量六、源码引入1. 源码文件2. 编译器开关1. MUP_BASETYPE2.MUP_…

配置支持 OpenAPI 的 ASP.NET Core 应用

写在前面 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 本文记录如何配置基于Swagger 的 ASP.NET Core 应用程序的 OpenAPI 规范。 需要从NuGet 安装 Swashbuckle.AspNetCore 包 代码实现 var builder WebApplicati…

如何在 Golang 中使用 crypto/ed25519 进行数字签名和验证

如何在 Golang 中使用 crypto/ed25519 进行数字签名和验证 引言crypto/ed25519 算法简介环境搭建和准备工作生成密钥对进行数字签名 验证签名实际应用场景案例总结 引言 在当今数字化时代,网络安全显得尤为重要。无论是在网上进行交易、签署合同,还是发…

大模型创业的3条军规

上周,一家初创公司未能围绕LLM和 RAG 开展业务,尽管他们获得了第一份 B2B 大型合同。 以下是原因以及如何避免这种情况: 创始人写了一篇博客解释了为什么他不得不关闭他的业务,我在这里总结了他的要点。 NSDT工具推荐&#xff1a…

基于VMware和Unbuntu18.04编译 嘉立创·泰山派 Linux SDK

主机硬件要求 内存最少32G 硬盘腾出200-500G,虽然编译最终占了73G,但富余一些以后可以搞别的方便 操作系统win7/10/11 VMware 安装 1.去vmware官网下载:https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_comp…

docker安装elasticsearch+kibana

目录 1.安装es 2.安装kibana 3.kibana监控es 1.安装es 拉取镜像 docker pull elasticsearch:7.6.1 创建存放配置文件、数据、插件的各个文件夹 mkdir -p /home/docker/elasticsearch/config mkdir -p /home/docker/elasticsearch/data mkdir -p /home/docker/elasticsearch…

2024最新版MongoDB安装使用指南

2024最新版MongoDB安装使用指南 Installation and Usage Guide of the Latest MongoDB Community Edition in 2024 By JacksonML MongoDB is a document database with the scalability and flexibility that you want with the querying and indexing that you need. – mon…

网络异常案例三_RST

问题现象 在做功能测试的时候,经常看到设备离线的消息(MQTT遗嘱)。 在终端连接的网络设备上抓包分析,看到终端设备发起大量的RST请求。 151这个设备,7min,重置断开了8个TCP连接(mqtt连接&#…

Ansible自动化运维实战

一、abstract简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric) 的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.无客户端。我们要学一些Ansible的安装和一些基…

地平线旭日 X3 VNC 远程桌面灰屏解决

解决 windows 使用 VNC 远程连接地平线旭日 X3 开发板桌面环境灰屏的问题。 1 查看问题 通过启动vncserver后的log文件确认问题。 启动 vnc 服务 vncserver :1通过 terminal 输出可以看到日志文件的存储位置 打开查看该文件后发现首当其冲是权限问题:说xstartup…

【spring】springcloud中的组件有那些?

🍎个人博客:个人主页 🏆个人专栏:spring ⛳️ 功不唐捐,玉汝于成 目录 正文 我的其他博客 正文 说出主要的组件: Spring Cloud Eureka,服务注册中心,特性有失效剔除、服务保护Spring Cloud Zuul,API服…

系统分析师-23年-下午题目

系统分析师-23年-下午题目 更多软考知识请访问 https://ruankao.blog.csdn.net/ 试题一必答,二、三、四、五题中任选两题作答 试题一 (25分) 说明 某软件公司拟开发一套汽车租赁系统,科学,安全和方便的管理租赁公司的各项业务&#xff0…

YOLOv7独家改进:上采样算子 | 超轻量高效动态上采样DySample,效果秒杀CAFFE,助力小目标检测

💡💡💡本文独家改进:一种超轻量高效动态上采样DySample, 具有更少的参数、FLOPs,效果秒杀CAFFE和YOLOv5网络中的nn.Upsample 💡💡💡在多个数据集下验证能够涨点,尤其在小目标检测领域涨点显著。 收录 YOLOv7原创自研 https://blog.csdn.net/m0_63774211/ca…