ACL 2023 | 持续进化中的语言基础模型

news2024/11/25 4:43:11

尽管如今的 AI 模型已经具备了理解自然语言的能力,但科研人员并没有停止对模型的不断改善和理论探索。自然语言处理(NLP)领域的技术始终在快速变化和发展当中,酝酿着新的潮流和突破。

NLP 领域的顶级学术会议国际计算语言学年会 (Annual Meeting of the Association for Computational Linguistics,简称 ACL) 是关心 NLP 领域的研究者们观察动向的关键窗口。在2023年7月9-14日于加拿大多伦多举行的 ACL 2023 上,微软亚洲研究院有多篇针对基础模型的论文被 ACL 2023 收录,论文主题囊括大模型上下文学习机制、训练方法、模型的代码执行以及模型的长度外推问题。今天就让我们一起来看看相关的4篇前沿工作吧。

一种支持长度外推的Transformer架构

论文链接:https://arxiv.org/abs/2212.10554

在 Transformers 模型中,位置建模对于捕捉序列中的依赖关系具有重要意义。这篇文章主要关注长度外推问题,其目的是在短文本上训练模型,同时测试更长的序列。为了衡量这种外推能力,研究员们引入了一个概念并称之为注意力分辨率,并提出了两种设计,旨在改善 Transformer 模型在这一指标上的表现。

首先,研究员们提出了一种相对位置嵌入方法,通过显式地最大化注意力分辨率来提高模型的外推能力。相对位置嵌入可以帮助模型捕捉序列中的长距离依赖关系,从而在处理长序列时具有更好的性能。与传统的绝对位置嵌入相比,这种方法能更好地适应不同长度的输入序列,因此有助于提高模型在长度外推任务上的表现。

其次,为了在推理过程中提高效率,研究员们引入了分块掩码技术。通过将输入序列划分为多个块,并在每个块上应用掩码,研究员们可以降低计算复杂度,进而提高处理速度。这种方法在保持模型性能的同时,显著减少了计算资源的需求。将这两种设计结合起来,就得到了一种新的架构——长度可外推 Transformer (Length-Extrapolatable Transformer)。

研究员们在语言建模任务上对不同的 Transformer 变体进行了实验,以评估这种新型 Transformer 的性能。实验结果表明,这种长度可外推 Transformer 在插值和外推方面都取得了更好的性能。相对位置嵌入和分块掩码的引入也使得模型能够更好地处理长序列,从而在长度外推任务上表现出色。此外,在保持准确性的同时,分块掩码还大大提高了模型的推理速度。

表1:各种位置编码的比较,长度可外推 Transformer 在平移不变性和长度外推性方面具有明显优势。

基于预训练的代码执行模型

论文链接:https://arxiv.org/abs/2305.05383

代码执行是理解代码语义的重要方式,但如今的代码预训练模型都没有考虑让模型学习如何执行代码。在本篇论文中,研究员们构造了三个 Python 代码执行数据集,记录下了数百万条代码的执行轨迹和中间结果,让代码预训练模型进行学习。

研究员们把代码输入给模型,让模型一步一步地“执行”程序,输出当前执行的行号,以及所有局部变量的值,如下图:

图1:数据样例。(a)是一段 Python 代码。(b)是相应的代码执行轨迹,包括当前执行的行号 line 和执行后所有局部变量的值 state。

为了让模型逐步地学习代码执行,研究的数据集从单行代码到 Python 的官方教程示例代码,再到算法题代码,由易至难地让模型进行学习。研究员们还基于软件工程领域的突变测试,对代码使用了十余种突变进行数据增强,希望可以对模型进行更充分地训练,最后共得到三个数据集共计1300万条代码及其执行路径。

在 SOTA 的代码预训练模型 UniXcoder 的基础上,研究员们用了课程学习的训练策略,针对代码执行任务进行了继续训练。对比具有100倍参数量,但未经过代码执行训练的 Codex 模型,CodeExecutor 在执行简单程序的任务上取得了很高的执行正确率,并且有能力“执行”较为复杂的算法题代码。训练后的模型 CodeExecutor 在三个测试集上的结果如表2。

表2:实验结果,SingleLine, Tutorial 和 CodeNetMut 是由易到难的三个数据集,CEL-Si 是分别在第 i 个数据集上训练的模型,w/o CL 是没有使用课程学习在三个数据集上一起训练的模型。

研究员们对 CodeNetMut 中的50条数据进行了人工分析,发现模型已经基本理解了代码中的控制流,对于循环和分支的执行轨迹预测较为准确,但难以执行对于复杂的数据结构,如数组和字符串的一些操作。

最后,研究员们将 CodeExecutor 应用到两个下游任务:代码-代码搜索和代码生成上,发现可以显著地提升原本模型的效果,证明了代码执行可以帮助预训练模型更好地理解代码语义,从而帮助理解和生成程序。

PICL: 在预训练中学习如何进行上下文学习

论文链接:https://arxiv.org/abs/2305.09137

