BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding

2023-11-09

参考

BERT原文[1810.04805] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (arxiv.org)

【(强推)李宏毅2021/2022春机器学习课程】 https://www.bilibili.com/video/BV1Wv411h7kN/?p=73&share_source=copy_web&vd_source=30e93e9c70e5a43ae75d42916063bc3b

【BERT 论文逐段精读【论文精读】】 https://www.bilibili.com/video/BV1PL411M7eQ/?share_source=copy_web&vd_source=30e93e9c70e5a43ae75d42916063bc3b

BERT是Transformer的双向编码器,是self-supervised,包括两个步骤:

1.使用两个任务预训练:1)Masked LM,随机mask token,然后预测原始的mask token;2)NSP,判断是否为下一个句子,两个句子是否连在一起(类似于二分类)。

2.微调。之后将预训练的BERT用于下游任务。在应用到不同下游任务时,只用改一下输出层,使用下游任务的输入和输出。BERT模型首先使用预训练的参数进行初始化。只有为了任务加入的层需要随机初始化,从头训练。然后使用来自下游任务的标记数据对所有参数进行微调。

为什么BERT work:

相近的词具有相似的embedding,但是有一词多义的现象,BERT考虑上下文,形成更好的embedding

所以BERT在预测mask token时,学会了抽取上下文信息,通过上下文生成更好的embedding

Abstract

BERT: Bidirectional Encoder Representations from Transformers——来自Transformer的双向编码器表示来改进基于微调的方法。

BERT旨在通过在所有层中联合调节左右上下文来预训练未标记文本的深度双向表示。只需要一个额外的输出层,就可以对预训练的BERT模型进行微调,从而为各种任务创建最先进的模型,而无需对特定于任务的体系结构进行实质性修改。

GPT是单向的,BERT是双向的。ELMo是基于RNN的,在应用到不同下游任务时,需要对架构进行一些调整,而BERT基于transformer的,在应用到不同下游任务时,只用改一下输出层。

1 Introduction

1.语言模型预训练已被证明对改善许多NLP任务是有效的。包括sentence-level任务,如自然语言推理和释义,旨在通过整体分析来预测句子之间的关系;token-level任务,如命名实体识别和问题回答,其中模型需要在token-level产生细粒度输出。

2.存在两种将预训练语言表示应用于下游任务的策略:基于特征和微调。基于特征的方法,如ELMo,使用特定于任务的架构,将预训练的表征作为额外的特征输入模型;微调方法,例如GPT,引入最小的任务特定参数,并通过简单地微调所有预训练参数在下游任务上进行训练。这两种训练方法在预训练过程中共享相同的目标函数,它们使用单向语言模型学习一般语言表示。

3.目前技术限制了预训练表示的能力,特别是对于微调方法,主要限制的是标准语言模型是单向的,例如,GPT只能使用单向(左右)结构,每个token只能关注Transformer的自注意中的先前token,对sentence-level任务token-level任务不是最优,从两个方向上合并上下文至关重要

4.BERT使用“掩码语言模型”(MLM)预训练目标缓解了前面提到的单向约束,该目标受到完形填空任务的启发,掩码语言模型从输入中随机掩码一些token,目标是仅基于masked word的上下文预测masked word的原始词汇id。和left-to-right 语言模型预训练不同,MLM目标使表示能够融合左右上下文,这允许我们预训练一个深度双向Transformer。除了屏蔽语言模型,我们还使用了“下一句预测”任务,联合预训练文本对表示.

本文贡献:1)证明双向预训练对语言表征的重要性,BERT使用掩码语言模型实现预训练的深度双向表示。而GPT使用单向的语言模型,ELMo使用独立训练的从左到右和从右到左的LM的简单拼接。

2)预训练的表示减少了许多高度工程化的特定于任务的架构的需求

2 Related Work

2.1 Unsupervised Feature-based Approaches

将预训练的词嵌入,作为特征,当作输入一部分。

预训练词嵌入是现代NLP系统中不可分割的一部分,与从头学习的词嵌入相比,提供了显著的改进。

