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 的解码器部分作为其构建块。
在这里插入图片描述

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

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

相关文章

【MySQL性能优化】- MySQL结构与SQL执行过程

MySQL结构与SQL执行过程 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正…

开源了一款Vue3 Ts Vite4 uni-app 驱动的跨端快速启动模板

一、开源项目简介 由 Vue3 & Ts & Vite4 & uni-app 驱动的跨端快速启动模板。推荐使用 VSCode 编辑器开发,集成了 Prettier ESLint StyleLint husky lint-staged commitlint UnoCSS Vue3 TypeScript Vite4 setup,开箱即用。 二、…

【计算机组成原理】程序的转换及机器级表示 常用计算机术语英文缩写汇总

编码 二进制编码的十进制数(BCD):Binary Coded Decimal美国信息交换标准代码(ASCII):American Standard Code for Information Interchange 数据的排列顺序 最低有效位(LSB)&…

全链路追踪关键技术-TraceId、SpanId生成规则

链路追踪的traceid原理梳理 如何追踪微服务调用? ● traceId,用于标识某一次具体的请求ID。当用户的请求进入系统后,会在RPC调用网络的第一层生成一个全局唯一的traceId,并且会随着每一层的RPC调用,不断往后传递&…

day17 平衡二叉树 二叉树的所有路径 左叶子之和

题目1:110 平衡二叉树 题目链接:110 平衡二叉树 题意 判断二叉树是否为平衡二叉树(每个节点的左右两个子树的高度差绝对值不超过1) 递归遍历 递归三部曲 1)确定递归函数的参数和返回值 2)确定终止条…

uniapp小程序当页面内容超出时显示滚动条,不超出时不显示---样式自定义

使用scroll-view中的show-scrollbar属性 注意:需要搭配enhanced使用 否则无效 <scroll-view class"contentshow" scroll-y :show-scrollbartrue :enhancedtrue><view class"content" :show-scrollbartrue><text>{{vehicleCartinfo}}<…

【动态规划】LeetCode-42. 接雨水

42. 接雨水。 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1…

Quartus 软件界面介绍与部分使用技巧

内容太多&#xff0c;只能慢慢补充完善了~ 对一个软件的熟练掌握&#xff0c;不仅在于完成项目工程&#xff0c;还在于对一个软件的各个功能的位置与使用要熟稔于心&#xff08;个人看法&#xff09;。 软件界面 默认打开的软件界面如下&#xff1a; 关掉所有能关闭的窗口&am…

怎么安装IK分词器

.安装IK分词器 1.在线安装ik插件&#xff08;较慢&#xff09; # 进入容器内部 docker exec -it elasticsearch /bin/bash ​ # 在线下载并安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elastics…

学习笔记-数据容器:dict(字典)

一.字典的定义 1.语法 使用{ }存储原始&#xff0c;每一个元素是一个键值对每一个键值对包含Key和Value&#xff08;用冒号分隔&#xff09;键值对之间使用逗号分隔Key和Value可以是任意类型的数据&#xff08;key不可为可变类型(列表集合字典)&#xff09;Key不可重复&#…

Oracle数据库 CentOS7上修改hostname后无法启动解决办法

目录 一、问题背景 二、解决问题 三、重启数据库 四、重启监听 一、问题背景 CentOS系统需要修改hostname&#xff0c;修改后oracle数据库无法启动和正常运行。 系统&#xff1a;CentOS7.3 数据库版本&#xff1a;Oracle 11g Express Edtion 二、解决问题 通过which orac…

提交代码,SVN被锁定,提示:svn is already locked解决方案

今天遇到一个问题&#xff0c;svn 在提交代码的时候出现了svn is already locked&#xff0c;解决方案如下图 点击clean up 点击ok即可 来看官方对clean up的解释&#xff1a;它的作用就是查找工作拷贝中的所有遗留的日志文件&#xff0c;删除进程中工作拷贝的锁。 参考&…

tl431几种不常见的接法

tl431可调电源电路图分析 精密电压基准IC TL431是我们常见的精密电压基准IC &#xff0c;应用非常广泛。其输出压连续可调达36V&#xff0c;工作电流范围宽达0.1--100mA&#xff0c;动态电阻典型值为0.22欧&#xff0c;输出杂波低。图1是利用它作电压基准和驱动外加场效应管K7…

(学习日记)2024.01.09

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

Springboot WebFlux项目结合mongodb进行crud

第一步&#xff1a;创建项目 第二步&#xff1a;给mongodb插入数据 第三步&#xff1a;创建实体类 package org.cyl.test02.entity;// Task.java import lombok.Data;Data public class Task {private String id;private String description; }第四步&#xff1a;创建Reposito…

FreeRTOS 学习相关笔记 附C语言内容补充

学习视频为【正点原子】手把手教你学FreeRTOS实时系统 文章目录 RTOS 入门裸机RTOSFreeRTOS任务调度方式任务状态 FreeRTOS 移植系统配置文件 API函数任务创建和删除动态方式创建任务静态方式创建任务删除任务 任务挂起和恢复函数调度器挂起与恢复临界区任务调度器的挂起和恢复…

鸿蒙开发已解决-Failed to connect to gitee.com port 443: Time out 连接超时提示

文章目录 项目场景:问题描述原因分析:解决方案:解决方案1解决方案2:解决方案3:此Bug解决方案总结解决方案总结**心得体会:解决连接超时问题的三种方案**项目场景: 导入Sample时遇到导入失败的情况,并提示“Failed to connect to gitee.com port 443: Time out”连接超…

实战使用工具appuploader上线发布苹果商店

实战使用工具appuploader上线发布苹果商店 我们发布ios应用的时候&#xff0c;步骤繁琐&#xff0c;非常耗时&#xff0c;appuploader工具就是解决一站式从上传到发布到appstore应用商店的&#xff0c;当我们开发完app后&#xff0c;需要将ipa/apk提交给测试人员测试&#xff0…

【python】No module named ‘pip‘问题

一、问题描述 win11上安装的Python版本有几个&#xff0c;不知道那里出问题了。用pip总是提示&#xff1a; Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line …

完整的JAVA酒店管理系统源码带安装部署文档

完整的JAVA酒店管理系统源码带安装部署文档 002.png (135.63 KB, 下载次数: 0) 下载附件 设为封面 半小时前 上传