深入理解深度学习——BERT派生模型:BART(Bidirectional and Auto-Regressive Transformers)

news2024/11/18 19:51:16

分类目录:《深入理解深度学习》总目录


UniLM和XLNet都尝试在一定程度上融合BERT的双向编码思想,以及GPT的单向编码思想,同时兼具自编码的语义理解能力和自回归的文本生成能力。由脸书公司提出的BART(Bidirectional and Auto-Regressive Transformers)也是如此,它是一个兼顾上下文信息和自回归特性的模型。不同的是,UniLM和XLNet的模型结构与BERT基本一致,通过修改训练过程让模型具备了一定的文本生成能力,故模型的主要功能依然是语义理解。BART使用了传统的Transformer结构,不仅继承了BERT的语义理解能力,更展现了强大的序列到序列的文本生成能力。与BERT相比,其改进点如下:

  • 使用原始的Transformer Encoder-Decoder作为模型结构,区别于仅使用Transformer Encoder的BERT和仅使用Transformer Decoder的GPT。
  • 使用多样化的噪声干扰方式,让模型更注重文本的语义理解而不是结构化信息。

在进行语义理解时,BERT会获得一些额外的结构信息,如被掩码词的位置、序列的长度等,这些格式化的信息会让模型直接利用句式结构信息来辅助语义理解,即削弱模型在训练过程中获得的语义理解能力。BART通过引入自回归训练Decoder和多样化噪声,来降低模型对结构化信息的依赖,更注重对文本的理解。同时,在引入Decoder之后,其文本生成能力得到了极大增强。

算法细节

模型结构

BART使用了原始的Transformer Encoder-Decoder结构,具体模型结构和《深入理解深度学习——Transformer》系列文章中描述的基本一致,唯一的不同在于将激活函数从默认的ReLU改为GeLU。原始的Transformer被提出后用于机器翻译,由于其强大的语义提取能力,GPT将Transformer Decoder作为模型主结构,用于文本生成任务,BERT将Transformer Encoder作为模型主结构,用于文本理解任务。而BART将BERT与GPT合并,即直接使用原始的Transformer结构。三者的模型结构对比如下图所示,下图(a)为BERT的模型结构示意图,其模型结构主体使用双向编码器(Transformer Encoder),输入是带掩码的文本序列,输出是在掩码位置的词;下图(b)为GPT的模型结构示意图,其模型主体使用自回归解码器(Transformer Decoder),输入是正常的句子,输出是每个词的下一个词;下图©是BART的模型结构示意图,其模型主体同时使用双向编码器和自回归解码器(即完整的Transformer结构),输入是带掩码的文本序列,输出是在掩码位置填补预测词的完整序列。
在这里插入图片描述

噪声预训练

为了尽可能地减少模型对结构化信息的依赖,BART使用了5种不同的噪声方式进行训练,如下图所示。

BART使用的5种噪声方式示意图

  • Token Masking:与BERT一样,将个别词随机替换成[MASK],训练模型推断单个词的能力
  • Token Deletion:随机删除个别词,训练模型推断单个词及位置的能力。
  • Text Infilling:将一段连续的词随机替换成[MASK],甚至可以凭空添加[MASK],训练模型根据语义判断[MASK]包含的词及其长度。
  • Sentence Permutation:随机打乱文本序列的顺序,加强模型对词的关联性的提取能力。
  • Document Rotation:将文本序列连成圈,随机选择序列的起始词(保留序列的有序性,随机选择文本起始点),以此训练模型识别句首的能力。

值得注意的是,所有的噪声都添加在Encoder的输入文本上。

下游任务微调
  1. 序列分类任务:序列分类任务的微调改写与GPT的极为相似,即将输出序列最后一个词预测的token作为分类标签进行训练(序列的终止符一般为<EOS>),该终止符等效于BERT的分类标签[CLS],如下图所示:在这里插入图片描述

  2. 单词级别的分类和标注任务:直接将Decoder对应的每一个输出作为分类标签。如下图所示,对于由5个词 A B C D E ABCDE ABCDE组成的句子,在预训练过程中,若Decoder的输入为词 A A A,则训练目标为词 B B B。在单词分类(标注)任务的微调训练过程中,若Decoder的输入为词 A A A,则训练目标为词 A A A对应的类别标签。

  3. 序列到序列任务:由于BART的结构是传统的Transformer,故天然适合做序列到序列任务,不需要额外的改动。