ELMo及其前身沿着不同的维度概括了传统的词嵌入研究。它们从从左到右和从右到左的语言模型中提取上下文敏感的特性。每个token的上下文表示是从左到右和从右到左表示的连接。当将上下文词嵌入与现有的特定于任务的架构集成时,ELMo提高了几个主要NLP基准的最新水平。

2.2 Unsupervised Fine-tuning Approaches

将预训练的参数拿来进行微调

与基于特征的方法一样,第一种方法仅从未标记的文本中预训练词嵌入参数(Collobert和Weston, 2008)。

最近,产生上下文标记表示的句子或文档编码器已经从未标记的文本中进行了预训练,并为有监督的下游任务进行了微调(Dai和Le, 2015;霍华德和鲁德,2018年;Radford等人,2018)。这些方法的优点是需要从头学习的参数很少。

2.3 Transfer Learning from Supervised Data

从具有大型数据集的监督任务上有效迁移很有用。

3 BERT

在我们的框架中有两个步骤:预训练和微调。在预训练期间,模型在不同的预训练任务中使用未标记的数据进行训练为了进行微调,BERT模型首先使用预训练的参数进行初始化,然后使用来自下游任务的标记数据对所有参数进行微调。每个下游任务都有单独的微调模型,即使它们是用相同的预训练参数初始化的。

BERT的显著特征它是跨不同任务的统一架构。预训练的体系结构和最终下游体系结构之间存在很小的差异

Model Architecture:采用多层双向Transformer编码器。

Input/Output Representations:为了使BERT处理各种下游任务,我们的input representation能够明确的表示在一个token sequence中的single sentence和a pair of sentences。input token sequence可能是single sentence或者two sentences packed together。

使用WordPiece嵌入,每个序列的第一个标记总是一个特殊的分类标记([CLS])。与此标记对应的最终隐藏状态用作分类任务的聚合序列表示,分类任务时使用。句子对被打包成一个序列。我们用两种方法来区分这些句子。首先,我们用一个特殊的标记([SEP])将它们分开。其次,我们为每个标记添加一个学习嵌入,表明它属于句子a还是句子b。如图1所示,我们将输入嵌入表示为E,将特殊[CLS]标记的最终隐藏向量表示为C∈RH,将第i个输入标记的最终隐藏向量表示为Ti∈RH。对于给定的token的input representation是由对应的token,segment,和position embedding的和构造的。

3.1 Pre-training BERT

本文没有使用传统的left-to -right或right-to-left语言模型训练BERT,使用两个无监督任务预训练BERT

3.1.1 Task1 Masked LM

预测被mask的token

为了训练深度双向表示,按照一定百分比随机mask(屏蔽)一些 input tokens,然后预测被mask的tokens。在这种情况下,与mask token相对应的最终隐藏向量被送入词汇表上的输出softmax.

虽然这样允许我们获得一个双向训练模型,但缺点是在pre-training和fine-tuning之间造成了不匹配,因为masked tokens在fine-tuning时不会出现。因此我们并不总是用实际的[MASK]token替换“masked”words。训练数据生成器随机选择15%的token位置进行预测。如果第i个token被选中,我们将第i个token替换为(1)80%的时间为[MASK]token(2)10%的时间为随机token3)10%的时间为不变的第i个token.然后使用Ti来预测具有交叉熵损失的原始token

3.1.2 Task2 Next Sentence Prediction (NSP)

判断是否为下一个句子,两个句子是否连在一起(类似于二分类)

NSP是许多重要的下游任务,如问答和自然语言推断,都是基于对两个句子之间关系的理解。为了训练一个能够理解句子关系的模型,我们对一个二元化的下一句预测任务进行了预训练,该任务可以从任何单语言语料库中简单地生成。具体来说,在为每个预训练示例选择句子A和B时,50%的时间B是A之后的实际下一句句子(标记为IsNext), 50%的时间B是语料库中的随机句子(标记为NotNext)。

3.2 Fine-tuning BERT

