尽管如今的 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 在插值和外推方面都取得了更好的性能。相对位置嵌入和分块掩码的引入也使得模型能够更好地处理长序列,从而在长度外推任务上表现出色。此外,在保持准确性的同时,分块掩码还大大提高了模型的推理速度。
基于预训练的代码执行模型
论文链接:https://arxiv.org/abs/2305.05383
代码执行是理解代码语义的重要方式,但如今的代码预训练模型都没有考虑让模型学习如何执行代码。在本篇论文中,研究员们构造了三个 Python 代码执行数据集,记录下了数百万条代码的执行轨迹和中间结果,让代码预训练模型进行学习。
研究员们把代码输入给模型,让模型一步一步地“执行”程序,输出当前执行的行号,以及所有局部变量的值,如下图:
为了让模型逐步地学习代码执行,研究的数据集从单行代码到 Python 的官方教程示例代码,再到算法题代码,由易至难地让模型进行学习。研究员们还基于软件工程领域的突变测试,对代码使用了十余种突变进行数据增强,希望可以对模型进行更充分地训练,最后共得到三个数据集共计1300万条代码及其执行路径。
在 SOTA 的代码预训练模型 UniXcoder 的基础上,研究员们用了课程学习的训练策略,针对代码执行任务进行了继续训练。对比具有100倍参数量,但未经过代码执行训练的 Codex 模型,CodeExecutor 在执行简单程序的任务上取得了很高的执行正确率,并且有能力“执行”较为复杂的算法题代码。训练后的模型 CodeExecutor 在三个测试集上的结果如表2。
研究员们对 CodeNetMut 中的50条数据进行了人工分析,发现模型已经基本理解了代码中的控制流,对于循环和分支的执行轨迹预测较为准确,但难以执行对于复杂的数据结构,如数组和字符串的一些操作。
最后,研究员们将 CodeExecutor 应用到两个下游任务:代码-代码搜索和代码生成上,发现可以显著地提升原本模型的效果,证明了代码执行可以帮助预训练模型更好地理解代码语义,从而帮助理解和生成程序。
PICL: 在预训练中学习如何进行上下文学习
论文链接:https://arxiv.org/abs/2305.09137
随着大规模预训练模型的发展,上下文学习因其不需要对进行模型微调,且仅仅利用少量样本便能达到较好的效果,而逐渐受到关注。以前的工作主要尝试在下游数据集上进行元学习来增强上下文学习的能力,但这种方法往往会受人工数据数量、多样性的限制,并且引入输入/输出形式的偏置。因此本文提出了在预训练阶段直接增强模型上下文学习的能力,并提出了一个新的预训练框架:PICL。
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 注意力机制和梯度下降之间对偶形式的启发,研究员们通过类比梯度下降的动量设计了基于动量的注意力。与原始的注意力机制相比,该改进的注意力机制具有更好的性能,也进一步地验证了上述理解的正确性。而更重要的是,这个改进模型的路径展示了本文的发现和结论能够被用于在未来进一步改进模型设计的潜力。