what is BERT?

news2024/9/26 1:20:41

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.coloradmin.cn/o/1380056.html

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

相关文章

imgaug库指南(19):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此,数据增强技术应运而生,成为了解决这一问题的…

“所有伙食开销统计:轻松查看,智能管理你的餐饮支出“

你是否经常为伙食开销感到困扰,不知道如何有效控制和管理?现在,有了我们的伙食开销统计工具,这些问题将得到轻松解决! 首先第一步,我们要进入晨曦记账本并在上方功能栏里选择“查看方式”。并在弹出来的列表…

数据结构第十三弹---链式二叉树基本操作(上)

链式二叉树 1、结构定义2、手动创建二叉树3、前序遍历4、中序遍历5、后序遍历6、层序遍历7、计算结点个数8、计算叶子结点个数9、计算第K层结点个数10、计算树的最大深度总结 1、结构定义 实现一个数据结构少不了数据的定义,所以第一步需要定义二叉树的机构。 typ…

API Monitor简易使用教程 监控Windows dll调用 监控Windows API调用 查看函数名,参数类型,参数,返回值

先看效果,可以显示所有dll及windows api的指定函数调用,以及传递的参数查看与修改。 官网下载 也有教程 我验证使用方法 1、API Filter窗口:选定要监听的dll函数或windows API,可以打断点 选中并右键勾上Breakpoint 选 Before C…

MFC为资源对话框添加消息处理函数和初始化控件

现在我VC6新建了一个对话框工程;又在资源添加了一个新的对话框,并为新的对话框添加了名为CTestDlg的类; 在主对话框的cpp文件包含#include "TestDlg.h"; 在主对话框的cpp文件的OnInitDialog()成员函数中,添…

web学习笔记(十五)

目录 1.Date对象 1.1日期对象的概念 1.2Date()方法的使用 1.3Date()常用方法汇总 1.4例题:用函数编写一个倒计时 2.函数 2.1函数的概念 2.2函数的使用 2.3函数的参数 2.4函数的声明 2.5函数的返回值 2.6异步函数 3特殊函数类型 3.1匿名函数 3.2箭头函数…

挖种子小游戏

欢迎来到程序小院 挖种子 玩法&#xff1a;看到种子点击鼠标左键进行挖种子&#xff0c;30秒内看你能够挖多少颗种子&#xff0c;快去挖种子吧^^。开始游戏https://www.ormcc.com/play/gameStart/251 html <canvas id"canvas" width"640" height"…

BSC/平衡记分卡

一、Balanced Score Card BSC即平衡计分卡&#xff08;Balanced Score Card&#xff09;&#xff0c;是常见的绩效考核方式之一&#xff0c;是从财务、客户、内部运营、学习与成长四个角度&#xff0c;将组织的战略落实为可操作的衡量指标和目标值的一种新型绩效管理体系。 是…

关于lombok插件的使用

在 idea 中有个非常好用的插件 lombok&#xff0c;可以用来在实体类中自动生成 get 、set以及构造方法&#xff0c;下面我们来学习如何使用它&#xff1a; 首先打开settings&#xff0c;按照以下方法&#xff1a; 到 marketplace 中搜索 lombok&#xff0c;我这里已经安装好了…

STM32——OLED实验

1.OLED简介 OLED&#xff0c;即有机发光二极管 OLED引脚说明 引脚说明&#xff1a; 1、CS&#xff1a;OLED片选信号&#xff08;低电平有效&#xff09; 2、WR&#xff1a;向OLED写入数据 3、RD&#xff1a;向OLED读取数据 4、D[7:0]&#xff1a;8位双向数据线&#xff0c;有…

本地静态资源打包出来,本地配置ng访问服务器(uniapp打包成h5后,使用打包资源连接测试环境测试)

1.下载ng https://nginx.org/en/download.html 2.解压下载的压缩包 3.打包h5静态资源 4.将打包出来的资源放入ng -》html文件夹下面 5.进入ng-》conf-》nginx.conf 进行转发配置 6.启动ng服务&#xff0c;点击nginx.exe 7.浏览器直接访问http://localhost:8081/#/&#x…

element-ui el-table表格勾选框条件禁用,及全勾选按钮禁用, 记录

项目场景&#xff1a; 表格的部分内容是可以被勾选的&#xff0c;部分内容是不可以被勾选的 使用的是 “element-plus”: “^2.2.22”, 以上应该都是兼容的 问题描述 要求el-table表格中&#xff0c;部分内容不可以被勾选&#xff0c;全选框在没有可选内容时&#xff0c;是禁…

日志审计系统Agent项目创建——获取Linux的ip并将得到的日志插入数据库中(Linux版本)

上一篇文章可以直接展示系统在运行过程中的日志&#xff0c;读取日志文件https://blog.csdn.net/wjl990316fddwjl/article/details/135553685 如何将得到的日志插入数据表中&#xff0c;进行更可观的展示&#xff1f; 1、创建表格并执行&#xff0c;可以看到数据库已经创建好…

基于ssm的校园预点餐系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于ssm的校园预点餐系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Sp…

前端规范扩展

前端编程规范是基于原有vue2基础上那套《编码风格及标准》上&#xff0c;应用于vue3、typescript、vite2基础上延伸出来的扩展补充&#xff0c;持续完善 一、编码规范 ESLint 代码检测工具 Pretter 代码格式化工具配合双校验代码 Git 规范 - 编码工具 vscode 同步参考文档中…

用通俗易懂的方式讲解:如何用大语言模型构建一个知识问答系统

传统搜索系统基于关键字匹配&#xff0c;在面向&#xff1a;游戏攻略、技术图谱、知识库等业务场景时&#xff0c;缺少对用户问题理解和答案二次处理能力。 本文探索使用大语言模型&#xff08;Large Language Model, LLM&#xff09;&#xff0c;通过其对自然语言理解和生成的…

APP自动化测试(超详细)

在实习过程中&#xff0c;我接触到了一些SDL安全提测的工作。原来我是学web端渗透比较多的&#xff0c;移动端这块基本没怎么试过手&#xff0c;结果刚开始一直踩坑&#xff0c;连抓包都抓不到(&#xff34;▽&#xff34;)。 下面记录下我遇到的部分问题和解决方法&#xff0…

有没有可以拖拉拽生成一个低代码平台?

据我所知&#xff0c;低代码平台都能拖拉拽生成。作为一组数字技术工具平台&#xff0c;它能基于图形化拖拽、参数化配置等更为高效的方式&#xff0c;实现快速构建、数据编排、连接生态、中台服务等。通过少量代码或不用代码实现数字化转型中的场景应用创新。 到底啥是低代码&…

【深度学习目标检测】十六、基于深度学习的麦穗头系统-含GUI和源码(python,yolov8)

全球麦穗检测是植物表型分析领域的一个挑战&#xff0c;主要目标是检测图像中的小麦麦穗。这种检测在农业领域具有重要意义&#xff0c;可以帮助农民评估作物的健康状况和成熟度。然而&#xff0c;由于小麦麦穗在视觉上具有挑战性&#xff0c;准确检测它们是一项艰巨的任务。 全…

c++算法之枚举

目录 解空间的类型 循环枚举解空间 例题 特别数的和 输入格式 输出格式 输入样例&#xff1a; 输出样例&#xff1a; 解 例题 反倍数 问题描述 输入格式 输出格式 样例输入 样例输出 解 例题 找到最多的数 解 枚举算法是一种基本的算法思想&#xff0c;它通过…