对于每个任务,我们只需将特定于任务的输入和输出插入BERT,并对所有端到端的参数进行微调。在输入端,预训练的句子A和句子B类似于(1)释义中的句子对,(2)蕴涵中的假设-前提对,(3)问题回答中的问题-段落对,以及(4)文本分类或序列标注中的退化文本-∅对在输出端,标记表示被送入输出层用于标记级任务,例如序列标记或问题回答,而[CLS]表示被送入输出层用于分类,例如包含或情感分析

4 如何使用BERT

任务1:判断sentence是positive还是negative。加入的Linear层是随机初始化,而BERT是用pre-trained的参数初始化

任务2:词性标注,输入和输出长度一样。

任务3:输入两个句子输出一个类别,例如判断两个句子的逻辑,是否矛盾?

任务4:QA,给文章和问题,输出两个整数,定位答案的位置。

唯一需要从头随机初始化的是橙色和蓝色的两个向量。橙色和蓝色的向量分别和文档单词经过BERT的输出向量内积,计算出答案的起始位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding 的相关文章

  • kafka 监控工具--CMAK

    CMAK previously known as Kafka Manager is a tool for managing Apache Kafka clusters See below for details about the name
  • 使用python对银行信息管理系统的简单实现

    一 首先是用户属性的类 class account object 储存用户信息的类 def init self id1 name tel money self id id1 账户 self name name 姓名 self tel tel
  • Python安全攻防之第二章Python语言基础

    2 3 Python模块的安装与使用 python模块的安装 pip3 install 模块名称 py 3 m pip install 模块名称 python模块的导入与使用 1 Import模块名称 采用 Import模块名称 方式时 需
  • 论文笔记(四):影像图中水体识别与提取技术研究综述

    快速并且准确地提取水体信息 在水资源规划和调查 预防洪水灾 害和船舶航行中具有重要意义 0 前言 1 遥感图像与人工勘测 遥感图像 成像周期相对较短 实时性强 不受地域限制 人工勘测 耗费大量的人力物力以及时间 2 水体识别方法 阈值法 操
  • Peewee的坑

    db create tables Student 当如上使用时可能会报表Student不存在的错误 官方实例如db create tables Student Pet 改成db create tables Student safe True
  • 论文阅读——基于深度学习智能垃圾分类

    B Fu S Li J Wei Q Li Q Wang and J Tu A Novel Intelligent Garbage Classification System Based on Deep Learning and an Emb
  • Nginx基础03:配置文件nginx.conf(Part2)

    上一篇文章概述与罗列了 全局配置块 events配置块 http全局块 的基本配置与属性 本篇文章将继续深入server块的配置项 以及相关应用 上篇文章地址 Nginx基础02 配置文件nginx conf Part1 如何使用本篇文章
  • STM32 HAL——GPIO

    HAL的代码规范建议 以下内容是我自己参照HAL做的总结 如果公司有固定的编码规范 就跟公司保持一致 如果没有 那就推荐和所用库保持一致 注意 因人而异 并不具有普遍适用性 HAL库有如下代码规范 1 目录名除了专有词汇外 统一是单词首字母
  • macOS M2使用conda配置pytorch环境

    一 conda 首先我们需要有conda miniconda的安装配置流程可以看这个http t csdn cn ShcNb 二 进入官网 https pytorch org 选择对应的版本 复制下面的命令 conda install py
  • 安全顶刊论文阅读总结1

    论文阅读总结 An Explainable AI Based Intrusion Detection System for DNS Over HTTPS DoH Attacks 论文介绍 本文2022年发表在IEEE Transaction
  • 【CV with Pytorch】第 7 章 :图像异常检测

    机器学习的研究使我们进入了研究各种模式和行为的过程 它使我们能够构建可以研究封闭环境的模型 预测能力通常遵循模型训练过程 这是我们在训练模型时需要经常问的一个重要问题 还有另一个问题需要回答 多少数据足以帮助模型理解分布 以便我们有一个好的
  • Unity动画控制器animator.CrossFade

    需要特别注意 1 CrossFade虽然可以不用任何逻辑来链接而直接跳转 但是CrossFade只能覆盖其他动画 当当前动画播放完毕而没有跳出这个动画时再次调用CrossFade将会失败 造成动画依旧停在原位 参数animator Cros
  • SCSI、ISCSI、iSER、NVMe、NVMe-oF、NVMe-oF over RDMA

    在存储系统中 上层协议可以泛指 指令 也就是比如 读出从某某开始的多少长度的扇区 指令包含三大关键信息 1 操作码 Opreation Code 或称为OP code 比如write read等等 2 起始地址 从哪里开始读 如果是文件的话
  • 筛选sql中一列的重复数据及重复次数

    SELECT PROJECT CODE COUNT PROJECT CODE FROM meng project info GROUP BY PROJECT CODE HAVING COUNT PROJECT CODE gt 1 结果
  • Nim 游戏

    你和你的朋友 两个人一起玩 Nim 游戏 桌子上有一堆石头 你们轮流进行自己的回合 你作为先手 每一回合 轮到的人拿掉 1 3 块石头 拿掉最后一块石头的人就是获胜者 假设你们每一步都是最优解 请编写一个函数 来判断你是否可以在给定石头数量
  • 0227:zotero文献管理/小绿鲸英文/CSDN做笔记

    搜索 下载 白嫖 翻译 文章 如何精准找到和方向相关的文献 谷歌学术 国内无法正常进入 两个镜像网站 https xueshu dailyheadlines cc https scholar lanfanshu cn 搜索技巧 关键词套双引
  • JSON介绍及代码示例

    了解json JSON是什么 JSON是JavaScript Object Notation的缩写 它是一种数据交换格式 在JSON出现之前 大家一直用XML来传递数据 因为XML是一种纯文本格式 所以它适合在网络上交换数据 XML本身不算
  • // SPDX-License-Identifier: MIT

    上述声明是指明你写的智能合约采用什么样的对外开放标准 该标准规定了别人是否拥有各种使用权利 其中 MIT 标准说明其他人可以随便用该源码 但出问题不负责
  • 多少个X 蓝桥杯模拟

    问题描述 给定一个字母矩阵 一个 X 图形由中心点和由中心点向四个45度斜线方向引出的直线段组成 四条 线段的长度相同 而且四条线段上的字母和中心点的字母相同 一个 X图形可以使用三个整数 r c L 来描述 其中 r c 表示中心点位于第
  • Making Large Language Models Perform Better in Knowledge Graph Completion论文阅读

    文章目录 摘要 1 问题的提出 引出当前研究的不足与问题 KGC方法 LLM幻觉现象 解决方案 2 数据集和模型构建

