STRUCTBERT:将语言结构融入预训练以提升深度语言理解

【摘要】最近,预训练语言模型BERT(及其经过稳健优化的版本RoBERTa)在自然语言理解(NLU)领域引起了广泛关注,并在情感分类、自然语言推理、语义文本相似度和问答等各种NLU任务中达到了最先进的准确率。受到Elman [8] 线性化探索工作的启发,我们在BERT的基础上提出了一种新模型StructBERT,通过在预训练过程中融入语言结构来提升表现。具体而言,我们为StructBERT设计了两个辅助任务,以充分利用单词和句子的顺序信息,从而在词级和句子级别上利用语言结构。这使得新模型能够适应下游任务所需的不同层次的语言理解能力。在引入结构化预训练后,StructBERT在多个下游任务上取得了出色的实验结果。例如,在GLUE基准测试中达到89.0的分数(超越所有已发布模型),在SQuAD v1.1问答任务中F1分数达到93.0,在SNLI数据集上的准确率达到91.7。

1,引言

预训练语言模型(LM)是许多自然语言理解(NLU)任务的关键组件,例如语义文本相似度 [4]、问答 [21] 和情感分类 [25]。为了获得可靠的语言表示,神经语言模型利用自监督学习来定义文本中单词序列的联合概率分布。与传统的基于单词的嵌入方法不同(即为每个标记分配一个全局表示),近年来的研究(如 Cove [16]、ELMo [18]、GPT [20] 和 BERT [6])通过在大规模文本语料库上训练语言模型,生成上下文化的单词向量。这些模型已被证明在许多下游NLU任务中具有良好的效果。

在上下文敏感的语言模型中,BERT(及其经过稳健优化的版本RoBERTa [15])席卷了NLP领域。BERT的设计旨在通过在所有层中同时考虑左右上下文来预训练双向表示,并仅通过上下文来预测被掩码的单词,以学习语言表示。然而,它并未充分利用潜在的语言结构。

根据 Elman [8] 的研究,循环神经网络(RNN)在处理简单句子时对单词顺序的规律性表现出敏感性。由于语言的流畅性取决于单词和句子的排序,因此在许多自然语言处理(NLP)任务(如机器翻译和自然语言理解 [9])中,找到一组单词和句子的最佳排列方式是一个关键问题。近年来,单词排序被视为基于语言模型(LM)的线性化任务,仅依赖语言模型进行处理 [24]。Schmaltz 的研究表明,即使没有显式的句法信息,带有长短时记忆(LSTM)单元的循环神经网络语言模型(RNN-LM)[17] 也能有效地完成单词排序任务。

在本文中,我们介绍了一种新的上下文表示方式——StructBERT,它通过提出两种新的线性化策略,将语言结构引入到BERT的预训练中。具体而言,除了现有的掩码策略外,StructBERT 还利用结构信息来扩展 BERT,包括词级顺序和句级顺序。我们在模型预训练过程中分别针对句内结构和句间结构引入了两个新的结构化目标。通过这种方式,语言学特征在预训练过程中得到了显式捕捉。通过结构化预训练,StructBERT 在上下文化表示中编码了单词之间以及句子之间的依赖关系,从而使模型具有更好的泛化能力和适应性。

  • 我们提出了一种新颖的结构化预训练方法,通过引入词级结构目标和句级结构目标扩展 BERT,在上下文化表示中利用语言结构。这使得 StructBERT 能够显式建模语言结构,并通过强制模型重建正确的单词和句子顺序来进行准确预测。

  • StructBERT 在各种自然语言理解(NLU)任务上显著超越了所有已发布的最新模型。该模型扩展了 BERT 的优势,并在语义文本相似度、情感分析、文本蕴含和问答等语言理解应用中提升了性能。

2,StructBERT 模型预训练

StructBERT 基于 BERT 架构,后者使用多层双向 Transformer 网络 [26]。给定一个单独的文本句子或一对文本句子,BERT 将它们打包成一个令牌序列,并为每个令牌学习一个上下文化的向量表示。每个输入令牌的表示是基于该词、位置以及它所属的文本片段。接下来,输入向量被送入一堆多层双向 Transformer 块,这些块使用自注意力机制,通过考虑整个输入序列来计算文本表示。

原始的 BERT 引入了两个无监督的预测任务来预训练模型:即掩码语言模型(Masked LM)任务和下一个句子预测任务。与原始 BERT 不同,我们的 StructBERT 通过在单词掩码后打乱一定数量的令牌并预测正确的顺序,增强了掩码语言模型任务的能力。此外,为了更好地理解句子之间的关系,StructBERT 随机交换句子顺序,并预测下一个句子和前一个句子,作为一种新的句子预测任务。通过这种方式,新的模型不仅显式地捕捉了每个句子中细粒度的词语结构,还以双向的方式正确地建模了句间结构。一旦通过这两个辅助任务预训练了 StructBERT 语言模型,我们就可以在任务特定数据上进行微调,以适应广泛的下游任务。

