BERT模型

news2024/9/22 5:34:35

BERT模型是由谷歌团队于2019年提出的 Encoder-only 的 语言模型,发表于NLP顶会ACL上。原文题目为:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》链接

在前大模型时代,BERT模型可以算是一个参数量比较大的预训练语言模型。在如今的大模型时代,LLM大多遵循GPT提出的Decoder-only的模型范式。BERT也可以算是时代的眼泪了。这篇文章以BERT原文为基础,回顾BERT模型的相关细节。

1 Introduction

BERT 全称为 Bidirectional Encoder Representations from Transformers。

BERT作为一个在大规模预料上预训练的语言模型,可以通过在后面只增加一层输出层并微调,就可以活动广泛下游任务上的SOTA模型

文中作者将NLP的任务分为两类:

  • Sentence-Level tasks
    • 通过对句子的整体分析来预测句子之间的关系
    • 代表:自然语言推理 以及 转述
  • Token-Level tasks
    • 模型需要在 Token 层面产生细粒度的输出
    • 代表:命名实体识别(Named entity recognition)、问答(question answering)

将预训练的语言表征(语言模型)用于下游任务的两种方法:feature-based 以及 fine-tuning

  • feature-based approach: ELMo
    • 使用包含预训练表征的任务特定架构做为额外特征
  • Fine-tuning approach: OpenAI提出的GPT
    • 引入最小任务特定参数,通过简单微调所有预训练参数,在下游任务上进行训练

文中提出,标准的语言模型是单向的,这限制了在预训练期间可以使用的架构的选择。例如:GPT 从左向右的架构:每个Token只能与之前的Token进行运算(通过引入casual mask,这也是Decoder模型的通常做法)

文章中指出:对于自然语言处理的任务:集成双向上下文至关重要。在Decoder-only大模型大行其道的今天,这个论断的有效性……

因此,BERT的预训练任务包括以下两部分,以捕获双向上下文:

  1. Masked language model
    • 完形填空:mask输入中的一些Token,根据上下文预测原来的词
  2. Next Sentence Prediction
    • 联合预训练文本对表示

2 Related Work

回顾了Transformer模型:
在这里插入图片描述
这里推荐一篇博客,把Transformer模型讲解得很清晰,而且结合了代码,名为:annotated-transformer

3 BERT

![[Pasted image 20240421185749.png]]
BERT模型分为两个阶段:

Pre-training:在不同的预训练任务上对无标签数据进行训练

Fine-tuning:首先使用预训练的参数进行初始化,并使用下游任务的标记数据所有参数进行微调。每个下游任务都有单独的微调模型

两种规模的BERT模型,其配置以及总体的参数量

BERT-base:L 12,H 768,A 12,110M
BERT-large:L 24,H 1024,A 16,340M

在当年,参数量都还是M级,就已经决定模型很大了,现在都是B级的参数量了,汗-_-||

Input/Output Representations

输入表示:在一个Token序列里既可以表示一对句子,也可以表示单独一个句子

Token embeddings 采用 WordPiece技术

每个序列的第一个标记总是一个特殊的分类标记([CLS])。

该令牌对应的最终隐藏状态作为分类任务的聚合序列表示。

当句子对被打包到一个序列中时,区分句子的方法:

  1. 引入 [SEP] Token作为句子的分隔
  2. 为每个Token添加一个学习到的嵌入,指示它是属于句子A还是句子B

在这里插入图片描述

每个Token的输入表示 = Token Embeddings + segment Embeddings + position Embeddings

emdedding包含三部分

BERT的激活函数采用 GeLU 替代原始 Transformer 中的 ReLU
G E L U ( x ) = 0.5 × x × ( 1 + T a n h ( 2 / π × ( x + 0.044715 × x 3 ) ) ) GELU(x)=0.5\times x \times (1+Tanh(\sqrt{2/\pi}\times (x+0.044715\times x^3))) GELU(x)=0.5×x×(1+Tanh(2/π ×(x+0.044715×x3)))

其函数图像如下图所示,与 ReLU不同,GeLU并不是将负数置为0,而是将其置为较小的负数,某种意义上是使得数据更平滑。
![[Pasted image 20240421185915.png]]

3.1 Pre-training BERT
Task #1: Masked LM

简单地随机掩盖输入 Token 的某些百分比,然后预测那些被掩盖的 Token

mask Token 对应的最终隐藏向量被输入到词汇表上的输出 softmax 中,就像在标准LM中一样

文中,在每个序列中随机掩码所有 WordPiece Token 的15%

Mask Token的引入会使得 Pre-train 和 fine-tuning 之间存在不匹配的问题,因为 fine-tuning 过程中不会出现 [MASK] Token