随着大规模预训练模型的发展,上下文学习因其不需要对进行模型微调,且仅仅利用少量样本便能达到较好的效果,而逐渐受到关注。以前的工作主要尝试在下游数据集上进行元学习来增强上下文学习的能力,但这种方法往往会受人工数据数量、多样性的限制,并且引入输入/输出形式的偏置。因此本文提出了在预训练阶段直接增强模型上下文学习的能力,并提出了一个新的预训练框架:PICL。

PICL 框架基于一个自然的观察:自然文本段落天然地包含了“内禀任务”。例如:“我今天很高兴,因为阿根廷拿了世界杯冠军。”这句话就包含了情感分析的任务。如果将具有相同“内禀任务”的段落聚在一起,模型便可利用这些任务进行上下文学习的“元学习”。其好处在于,“内禀任务”的样本来自于自然文本段落,输入/输出形式的偏置较少,且足够多样。为了聚集有相同“内禀任务”的段落,研究员们利用多种下游任务训练了一个检索器,来检索属于相同任务的文本,然后将检索器应用在预训练语料上,对任何自然文本的输入,检索出包含相同“内禀任务”的段落。最后再将检索出来的段落拼接成上下文学习的形式,并使用简单的语言模型目标在拼接后的样本上进行预训练。

图2: 左边是大规模纯文本语料 OpenWebText 中“内禀任务”的例子。右边是 PICL 框架的示意图

实验发现,检索器确实可以找到具有相同“内禀任务”的段落,许多段落都包含检索器训练集中没有的任务,充分说明了自然语言文本中“内禀任务” 的多样性。同时,PICL 框架下训练的模型的整体上下文学习性能和多任务的泛化性,相比于基线都有较大提升。

GPT为什么能进行上下文学习?语言模型隐式地执行梯度下降

论文链接:https://arxiv.org/abs/2212.10559

代码链接:https://aka.ms/icl

随着语言模型参数规模和训练数据规模的不断扩大,预训练的大语言模型展现出了惊人的上下文学习(in-context learning)能力。仅需要几个演示的“输入-标签”对,它们就可以在不进行参数更新的情况下为从未见过的输入预测其标签。

尽管在性能方面取得了巨大成功,但上下文学习的工作机制仍然是一个未解之谜。在这篇论文中,研究员们将语言模型解释为一个元优化器(meta-optimizer),并将上下文学习理解为一种隐式的微调过程。研究员们首先发现 Transformer 中的注意力机制和基于梯度下降的优化具有对偶形式。在这个基础上,研究员们将上下文学习理解为这样一个过程:GPT 首先根据演示样本生成元梯度(meta-gradient),然后将这些元梯度通过注意力机制应用到原始的 GPT 模型工作过程中,从而达到上下文学习的目的。研究员们全面地比较了上下文学习和显式微调在真实 NLP 任务中的行为,为这种理解提供了经验证据。

实验结果表明,从多个角度来观察,上下文学习与显式微调的行为都展现出了相似性,验证了本文理解的正确性。进一步地,受 Transformer 注意力机制和梯度下降之间对偶形式的启发,研究员们通过类比梯度下降的动量设计了基于动量的注意力。与原始的注意力机制相比,该改进的注意力机制具有更好的性能,也进一步地验证了上述理解的正确性。而更重要的是,这个改进模型的路径展示了本文的发现和结论能够被用于在未来进一步改进模型设计的潜力。

图3:根据演示样本(demonstration examples),GPT 首先通过前向计算生成上下文学习(in-context learning)的元梯度(meta-gradients),然后通过注意力机制将这些元梯度应用于模型的工作过程中。从梯度更新的角度来理解,上下文学习的元优化过程与显式微调的基于梯度下降的优化过程之间具有一种对偶形式。

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

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

相关文章

java中的三大集合类各自的特点以及适用场景

目录 ​编辑 三大容器的介绍 使用场景介绍 List 实现类 Map 实现类 Set 实现类: 三大容器的介绍 List(列表) 结构:由有序的元素序列组成,可以包含重复元素特点:可以通过索引访问元素,插入的顺…

SQL注入实操(更新中)

文章目录 一、sqli-lab靶场搭建二、通关笔记1.Less-1a.单引号‘b.updatexmlc.concatd.unione.information_schemaf.GROUP_CONCATg.select 1,2 2.Less-23.Less-3a.怎么找到注入点b.判断SQL注入漏洞的类型c.闭合语句d.如何判断显示位e.答案 4.Less-45.Less-5a.判断注入漏洞的依据…

PhpStudy2016-2018-RCE 漏洞复现

漏洞描述 PHPStudyRCE(Remote Code Execution),也称为phpstudy_backdoor漏洞,是指PHPStudy软件中存在的一个远程代码执行漏洞。 漏洞影响范围 Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包,通过集成Apac…

WEB:shrine

背景知识 了解Flask SSIT模板注入 题目 进行代码审计 import flask import osapp flask.Flask(__name__) /*创建了flask包下的Flask类的对象,name是一个适用于多数情况的快捷方式。有了这个参数,Flask才知道在哪里可以找到模板和静态文件*/app.confi…

HYPE分布式水文模型教程