2.1,输入表示

每个输入 x 是一系列词元,可以是一个单独的句子,也可以是两个句子组成的对。输入表示遵循 BERT [6] 中使用的方式。对于每个输入词元 t_i,其向量表示 x_i 是通过将对应的词元嵌入、位置嵌入和段落嵌入相加来计算的。我们总是将一个特殊的分类嵌入([CLS])作为每个序列的第一个词元,并在每个段落的末尾添加一个特殊的序列结束标记([SEP])。文本通过 WordPiece [30] 被分词为子词单元,绝对位置嵌入是通过支持的最大序列长度(最多 512 个词元)进行学习的。此外,段落嵌入用于区分一对句子,就像 BERT 中一样。

2.2,Transformer Encoder

我们使用多层双向 Transformer 编码器 [26] 来对输入表示进行上下文信息编码。给定输入向量 X=\left \{ x_i \right \}_{i=1}^N,使用 L 层 Transformer 对输入进行编码,表示为:

H^l=Transformer_{l}(H^{l-1})

其中:l\in[1,L]H^0=XH^L=[h_1^L,...,h_N^L]。我们使用隐藏向量 h_i^L 作为输入词元 t_i的上下文化表示。

2.3,预训练目标

为了充分利用语言中丰富的句内和句间结构,我们在原始 BERT 的预训练目标基础上进行了两方面的扩展:

  • 词汇结构目标(主要用于单句任务)

  • 句子结构目标(主要用于句子对任务)

我们将这两个辅助目标与原始的掩码语言模型(LM)目标一起,在统一的模型中进行预训练,以利用语言的固有结构。

【词汇结构目标】尽管原始 BERT 在各种自然语言理解(NLU)任务中取得了成功,但它无法显式地建模自然语言中词语的顺序和高阶依赖关系。给定一组随机顺序的词汇,理想的语言模型应该能够通过重构这些词汇的正确顺序来恢复原句。为了在 StructBERT 中实现这一想法,我们在 BERT 的训练目标基础上增加了一个新的词汇结构目标,使模型具备了重构某些故意打乱顺序的词元正确顺序的能力。这个新的词汇目标与 BERT 的原始掩码语言模型(LM)目标一起联合训练。

上图展示了联合训练新的词汇目标和掩码 LM 目标的过程。在每个输入序列中,我们首先像 BERT [6] 中一样随机掩码 15% 的所有词元。由双向 Transformer 编码器计算的掩码词元对应的输出向量 h_i^L 被输入到 softmax 分类器中,以预测原始词元。

接下来,新的词汇目标开始发挥作用,考虑词语顺序。鉴于词元洗牌的随机性,词汇目标相当于最大化将每个洗牌词元放置到其正确位置的概率。更正式地,这个目标可以被表述为:

arg\, \underset{\theta}{max}\sum log\,P(pos_1=t_1,pos_2=t_2,...,pos_K=t_K[t_1,t_2,...,t_K,\theta])

其中,\theta 表示 StructBERT 的可训练参数集,K 表示每个打乱子序列的长度。从技术上讲,较大的 K 会迫使模型能够重建更长的序列,同时注入更多干扰的输入。相反,当 K 较小的时候,模型获得更多未受干扰的序列,但在恢复长序列方面的能力较差。我们决定使用三元组(即 K = 3)进行子序列打乱,以平衡语言重建能力和模型的鲁棒性。

具体来说,如上图所示,我们随机选择一定比例的三元组来自未屏蔽的标记,并在每个三元组内打乱三个词(例如图中的 t2、t3 和 t4)。通过双向 Transformer 编码器计算的打乱标记的输出向量,然后输入到一个 softmax 分类器中,以预测原始标记。新的词目标与掩蔽语言模型(LM)目标一起在统一的预训练模型中共同学习,并赋予相等的权重。

【句子结构目标】原始 BERT 模型认为下一个句子预测任务比较简单(BERT 在此任务中的预测准确率可以轻松达到 97%-98% [6])。因此,我们通过预测下一个句子和上一个句子,扩展了句子预测任务,以使预训练语言模型以双向的方式意识到句子的顺序。如上图所示,给定一对句子(S1,S2)作为输入,我们预测 S2 是紧随 S1 之后的下一个句子,还是在 S1 之前的上一个句子,或者是来自不同文档的随机句子。具体来说,对于句子 S1,1/3 的时间我们选择紧随 S1 之后的文本片段作为第二个句子 S2,1/3 的时间选择 S1 之前的上一个句子,1/3 的时间则随机从其他文档中抽取一个句子作为 S2。这两个句子被连接在一起,形成一个输入序列,并在中间使用分隔符标记 [SEP],如同 BERT 中的做法。我们通过取对应于第一个标记 [CLS] 的隐藏状态来汇聚模型输出,并将 [CLS] 的编码向量输入到一个 softmax 分类器中进行三类预测。