缓解措施:并不总是用 [MASK] Token 来代替要被 “masked” 的词

训练数据生成器随机选择 15% 的 Token 位置进行预测。如果选择第 i 个Token,我们将第 i 个Token替换为

  1. 80%情况下,[MASK] Token
  2. 10%情况下,随机Token
  3. 10%情况下,不变

具体如下图:
在这里插入图片描述
该部分的 Loss 为:每个 Token 的最终隐藏向量 T i T_i Ti 将与原始 Token 的 交叉熵

Task #2: Next Sentence Prediction (NSP)

二值化的下一个句子预测任务

为每个预训练例子选择句子A和B,B有 50% 的可能性是 A (标记为 IsNext )之后的实际下一个句子,50% 的可能是从语料库中随机抽取的句子(标记为 NotNext)

![[Pasted image 20240421185904.png]]

损失函数为:
Training loss 是 平均掩蔽LM似然(Mean Masked LM likelihood) 和 平均下一个句子预测似然(Mean Next Sentence Prediction likelihood) 之和

预训练数据

BooksCorpus 以及 English Wikipedia

3.2 Fine-tuning BERT

FineTuning时,BERT传输所有参数来初始化下游任务模型参数,而无所谓下游任务是否需要 [CLS] Token

对于涉及文本对的应用,一种常见的模式是在应用双向交叉注意力之前对文本对进行独立编码

BERT使用自注意力机制将这两个阶段统一起来,因为编码一个具有自注意力的串联文本对有效地包含了两个句子之间的双向交叉注意力(按照 training 数据的处理方法,如果输入为文本对,通过 [SEP] Token 以及 Segment embedding 区别两个句子)

对于每个下游任务,我们只需将特定于任务的输入和输出 plug in BERT,并端到端地微调所有参数

对于Token级的NLP任务,需要将Token的隐层表示被输入到一个输出层,用于得到Token级别的任务输出

对于分类任务,只需将 [CLS] 表示送入输出层进行分类,得到分类结果

在GLEU任务上的微调结构:

在这里插入图片描述
在这里插入图片描述

4 Experiments

省略


看到这里啦,点赞关注不迷路哦~
O(∩_∩)O

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

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

相关文章

杂记123

(前提已安装了Beyond Compare4)在Everything的文件-右键菜单项里没有Beyond Compare的"选择左边文件进行比较"的现象 进过调查,LZ本机是X64位的,但是安装了x86(32位)的Everything, 切换成X64位的Everything版本就好了

数据结构之《二叉树》(中)

在数据结构之《二叉树》(上)中学习了树的相关概念,还了解的树中的二叉树的顺序结构和链式结构,在本篇中我们将重点学习二叉树中的堆的相关概念与性质,同时试着实现堆中的相关方法,一起加油吧! 1.实现顺序结构二叉树 在…

详细测评下搬瓦工香港CN2 GIA VPS

搬瓦工香港VPS分移动CMI和电信CN2 GIA两个大类,一个属于骨干网,一个属于轻负载。搬瓦工的香港CN2 GIA根据测试来看实际上是CN2 GIABGP,并非三网纯CN2 GIA。详细测评数据如下: 用FIO再给测试一下硬盘I/O,可以仔细看看数…

全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type

全网最适合入门的面向对象编程教程:31 Python 的内置数据类型-对象 Object 和类型 Type 摘要: Python 中的对象和类型是一个非常重要的概念。在 Python 中,一切都是对象,包括数字、字符串、列表等,每个对象都有自己的类型。 原文链接: Fre…

WebSocket 协议介绍