综上所述,BART通过使用多样化的噪声干扰方式进行训练,在文本理解任务上达到与RoBERTa持平的效果,更通过引入Transformer Decoder结构,在多个生成式任务上达到SOTA效果,其模型体积仅比BERT大10%,算是性价比极高的模型。

参考文献:
[1] Lecun Y, Bengio Y, Hinton G. Deep learning[J]. Nature, 2015
[2] Aston Zhang, Zack C. Lipton, Mu Li, Alex J. Smola. Dive Into Deep Learning[J]. arXiv preprint arXiv:2106.11342, 2021.
[3] 车万翔, 崔一鸣, 郭江. 自然语言处理:基于预训练模型的方法[M]. 电子工业出版社, 2021.
[4] 邵浩, 刘一烽. 预训练语言模型[M]. 电子工业出版社, 2021.
[5] 何晗. 自然语言处理入门[M]. 人民邮电出版社, 2019
[6] Sudharsan Ravichandiran. BERT基础教程:Transformer大模型实战[M]. 人民邮电出版社, 2023
[7] 吴茂贵, 王红星. 深入浅出Embedding:原理解析与应用实战[M]. 机械工业出版社, 2021.

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

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

相关文章

[Hadoop] 期末答辩问题准备

0.相关概念 1.什么是NameNode&#xff1f; NameNode是整个文件系统的管理节点&#xff0c;它维护着整个文件系统的文件目录树&#xff0c;文件/目录的元信息和每个文件对应的数据块列表。并接收用户的操作请求。 2.SecondaryNameNode的主要作用&#xff1f; SecondaryNameN…

JUC阻塞队列BlockingQueue---ArrayBlockingQueue

JUC阻塞队列BlockingQueue---ArrayBlockingQueue ArrayBlockingQueue示例代码原理构造方法内部常量入队put方法出队take方法 什么是阻塞队列&#xff1f; ArrayBlockingQueue ArrayBlockingQueue是典型的有界阻塞队列&#xff0c;其内部是用数组存储元素的&#xff0c;初始化…

chatgpt赋能python:Python程序安装指南

Python程序安装指南 介绍 Python 是一种高级编程语言&#xff0c;广泛应用于数据分析、人工智能、Web开发等领域。安装 Python 程序是使用 Python 和运行 Python 脚本的必要步骤。在本文中&#xff0c;我们将提供详细的 Python 程序安装指南。 安装Python程序步骤 步骤1: 下…

1.1-python课程简介

一、python入门 1、python来源2、什么是python3、python编程软件下载4、python软件安装5、python软件运行和调试 1、python来源 Guido van Rossum 于1989年在荷兰国家数学和计算机科学研究所设计出来的。 2、什么是python Python 是一个高层次的结合了解释性、编译性、互动性…

【推荐】win 安装 rust 1.70 (GNU)

目录 一、下载二、安装三、配置环境变量四、检查是否安装成功五、参考文章 一、下载 官网地址&#xff1a;https://www.rust-lang.org/zh-CN/ https://forge.rust-lang.org/infra/other-installation-methods.html 历史版本下载地址&#xff1a; 二、安装 注意&#xff1a;安…

TypeScript ~ TS Webpack构建工具 ⑦

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

chatgpt赋能python:Python相加:实现快速、高效的计算

Python相加&#xff1a; 实现快速、高效的计算 Python 运用广泛&#xff0c;是一种功能强大的编程语言。它不仅易于学习&#xff0c;而且具备许多强大的功能&#xff0c;其中包括 Python 相加。今天&#xff0c;我们将介绍如何写 Python 相加的代码&#xff0c;以及如何实现快…

chatgpt赋能python:如何将Python程序打包成App-一个详细的指南

如何将Python程序打包成App - 一个详细的指南 如果你是一位有着丰富Python编程经验的开发者&#xff0c;可能你听说过Python App打包。Python App打包就是将Python程序打包成为操作系统所支持的应用程序的过程。这个过程可以让你的Python程序在Windows、Mac和Linux操作系统上更…

Linux网络、进程