2.4,预训练设置

训练目标函数是词汇结构目标和句子结构目标的线性组合。对于掩蔽语言模型(Masked LM)目标,我们采用了与BERT [6] 相同的掩蔽率和设置,选择5%的三元组进行随机打乱。我们使用了来自英文维基百科(2,500M词)和BookCorpus [35] 的文档作为预训练数据,遵循了[6]中的预处理和WordPiece分词方法。输入序列的最大长度设置为512。

我们使用Adam优化器,学习率设置为1e-4,β1 = 0.9,β2 = 0.999,L2权重衰减为0.01,前10%总步骤进行了学习率预热,学习率采用线性衰减。每层设置了0.1的dropout概率。激活函数使用了gelu [10],与GPT [20]相同。

我们将Transformer块的层数记为L,隐藏向量的大小记为H,自注意力头数记为A。按照BERT的做法,我们主要报告两种模型规模的实验结果:

  • StructBERTBase:L = 12,H = 768,A = 12,参数数量 = 1.1亿

  • StructBERTLarge:L = 24,H = 1024,A = 16,参数数量 = 3.4亿

StructBERT的预训练是在一个由64个Tesla V100 GPU卡组成的分布式计算集群上进行的。对于StructBERTBase,我们进行了40轮预训练,耗时大约38小时;而StructBERTLarge的训练大约花费了7天完成。

3,结论

在本文中,我们提出了一种新颖的结构化预训练方法,将词汇结构和句子结构纳入BERT的预训练中。我们引入了词汇结构目标和句子结构目标,作为两种新的预训练任务,用于在不同粒度上深度理解自然语言。实验结果表明,新的StructBERT模型在多种下游任务中取得了新的最先进的结果,包括流行的GLUE基准、SNLI语料库和SQuAD v1.1问答任务。

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

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

相关文章

leetcode_977. 有序数组的平方_java

977. 有序数组的平方https://leetcode.cn/problems/squares-of-a-sorted-array/ 1.题目 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1…

Nginx—nginx.conf 配置结构详解