详情点击链接:HYPE分布式水文模型建模方法与案例分析 前言 HYPE(Hydrological Predictions for the Environment, HYPE)是由瑞典皇家水文气象局(SMHI)在HBV和HBV-NP模型基础上开发的新一代分布式水文模型,已经在全球众多地区得…

同样是办公管理系统,钉钉和OA哪个更出色?

企业在选择办公协同系统的时候,通常搜索到“钉钉”和“OA系统”,两者都属于办公管理类型,但哪个更适合企业使用?两者又有哪些区别呢?小编整理了一下两者的对比和侧重的点,今天我们就来聊聊两者的区别吧~ 天…

【Linux】inode软硬连接

文章目录 📖 前言1. 文件系统1.1 磁盘的物理结构:1.2 CSH和LBA:1.3 IO的基本单位:1.4 文件系统结构:1.5 认识inode: 2. 软硬连接2.1 目录和文件的硬连接数:2.2 软连接:2.3 硬连接&am…

Clickhouse基础和基本优化

CK基础和基本优化 一、ClickHouse的特点列式存储高吞吐写入能力数据分区与线程级并行表引擎的使用MergeTreeReplacingMergeTreeSummingMergeTree 二、SQL操作1.Insert2.Update 和 Delete3.查询操作4.alter操作5.导出数据 三、基于表的分布式集群集群写入流程( 3分片…

react和vue2/3父子组件的双向绑定(sync、emit、v-model)

目录 Vue .sync(2.3.0) $emit (2.3后) 自定义组件的 v-model 2.2.0 v-modelemits(3.0取消了.sync) React 父组件回调函数 相关基础 框架 MVC (Model View Controller)/MVP(Model View…

VirtualBox 7.0.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件

VirtualBox 7.0.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件 Oracle VM VirtualBox 7 请访问原文链接:https://sysin.org/blog/virtualbox-7/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2022 年 10 月…

CentOS7中安装Mysql8并配置远程连接和修改密码等

场景 使用Vmware等虚拟机软件搭建CentOS7系统,需要在其上安装Mysql8版本数据库。 注: 博客:霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主 实现 1、去mysql官网手动下载rpm包并上传到服务器,或者直接通过wget…

Python结合Selenium简单实现Web自动化测试

这篇文章是入门级别的应用Python Selenium进行自动化测试,包括环境搭建及简单的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 这篇文章是入门级别的应用Python Selenium进行自动化测试,包括环境搭建及简单的实例。基…

数据库及数据表的相关操作(一)

目录 一、管理逻辑库与数据表二、常用数据类型和约束2.1 数字数据类型2.2 字符串数据类型2.3 日期数据类型2.4 字段约束 三、索引运行机制和使用原则3.1 创建索引3.2 添加与删除索引3.3 索引的使用原则 一、管理逻辑库与数据表 sql语言的分类: ​ DML数据操作语言…

linux之Ubuntu系列(四)用户管理 用户和权限 chmod 超级用户root, R、W、X、T、S 软链接和硬链接 shell

r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。 w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移…

linux之Ubuntu系列(-)常见指令 重定向

Ubuntu 中文 版本 注意点 通过修改语言改成英文 在终端录入:export LANGen_US 在终端录入:xdg-user-dirs-gtk-update 单用户和多用户 命令格式 command [-选项] [参数] –查看命令的帮助 命令 --help man 命令 |操作键| 功能| |空格键|-显示手册的下…

Kafka 入门到起飞系列 - 生产者发送消息流程解析

生产者通过producerRecord 对象封装消息主题、消息的value(内容)、timestamp(时间戳)等 生产者通过send()方法发送消息,send()方法会经过如下几步 1. 首先将消息交给拦截器(Interceptor)处理, 拦截器对生产者而言&…

Java编程-IDEA中Java的main方法psvm、sout快捷键设置

目的 我打出psvm这四个字母时,可快速打出main方法 我打出syso,sout时,可快速打出System.out.println(); 步骤: 1、打开IDEA,点击文件,选择Editor中的 Live Templates选项,点击右侧边栏中的 号 2、选中…

教你用Python+selenium搭建自动化测试环境

今天给大家带来的是关于Python的相关知识,文章围绕着如何用Pythonselenium搭建自动化测试环境展开,文中有非常详细的介绍,需要的朋友可以参考下 一、环境搭建 1、安装pythonpycharm软件 。python安装网址官网:About Python™ | Python.org 根据自己的电脑系统选择…

设计模式 ~ 发布订阅模式

概念 用于实现对象之间的松耦合通信; 在该模式中,存在一个或多个发布者(Publishers)和一个或多个订阅者(Subscribers); 发布者负责发布消息,而订阅者负责订阅感兴趣的消息并在接收到…

Java中高级面试题,开发模拟练习

1.Redis为什么这么快? Redis是单线程的,避免了多线程的上下文切换和并发控制开销;Redis大部分操作时基于内存,读写数据不需要磁盘I/O,所以速度非常快;Redis采用了I/O多路复用机制,提高了网络I/O并发性;Redis提供高效的数据结构&…