what is BERT?

BERT

Introduction

Paper

参考博客

9781838821593_ColorImages.pdf (packt-cdn.com)

Bidirectional Encoder Representation from Transformer

来自Transformer的双向编码器表征

基于上下文(context-based)的嵌入模型。

那么基于上下文(context-based)和上下文无关(context-free)的区别是什么呢?

  • He got bit by python.
  • Python is my favorite programming language.
    在这里插入图片描述

​ 可以发现,同一个单词在不同句子的不同位置的含义可能是不同的,我们希望两个句子中的Python的词嵌入向量有不同的表征,那么就称是基于上下文(context-based)的。
在这里插入图片描述

​ 在Transformer的Encoder中,我们的输入是完整的序列,自注意力机制允许模型在处理每个位置的输入时,考虑到输入序列中的所有其他位置。这意味着,对于每个输入位置,模型都能够同时关注左侧和右侧的上下文,而不仅仅是单向的左侧或右侧。这种特性使得Transformer的编码器天然具有双向建模的能力。
在这里插入图片描述

​ 通过BERT,给定一个句子,我们就得到了句子中每个单词的上下文嵌入向量表示。

Model architecture

​ BERT的显著特点是在不同的下游任务中采用统一的架构。这意味着可以对同一个预训练模型进行微调,用于多种可能与模型训练时的任务不相似的最终任务,并能够达到接近SOTA的结果。
在这里插入图片描述

  • MNLI(Multi-Genre Natural Language Inference)

    是一个大规模的、众包实现的蕴涵分类任务(Williams et al., 2018)。在这个任务中,给定一对句子,目标是预测第二个句子相对于第一个句子是蕴涵矛盾还是中性的关系。任务的核心是判断两个句子之间的逻辑关系,即第一个句子是否蕴含了第二个句子,两个句子是否矛盾,或者它们之间是否没有明显的逻辑关系。这种任务通常用于评估模型在文本推断方面的性能,因为它涉及理解和推理句子之间的关系。

  • NER(Named Entity Recognition)

    命名实体识别任务,涉及在文本中标注和识别具有特定类别(如人名、地名、组织名等)的实体。

  • SQuAD(Stanford Question Answering Dataset)

    斯坦福问答数据集(SQuAD v1.1)是由10万个众包问答对(crowdsourced question/answer pairs)组成的集合(Rajpurkar等人,2016)。给定一个问题和包含答案的维基百科段落,任务是预测在段落中的答案文本跨度。在这个任务中,模型需要从给定的段落中找到与问题相匹配的答案文本,并输出答案的开始和结束位置。SQuAD数据集旨在评估问答系统的性能,要求模型能够理解问题并从相关文本中提取准确的答案。

不同模型配置

L: Encoder数量;

A: 多头注意力数量;

H: 隐藏单元数。

  • BERT Base: L=12, H=768, A=12.
    Total Parameters=110M!
  • BERT Large: L=24, H=1024, A=16.
    Total Parameters=340M!!
LH
BERT-tiny2128
BERT-mini4256
BERT-small4512
BERT-medium8512

在这里插入图片描述

Input

在这里插入图片描述

Token embedding——标记嵌入

标记嵌入是将文本中的每个单词或子词映射为实数向量的过程。在BERT中,采用了基于WordPiece的分词方式,将单词拆分成子词或子词块。
在这里插入图片描述
[CLS]–Classification

  • [CLS] 标记位于每个输入序列的开头,表示“分类”或“汇总”标记。

[SEP]–Separator

  • [SEP] 标记用于分隔两个句子,它在输入序列中标识两个独立的文本段。

Segment embedding——片段嵌入

片段嵌入是为了处理两个句子之间的关系。在涉及两个句子的输入情况下,为每个单词或子词分配一个片段标识符,以区分来自不同句子的信息。
在这里插入图片描述

Position embedding ——位置嵌入

位置嵌入是为了引入序列中的顺序信息,每个输入位置都会被分配一个表示其相对位置的向量。

位置嵌入通过使用预定义的位置编码(通常是固定的正弦和余弦函数)来表示输入序列中每个位置的信息。这些位置嵌入与对应的标记嵌入相加,以提供关于标记在序列中位置的信息。