一、网络环境配置 第一种方法&#xff1a;自动获取 登陆后&#xff0c;通过界面来设置自动获取IP&#xff0c;特点&#xff1a;linux启动后会自动获取IP&#xff0c;缺点是每次自动获取的IP地址可能不一样。这种就不适合服务器使用 第二种方法&#xff1a;指定IP 直接修改配置…

【Leetcode60天带刷】day24 回溯算法—— 77. 组合

​ 理论基础&#xff1a; 什么是回溯法&#xff1f; 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。 回溯法解决的问题 回溯法&#xff0c;一般可以解决如下几种问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合切割问题&#xff…

chatgpt赋能python:Python程序如何打包成安装包

Python程序如何打包成安装包 Python是一种受欢迎的编程语言&#xff0c;许多开发者使用它构建各种类型的应用程序。然而&#xff0c;当需要分发Python应用程序时&#xff0c;将所有代码和依赖项打包成新的安装包通常是最佳选择。本文将介绍如何使用Python打包工具将Python程序…

Java并发工具Fork/Join原理

我们一直讲&#xff0c;并发编程可以分为三个层面的问题&#xff0c;分别是分工、协作和互斥&#xff0c;当你关注于任务的时候&#xff0c;你会发现你的视角已经从并发编程的细节中跳出来了&#xff0c;你应用的更多的是现实世界的思维模式&#xff0c;类比的往往是现实世界里…

Golang每日一练(leetDay0107) 去除重复字母、最大单词长度乘积

目录 316. 去除重复字母 Remove Duplicate Letters &#x1f31f;&#x1f31f; 318. 最大单词长度乘积 Maximum-product-of-word-lengths &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日…

【Less】四则运算

Less四则运算特点 对于两个不同单位值之间的运算&#xff0c;不要求你进行运算操作的几个值必须带单位&#xff0c;只要其中有一个有单位就可以了&#xff0c;运算结果的值会优先取第一个值的单位为准。如&#xff1a; 2030px-10em编译成40px。border:10em; border:(border2px)…

数据挖掘——宁县(区、市)农村居民人均可支配收入影响因子分析(论文)

《数据挖掘与分析》课程论文 题目&#xff1a;宁县&#xff08;区、市&#xff09;农村居民人均可支配收入影响因子分析 xx学院xx班&#xff1a;xxx 2022年6月 摘要&#xff1a;农村居民人均可支配收入可能被农作物产量、牲畜存栏、农作物播种数量等诸多因素影响。为此&#…

JavaSE基础语法--封装

Java是一门面向对象的语言。面向对象的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态。封装到底是什么含义呢&#xff1f;通俗来讲就是屏蔽掉类的实现细节&#xff0c;对外提供接口让你调用。举个现实生活中的例子&#xff1a; 刚好618刚过&#xff0c;我因为需求…

chatgpt赋能python:Python算和的重要性及优势

Python算和的重要性及优势 在现代科技时代&#xff0c;计算机的应用范围越来越广泛&#xff0c;Python算和作为一种高效而强大的计算工具&#xff0c;已经成为了无数科学家和工程师的必备技能。Python算和不仅仅在各类科学实验中有着重要的应用&#xff0c;也在企业开发、数据…

chatgpt赋能python:Python程序一直运行怎么停止?

Python程序一直运行怎么停止&#xff1f; 在开发软件时&#xff0c;有时候我们会遇到Python程序一直运行不停止的情况&#xff0c;这时候我们该如何解决呢&#xff1f;本文将介绍一些常见的方法帮助您停止Python程序。 常见的停止Python程序的方法 1. KeyboardInterrupt&…

【硬件5】vr电源芯片驱动

文章目录 1.读MPS5023芯片&#xff1a;0x03ff即将前6位屏蔽2.读PXE1410CDM电压和电流&#xff1a;一个数&0x7ff&#xff0c;将这个数前5位全变为0&#xff0c;其余位不变2.1 1ine11&#xff1a;先看第15和10位&#xff0c;e9b6是上面读出的值2.2 1ine16&#xff1a;PMBUS协…

chatgpt赋能python:Python空循环:提高代码效率的神器

Python空循环&#xff1a;提高代码效率的神器 Python作为一门高效、易学的编程语言&#xff0c;广泛应用于各行各业。在编写Python代码时&#xff0c;循环结构是经常使用的。但是&#xff0c;有时候我们需要使用循环结构&#xff0c;但并不需要执行任何操作。这时候&#xff0…