前言 一.通用协议设计 参考链接 /* --------------------------------------------------------------- | 魔数 2byte | 协议版本号 1byte | 序列化算法 1byte | 报文类型 1byte | --------------------------------------------------------------- | 状态 1byte | …

前端HTML+CSS查漏补缺——仿制百度搜索首页的一些思考

在像素模仿百度搜索首页的时候,在实现的时候,遇到了一些值得记录的点。 在这个过程中,也顺便看了看百度的源码,感觉很有意思。 对了,QQ截屏里面获取到的颜色,是不大正确的,会有点误差。 这是我…

TypeError: ‘float’ object is not iterable 深度解析

TypeError: ‘float’ object is not iterable 深度解析与实战指南 在Python编程中,TypeError: float object is not iterable是一个常见的错误,通常发生在尝试对浮点数(float)进行迭代操作时。这个错误表明代码中存在类型使用不…

Study--Oracle-08-ORACLE数据备份与恢复(一)

一、ORACLE数据保护方案 1、oracle数据保护方案 2、数据库物理保护方案 oracle数据库备份可以备份到本地集群存储,也可以备份到云存储。 3、数据库逻辑数据保护方案 二、ORACLE数据体系 1、ORACLE 数据库的存储结构 2、oracle物理和逻辑存储结构 3、数据库进程 4…

OpenCV||超简略的Numpy小tip

一、基本类型 二、数组属性 三、数组迭代(了解) import numpy as np # 创建一个数组 a np.arange(6).reshape(2, 3) # 使用np.nditer遍历数组 for x in np.nditer(a): print(x) np.nditer有多个参数,用于控制迭代器的行为&#xff…

一层5x1神经网络绘制训练100轮后权重变化的图像

要完成这个任务,我们可以使用Python中的PyTorch库来建立一个简单的神经网络,网络结构只有一个输入层和一个输出层,输入层有5个节点,输出层有1个节点。训练过程中,我们将记录权重的变化,并在训练100轮后绘制…

显示学习5(基于树莓派Pico) -- 彩色LCD的驱动

和这篇也算是姊妹篇,只是一个侧重SPI协议,一个侧重显示驱动。 总线学习3--SPI-CSDN博客 驱动来自:https://github.com/boochow/MicroPython-ST7735 所以这里主要还是学习。 代码Init def __init__( self, spi, aDC, aReset, aCS) :"&…

数据结构(5.4_2)——树和森林的遍历

树的先根遍历(深度优先遍历) 若树非空,先访问根结点,再依次对每棵子树进行先根遍历 树的先根遍历序列和这棵树相应二叉树的先序序列相同。 伪代码: //树的先根遍历 void PreOrder(TreeNode* R) {if (R ! NULL) {visit(R);//访问根结点w…

【WRF安装第四期(Ubuntu)】搭建WRF编译所需系统-WRF和WPS模型的安装

WRF安装第四期:搭建WRF编译所需系统-WRF和WPS模型的安装 1 WRF的编译安装(Building WRF)1.1 进入Build_WRF文件夹1.2 下载WRFV4.01.3 解压WRF安装包1.4 安装WRF选择#1:34选择#2:32 1.5 检查WRF是否安装成功1.5.1 WRF安…

ai文案生成器,文案自动生成好简单

随着科技的不断进步,AI在各个领域中扮演着越来越重要的角色。其中,ai文案生成器的出现给广告和市场营销行业带来了一场革命。曾经需要耗费大量时间和精力的文案创作过程,如今可以通过ai文案生成器轻松自动完成。这一创新技术的出现&#xff0…

什么是药物临床试验?

药物临床试验是指在人体上进行的新药试验研究,旨在确定新药的疗效、安全性、药代动力学和药效学。临床试验不仅帮助确认药物是否对特定疾病或症状有效,还帮助识别和评估药物的副作用和风险。 药物临床试验(Clinical Trial,CT&…

数据结构:带索引的双链表IDL

IDLindexed double list 如图,下方是一个双链表,上方是索引。索引储存为结构体数组,结构体内包括一个指针,和长度。 假设索引只有一个,这时,它应该指向双链表的中间,这样才能提高搜索效率。称…

深入探索可擦除可编程只读存储器(EPROM)DS2502P+TR 1K位只添加存储器

DS2502PT&R产品描述: DS2502PT&R 为1K位只添加存储器,用于识别并存储产品的相关信息。产品批号或特殊的产品信息可以通过最少的接口访问—例如,微控制器的一个端口引脚。DS2502PT&R 具有一个工厂光刻注册码,其中包括…

UE5 大鹅的点击移动 第三人称

文章目录 一、创建动画蓝图二、创建 Location 地标三、Character 和 PlayerControl 的控制四、实现效果 一、创建动画蓝图 这里以 UE5 从零开始制作跟随的大鹅-CSDN博客 创建的动态资产创建动画蓝图;需要用到的资产列表有:大鹅的骨骼网格体,…

【大模型从入门到精通4】openAI API 分类

这里写目录标题 分类理解 SYSTEM 和 USER 在 AI 对话中的角色System MessageUser Message工作原理示例分类示例更多分类示例理论问题理论 分类 理解 SYSTEM 和 USER 在 AI 对话中的角色 在分类任务中,通常需要向模型提供一个需要将其分类到预定义类别中的文本场景…

【数据结构与算法】堆顶删除

堆顶的删除 一.堆顶出列的原理二.堆顶出列的实现1.覆盖最大元素并出列2.向下调整成为堆 三.堆排序四,总结 一.堆顶出列的原理 还记得我们刚开始说的嘛,如果我想要拿出最大的,那么下一个最大的会花落谁家. 那么就需要用到堆顶出列的原理了. 然后我们再对顶节点,进行向下调整就可…