一、nginx.conf 配置结构 函数 说明 main 全局配置 event 配置工作模式以及连接数 http http模块相关配置 server 虚拟主机配置,可以有多个 location 路由规则,表达式 upstream 集群、内网服务器(负载均衡也在这里边配&#xff…

斐波那契数列----C语言

关于斐波那契 已知: 问题背景:一对兔子从第3个月开始每月生一对新兔子,新兔子同样在第3个月开始繁殖。 关键观察: 第1个月:1对(初始兔子)。 第2个月:1对(未成熟&#…

vulhub靶场—— Tomcat8

目录 一、漏洞描述 二、靶场搭建 三、漏洞复现 1、弱密码 2、文件上传 一、漏洞描述 环境描述: Tomcat 支持后台部署 war 文件,可以直接将 webshell 部署到 web 目录下。tomcat 默认的管理页面 manager 使用 basic 认证用户名和密码登录&#xff0…

使用 Spring AI Aliabab Module RAG 构建 Web Search 应用

使用 Spring AI Alibaba 构建大模型联网搜索应用 Spring AI 实现了模块化 RAG 架构,架构的灵感来自于论文“模块化 RAG:将 RAG 系统转变为类似乐高的可重构框架”中详述的模块化概念。 Spring AI 模块化 RAG 体系 总体上分为以下几个步骤: …

一些练习 C 语言的小游戏

一些练习 C 语言的小游戏 — 1. 猜数字游戏 描述:程序随机生成一个数字,玩家需要猜测这个数字,并根据提示(太高或太低)调整猜测,直到猜中为止。 功能点: 随机数生成 (rand() 函数)。循环和…

关于中文编程的一些思考

随着信息化与数字化的发展,工业4.0时代亦将徐徐到来。当计算机的普及程度越来越高,数据的产生、传输、处理等变得越来越快、越来越大量的时候,人们想要自动化办公的愿望也越来越强烈,希望能将自身从耗费脑力但是重复繁琐的工作中解…

golang 日志log与logrus

目录 一、Go 标准库 log 详解 1. 功能特点 2. 常用函数 3. 示例代码 4. 优势和局限 二、第三方库 logrus 详解 1. 功能特点 2. 核心功能 3. 示例代码 4. 优势和扩展性 三、总结 1. 何时选择 log? 2. 何时选择 logrus? 3. 对比总结 一、Go 标…

消费品行业创新创业中品类创新与数字化工具的融合:以开源 AI 智能客服、AI 智能名片及 S2B2C 商城小程序为例

摘要: 本文聚焦于消费品行业的创新与创业,深入探讨“选择大于努力”这一观点,强调品类选择在品牌发展中的关键作用。同时,详细分析了品类创新对于新消费品牌崛起以及传统品牌转型的重要意义。在此基础上,引入开源 AI 智…

Razer macOS v0.4.10快速安装

链接点这里下载最新的 .dmg 文件。将下载的 .dmg 映像文件拖入 应用程序 文件夹中。若首次打开时出现安全警告【什么扔到废纸篓】,这时候点击 Mac 的“系统偏好设置”-> “安全性与隐私”-> “通用”,然后点击底部的 “打开”。【或者仍然打开】 对…

Flask项目部署:Flask + uWSGI + Nginx

目录 1,网络架构 2,环境安装 2.1,安装yum:Shell软件包管理器 2.2 安装python 2.3 安装uWSGI 2.4 安装Flask 3,上传工程包到服务器,打包Flask项目 4,创建和配置 uwsgi 配置文件 uwsgi.ini 4.1配置文件 4.2配置文件注释详解 5,启动服务 6,安装nginx 7,nginx配置 8,…

[FPGA基础学习]实现流水灯与按键暂停

FPGA实现LED流水灯 1.vscode的安装和使用 vscode下载 Visual Studio Code - Code Editing. Redefined vscode插件(Verilog-HDL/SystemVerilog)下载 quartus绑定vscode 2.用6个LED完成周期为1秒的跑马灯效果 流水灯模块设计 时钟输入 DE2-115开发板…

【TensorRT】TensorRT从安装到推理——Python 环境下 MobileNetV4 三分类任务

我想开发一个基于深度学习的分类小软件,逐渐了解到了TensorRT在模型推理速度上的优势,经过一下午资料的查找实现了将onnx模型转为TensorRT格式模型的推理及测试过程。将实现过程记录下来方便日后查看。 本文实验设备是MX350显卡 2G显存 一 、安装Tenso…

1.两数之和(Java)

1. 题目描述 LeetCode 1. 两数之和(Two Sum) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的索引。 示例 1: 输入:nums [2,7,11,15], target 9 …

《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》

《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》 引言:从零到分析高手 数据是当代社会最宝贵的资源,而数据分析技能是现代职业人不可或缺的一部分。在数据科学的领域中,Python 已成为当之无愧的“首选语言”,其强大的生态系统和简洁的语法让人如虎添…

将树莓派5当做Ollama服务器,C#调用generate的API的示例

其实完全没这个必要,性能用脚后跟想都会很差。但基于上一篇文章的成果,来都来了就先简单试试吧。 先来看看这个拼夕夕上五百多块钱能达到的效果: 只要对速度没要求,那感觉就还行。 Ollama默认只在本地回环(127.0.0…

python基础学习二(列表及字典的使用)

文章目录 列表列表的创建获取列表中的多个元素判断列表中元素是否存在列表元素的添加操作列表元素的删除操作列表元素的修改列表的排序列表生成式 字典字典的创建字典的常规操作字典的常用操作字典的视图操作字典元素的遍历字典的特点字典的生成式 列表 一个对象由id&#xff0…

Android设计模式之代理模式

一、定义: 为其他对象提供一种代理以控制对这个对象的访问。 二、角色组成: Subject抽象主题:声明真是主题与代理的共同接口方法,可以是一个抽象类或接口。 RealSubject真实主题:定义了代理表示的真实对象&#xff0c…

国外计算机证书推荐(考证)(6 Sigma、AWS、APICS、IIA、Microsoft、Oracle、PMI、Red Hat)

文章目录 证书推荐1. 六西格玛 (6 Sigma)2. 亚马逊网络服务 (AWS)3. 美国生产与库存控制学会 (APICS)4. 内部审计师协会 (IIA)5. 微软 (Microsoft)6. 甲骨文 (Oracle)7. 项目管理协会 (PMI)8. 红帽 (Red Hat) 证书推荐 1. 六西格玛 (6 Sigma) 介绍:六西格玛是一种…

用mkdocs写文档#自动更新github-page

https://wuyisheng.github.io/blog 背景是上一篇博客 使用mkdocs,最后提及可以部署github page。这里说明下怎么自动部署。 当然,这篇博客主要的目的还是提供下github page的链接 :) 我是这样做的: step 1: pip3 i…