位置嵌入的目标是帮助模型理解输入文本的顺序信息,这对于捕捉上下文和语境非常重要。
在这里插入图片描述

最终表示

在这里插入图片描述

Pre-training

BERT模型的预训练基于两个任务:

  • Masked LM
  • Next Sentence Prediction(NSP)

语言建模划分如下:

  • 自回归
    • 在自回归语言模型中,模型的目标是预测序列中的下一个元素,给定其之前的元素。
    • 单向的
  • 自编码
    • 自编码语言模型通过学习将输入数据重新生成为自身,强制模型通过中间表示(编码)来捕捉数据的重要特征。
    • 双向的

Masked LM (MLM)

屏蔽语言建模:从输入文本中随机选择一些单词,并将它们屏蔽(用特殊的标记替代),然后让模型预测这些被屏蔽的单词。

In Autumn the ______ fall from the trees.

BERT规定,对于给定的输入序列,我们随机屏蔽15%的单词。

举个例子,假设我们屏蔽单词city,然后用[MASK]标记替换这个单词,结果为:

tokens = [ [CLS], Paris, is, a beautiful, [MASK], [SEP], I, love, Paris, [SEP] ]

​ 然而,在大多数下游任务中,微调阶段通常不涉及对被屏蔽令牌的直接预测。这种差异可能导致预训练和微调之间的不一致性,因为在预训练过程中模型被要求执行一项任务,而在微调过程中模型需要适应不同的任务。

​ 为了缓解这种不匹配问题,在训练中,大约有15%的单词被屏蔽,但并非所有被屏蔽的单词都被[MASK]标记替换。

​ BERT采用了微妙的屏蔽方式,对于这些15%的要屏蔽的单词,我们将会做下面的事情:

  • 80%的概率,我们用[MASK]标记替换该标记:

    tokens = [ [CLS], Paris, is, a beautiful, [MASK], [SEP], I, love, Paris, [SEP] ]
    
  • 10%的概率,我们用一个随机标记(单词)替换该标记:

    随机标记引入了更多的噪声,增加模型的数据多样性、降低模型对具体标记的依赖性。

    tokens = [ [CLS], Paris, is, a beautiful, love, [SEP], I, love, Paris, [SEP] ]
    
  • 剩下10%的概率,我们不做任何替换:

    tokens = [ [CLS], Paris, is, a beautiful, city, [SEP], I, love, Paris, [SEP] ]\
    

在这里插入图片描述

为了预测屏蔽的标记,我们将BERT返回的屏蔽的单词表示 R [MASK] R_{\text{[MASK]}} R[MASK] 喂给一个带有softmax激活函数的前馈神经网络。然后该网络输出词表中每个单词属于该屏蔽的单词的概率。
在这里插入图片描述

屏蔽语言建模也被称为**完形填空(cloze)**任务。我们已经知道了如何使用屏蔽语言建模任务训练BERT模型。而屏蔽输入标记时,我们也可以使用一个有点不同的方法,叫作全词屏蔽(whole word masking,WWM)。

全词屏蔽(WWM)

​ 考虑句子Let us start pretraining the model

1、在使用该分词器之后,我们得到下面的标记:

tokens = [let, us, start, pre, ##train, ##ing, the, model]

2、然后增加[CLS][SEP]标记:

tokens = [[CLS], let, us, start, pre, ##train, ##ing, the, model, [SEP]]

3、接着随机屏蔽15%的单词。假设屏蔽后的结果为:

tokens = [[CLS], [MASK], us, start, pre, [MASK], ##ing, the, model, [SEP]]

4、从上面可知,我们屏蔽了单词let##train。其中##train是单词pretraining的一个子词。**在全词屏蔽模型中,如果子词被屏蔽了,然后我们屏蔽与该子词对应单词的所有子词。**因此,我们的标记变成了下面的样子:

tokens = [[CLS], [MASK], us, start, [MASK], [MASK], [MASK], the, model, [SEP]]

5、注意我们也需要保持我们的屏蔽概率为15%。所以,当屏蔽子词对应的所有单词后,如果超过了15%的屏蔽率,我们可以取消屏蔽其他单词。如下所示,我们取消屏蔽单词let来控制屏蔽率:

tokens = [[CLS], let, us, start, [MASK], [MASK], [MASK], the, model, [SEP]]

下一句预测(NSP)

​ 在BERT的预训练中,语言模型(LM)并不直接捕捉两个句子之间的关系,而这在许多下游任务中是相关的,比如问答(QA)和自然语言推理(NLI)。为了教导模型理解句子之间的关系,BERT采用了二元分类的下一句预测(NSP)任务。

​ 模型被要求判断两个输入句子是否在原始文本中是相邻的,即后一个句子是否是前一个句子的下一句。

考虑下面两个句子:

Sentence A: She cooked pasta.
Sentence B: It was delicious.

这两个句子中, B B B就是 A A A的下一句,所以我们标记这对句子为isNext

然后看另外两个句子:

Sentence A: Turn the radio on.
Sentence B: She bought a new hat. 

显然 B B B不是 A A A的下一句,所以我们标记这个句子对为notNext

NSP任务中,我们模型的目标是预测句子对属于isNext还是notNext

那么NSP任务有什么用?通过运行NSP任务,我们的模型可以理解两个句子之间的关系,这会有利于很多下游任务,像问答和文本生成。

如何训练?

对于isNext类别,我们从某篇文档中抽取任意相连的句子,然后将它们标记为isNext;对于notNext类别,我们从一篇文档中取一个句子,然后另一个句子随机的从所有文档中取,标记为notNext。同时我们需要保证数据集中50%的句子对属于isNext,剩下50%的句子对属于notNext
在这里插入图片描述
在这里插入图片描述

[CLS]标记保存了所有标记的聚合表示,将 R [ C L S ] R_{[CLS]} R[CLS]喂给一个带有softmax函数的全连接网络,返回我们输入的句子对对应isNextnotNext的概率。
在这里插入图片描述

ouput

  1. pooler output

    in: [CLS]

    用于分类/回归任务

  2. sequence output

    序列任务

GPT — 远房表亲

  • BERT:双向 预训练语言模型 + fine-tuning(微调)
  • GPT:自回归 预训练语言模型 + Prompting(指示/提示)

如前所述,BERT 将 Transformer 的编码器部分堆叠为其构建块。同时,GPT 使用 Transformer 的解码器部分作为其构建块。
在这里插入图片描述

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

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

相关文章

golang学习笔记——go语言多文件项目运行的四种方式

go语言多文件运行技巧 有两个源码文件的go语言项目如何运行? go.modmain.go Trie.go 如何直接运行go run main.go会提示找不到文件。 # 在windows10下运行 $ go run main.go # command-line-arguments .\main.go:6:9: undefined: Constructor是真的找不到文件吗。其实不是。…

一个成功的camera案例:ros2+gazebo+摄像头

各位看:随着大物体的移动,在涉嫌头的位置也发生了改变-----右上角那个/camera的位置也变了 右上角那个是摄像头图案,以下是仓库链接: ros-ign-gazebo-camera: https://github.com/arashsm79/ros-ign-gazebo-camera.git一个ros2摄…

基于多智能体点对点转换的分布式模型预测控制

matlab2020正常运行 基于多智能体点对点转换的分布式模型预测控制资源-CSDN文库

Zabbix“专家坐诊”第223期问答汇总

来源:乐维社区 问题一 Q:Zabbix 5.0安装完mysql之后怎么备份?忘记mysql当时创建的密码了,怎么样能查看设置的密码? A:mysql初始化密码在 /var/log/mysqld.log中可以看到,搜关键字temporary pas…

膜结构球形影院为观众打造观影新体验

在数字科技快速发展的当下,轻空间公司打破传统影院的束缚,领航未来娱乐体验的创新浪潮。膜结构球形影院问世,它不仅仅是一个娱乐场所,更是一场極致沉浸感的感官之旅,为观众带来震撼性的视听冲击。 沉浸式体验的新纪元 …

Jenkins安装和配置

拉取Jenkins镜像 docker pull jenkins/jenkins 编写jenkins_docker.yml version: "3.1" services:jenkins:image: jenkins/jenkinscontainer_name: jenkinsports:- 8080:8080- 50000:50000volumes:- ./data/:/var/jenkins_home/首次启动会因为数据卷data目录没有权限…

Nginx配置负载均衡实例

Nginx配置反向代理实例二 提醒一下:下面实例讲解是在Mac系统演示的; 负载均衡实例实现的效果 浏览器地址栏输入地址http://192.168.0.101/test/a.html,刷新页面进行多次请求,负载均衡效果,平均分配到8080端口服务和8…

DNS解析和它的三个实验

一、DNS介绍 DNS:domain name server 7层协议 名称解析协议 tcp /53 主从之间的同步 udp/53 名字解析 DNS作用:将域名转换成IP地址的协议 1.1DNS的两种实现方式 1.通过hosts文件(优先级最高) 分散的管理 linux /etc/hos…

资源三号03星-立体测绘卫星星座

资源三号03星作为我国民用高分辨率立体测图卫星资源三号系列的第三颗卫星,在资源三号02星技术状态的基础上进行了继承和适当优化,设计寿命由资源三号02星的5年延长至8年,星上搭载了三线阵立体测绘相机、多光谱相机和业务化应用的激光测高仪&a…

【JAVA】concurrentHashMap和HashTable有什么区别

🍎个人博客:个人主页 🏆个人专栏:JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 同步性质: 性能: 允许空键值(Allow Nulls): 迭代器(Iter…

066:vue中实现二维数组的全选、全不选、反选、部分全选功能(图文示例)

第061个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使用,computed,watch,生命周期(beforeCreate,created,beforeM…

Ansible自动化运维

1.Ansible 介绍和架构 1.1 Ansible 发展历史 作者:Michael DeHaan( Cobbler 与 Func 作者) ansible 的名称来自科幻小说《安德的游戏》中跨 越时空的即时通信工具,使用它可以在相距数光年的距离,远程实时控制前线的舰…

【J-Flash基本使用总结】

【J-Flash基本使用总结】 VX:hao541022348 ■ 烧录文件■ 创建新的工程■ 烧录模式-SWD模式■ 烧录 ■ 读单片机Flash数据■ 设置或解除读保护 ■ 烧录文件 ■ 创建新的工程 接着点击 Options –> Project Settings…,选择CPU > Device &#xff…

强化学习应用(三):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个价值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

Python如何实现数据驱动的接口自动化测试

大家在接口测试的过程中,很多时候会用到对CSV的读取操作,本文主要说明Python3对CSV的写入和读取。下面话不多说了,来一起看看详细的介绍吧。 1、需求 某API,GET方法,token,mobile,email三个参数 token为必填项 mobi…

第九讲 单片机驱动彩色液晶屏 控制RA8889软件:显存操作

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…

CAN总线报文格式———标准数据帧

标准数据帧 : 用于节点向外传送数据 标准数据帧由帧起始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束等组成。 一、总线空闲(Bus Idle) CAN总线空闲时,总线上会输出持续的高电平“1”。当总线空闲时任何连接的单元都可以开始发送新的报…

解决:ModuleNotFoundError: No module named ‘dbutils’

解决:ModuleNotFoundError: No module named ‘dbutils’ 文章目录 解决:ModuleNotFoundError: No module named dbutils背景报错问题报错翻译报错位置代码报错原因解决方法方法一,直接安装方法二,手动下载安装方法三,…

C#进阶-IIS服务器发布ASP.NET项目

对于云服务器,程序员一般不会陌生,如果项目需要发布到现网,那么服务器是必不可缺的一项硬性条件,那么如何在云服务器上部署一个项目,需要做哪些配置准备,下面就由本文档为大家讲解,本篇以 IIS服…

编译和链接(1)

目录 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境 2.2 编译本身也分为几个阶段: 2.3 运行环境 3. 预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 3.2.3 #define 替换规则 3.2.4 #和## 1. 程序的翻译环境和执…