随机推荐

  • Mysql 的 聚簇索引和二级索引

    原文地址 聚簇索引和二级索引 增加部分补充和理解 目录 1 索引的简述 1 聚簇索引 2 非聚簇索引 二级索引 辅助索引 2 示例 聚簇索引 主键索引 二级索引 辅助索引 3 结论 结论一 结论二 写在前面 针对原博主的讲述 网友提出相应补
  • 【算法】骑士周游 ---递归的说明

    因为说明中没有对应具体代码 请先看最下方代码在看说明 普通递归 创建一个二维空表做棋盘 用step记录走过的步数 用来增加条件判断游戏是否成功 棋盘上记录步数 使用visted记录是否该点是否走过 一张一维标记对应二位棋盘是否已走过 递归的
  • ElasticSearch RestHighLevelClient 教程(三) 删除&&查

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net paditang article details 79172837 前言 删除文档作为
  • C语言在字符串中删除特定字符

    当出现特定字符的位置用一个新定义的字符串进行类似跳过特定字符的操作 输入 s 输出 adlfjaljgowea include include void delSpace char s char c int main char str 80
  • xss跨站之代码及http only绕过

    什么是http only 在cookie中设置了http only属性 那么通过js代码无法获取cookie 并不能防止xss漏洞 在上一节的靶场网站源代码里面 写上这一串代码就是启动http only 再加上带去cookie的代码 然后我
  • Hibernate工作原理(图解)

    在 Hibernate操作数据库一节的学习中 我们主要涉及到了 Configuration SessionFactory Session Transaction 和 Query 等多个接口 这些接口在 Hibernate 运行时都扮演着十分
  • 货币银行学入门知识

    用IT技术玩金融系列文章 将介绍如何使用IT技术 处理金融大数据 在互联网混迹多年 已经熟练掌握一些IT技术 单纯地在互联网做开发 总觉得使劲的方式不对 要想靠技术养活自己 就要把技术变现 通过 跨界 可以寻找新的机会 创造技术的壁垒 金融
  • ncl泰勒图(均方根误差、标准差、相关系数)

    最近学习了一下泰勒图的做法 对2001年泰勒的文章进行了简单学习 说一点自己的理解 泰勒图一般是用来评估多个模式对观测数据的模拟能力 包括标准差 中心型均方根误差 相关系数这三部分 这三部分可以构建一个三角关系 相关系数是用来量化模式之间的
  • SQLyog安装教程详解

    安装SQLyog的详细步骤 1 复制连接 https pan baidu com s 19DHHrCqvg 0 StazHqGhcg 提取码 1111 2 等待下载 3 解压到新建文件夹 4 点击解压后的X64 右键 以管理员的身份运行 5
  • WEB前端网页设计-Bootstrap5 提示框 & JavaScript 对象

    目录 Bootstrap5 提示框 如何创建提示框 指定提示框的位置 JavaScript 对象 真实生活中的对象 属性和方法 JavaScript 对象 对象定义 实例 实例 对象属性 访问对象属性 实例 1 实例 2 对象方法 实例 实
  • PostgreSQL一些常用命令

    最近一直在学习Postgresql 下面是自己整理的Postgresql的常用命令 连接数据库 默认的用户和数据库是postgres psql U user d dbname 切换数据库 相当于mysql的use dbname c dbna
  • shuffleNet V2

    论文出发点 旨在设计一个轻量级但是保证精度 速度的深度网络 分析当前 1 直接用FLOP来衡量算力 不够准确 因为不同的网路 即使参数量相同 模型大小相同 但是模型速度还是存在差异 改为直接用速度 speed 来衡量 2 直接影响速度的因素
  • 最小二乘法的实现与线性回归的应用

    1 简介 简单线性回归中 您有一个因变量y和一个自变量X 该模型可以表示为 y m x b y mx b y
  • CTF-pwn入门–基础环境安装

    pwn的入门 环境安装 虚拟机安装 Linux ubuntu PWN的题大多数是在Linux上打 先安装一个Ubuntu是成为pwn手的开始 VMware Workstation Pro VMware Workstation Pro官网 U
  • 运行tomcat报错:Address localhost:1099 is already in use

    文章目录 1 报错展示 2 报错原因 3 解决方法 1 报错展示 报错语句 Address localhost 1099 is already in use 表示是1099端口已经被占用 2 报错原因 由于短时间内频繁运行tomcat服务器
  • 计算一个整数N的阶乘

    计算一个整数N的阶乘 时间限制 1Sec 内存限制 128MB 提交 1149 解决 775 题目描述 计算一个整数N的阶乘 输入 一个整数N 0 N 12 输出 整数N的阶乘 样例输入 5 样例输出 120 这是一道简单的c语言练习题 采
  • Linux安装Kafka

    相关链接 http kafka apache org downloads 1 使用Docker安装zookeeper 下载镜像 docker pull zookeeper 3 4 14 创建容器 docker run name zookee
  • python获取当前时间时分秒_python获取当前时间的用法

    1 先导入库 import datetime 2 获取当前日期和时间 now time datetime datetime now 3 格式化成我们想要的日期 strftime 比如 2016 09 21 datetime datetime
  • Qt对象树和QObject的构建/销毁顺序

    文章目录 Qt使用对象树组织QObject QObject的构建 销毁顺序 1 在堆上创建 使用new创建 2 在栈上创建 Qt使用对象树组织QObject 当以一个对象作为父对象创建QObject时 这个对象就会被添加到父对象的child
  • BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding

    参考 BERT原文 1810 04805 BERT Pre training of Deep Bidirectional Transformers for Language Understanding arxiv org 强推 李宏毅202