飞道的博客

组合泛化太难?试试解析式学习,100%准确率!

418人阅读  评论(0)

点击蓝字

关注我们

AI TIME欢迎每一位AI爱好者的加入!

近年来,深度学习模型在各种任务上都取得了非常大的成功。然而,不同于人类可以从少量样本中快速学习,深度学习模型的成功仍依赖于大量训练数据。那么,深度学习模型是否有可能拥有人类这种快速学习的能力呢?一个关键问题就在于深度学习是否可以拥有组合泛化能力。组合泛化是人类的一种基本而又必不可少的能力,通过理解已知部件的未知组合,人类可以利用有限的语言元素理解无限的自然语言世界。因此,越来越多研究者关注在组合泛化这个问题上,尤其是在AI编程领域。

2018年,纽约大学和Facebook的科学家们提出一个组合泛化领域的经典测试基准SCAN,测试任务是将诸如“run after walk”这样的自然语言解析成诸如“WALK RUN”这样的导航指令。然而他们发现,目前最先进的深度学习模型,甚至包括预训练模型,在这个测试基准上表现得都尤其差。为了解决这个问题,本文指出组合泛化的核心在于将语言看作某种代数系统,通过学习表达式来达成模型的组合泛化。在该思想的指导下,本文提出一种新颖的记忆增强的神经模型LANE,该模型在SCAN上取得了相当好的效果。

刘乾:北京航空航天大学与微软亚洲研究院联合培养博士,主要关注在上下文建模、语义解析、组合泛化等话题,目前以第一作者身份在ACL, EMNLP, NeurIPS等会议发表若干论文。

一、研究背景

组合泛化能力

人类天生具有组合泛化的能力,这体现在自然语言和程序语言中。正如语言学家乔姆斯基所言:“有限资源,无穷运用”,人类可以动态重组现有的原子语义。同样,程序语言的组合性,也使其具有无限空间。

在认知心理学中,组合泛化实际是一种能力,将简单的元素重组来理解全新的句子。例如,给定左侧这4个人造单词及其对应的颜色系列,人们可以将原子语义重新组合,从而轻易推断出新的例子“lug kiki wif”对应的颜色系列。

两大数据集:SCAN和CFQ


2018年,纽约大学和Facebook的科学家们就提出了一个 benchmark——SCAN。它是一个合成的数据集,要求模型把输入的自然语言命令,翻译成对应的导航指令。比如自然语言“run twice”,对应的程序语言是“RUN RUN”。

表面上看,这是个非常简单的合成的任务,如果用现有的深度学习模型训练,随机划分训练集和数据集,应该达到相当高的准确率。然而实验表明,该翻译模型在组合泛化方面并未取得令人满意的效果。尽管训练集里出现过“run twice”和“jump and walk”,模型却无法有效重组来理解“run and jump twice”这类复杂句子。


CFQ数据集是另一个更真实的场景,主要评测KBQA系统,即从自然语言生成SPARQL语句的过程。当然,为了简化模型本身的复杂度,将涉及的具体名词做了匿名化,比如图中的M0、M2其实代表一些具体的实体。

数据集的组合性约束划分

科学家们发现,如果从组合性的角度对数据集划分做出约束,现在的深度学习模型的效果会变得极不理想。有三种数据集划分的方式:一是“Add Jump”,二是“Around Right”,三是“Length Generalization”。“Add Jump”是指训练时jump只是单独出现、没有相关的组合,而测试时都是关于jump的复杂组合。“Around Right”是指训练时从未见过包含around right短语的句子,而测试时全都是包含around right短语的句子。“Length Generalization”是指训练时,模型从未输出超过24个动作的序列,但测试时序列长度可能会超过24。

我们刚刚介绍,SCAN是以人的智力来操控的组合性约束划分,CFQ则用了更加自动的算法,其中有两个要点:

第一,在训练集和测试集中,原子语义的分布一定是类似的。

第二,不同组合在训练集和测试集的分布不同。

我们可以把整个SCAN数据集的分布画成一个流形,可以发现jump就在线条外面,也就是说它是一个分布外的token,而我们的模型希望能够泛化到这些蓝色的点上。相比之下,CFQ不是人为先验划分,它的分布就更加复杂了,尤其是下面这张图中组合的分布几乎没有重合的地方。

深度学习模型缺乏组合泛化性


其实,组合泛化是当前一个非常火的话题,从18年开始提出了各种各样的数据集测试模型的组合泛化能力,并且涌现了CGPS、Meta Seq2Seq等方法来解决分布外的泛化。


但是,我们现在的深度学习模型是缺乏组合泛化性的,下面表格是在SCAN上评测的结果,表中绿色部分是指训练时没有任何额外资源,也就是训练时没有任何数据增强或者特定数据集的规则;蓝色部分是指训练时带有额外资源。但我们发现两种情况下,当前的深度学习模型都没办法成功解决SCAN上所有组合性的挑战。


为什么机器学习系统无法具有人类的组合泛化能力?我们认为当前的基于神经网络的模型所做的,只是从原领域的实例映射到目标语言的实例,而没有触及组合性的关键因素。实际上,我们可以把语言本身当作一种代数系统,这种代数系统能够被所谓的符号函数和变量槽所建模,也就是我们这篇论文的核心:解析表达式(analytical expression)。

二、模型构建

解决方法:学习解析表达式


我们的模型所学习的,实际是从源语言表达式到目标语言表达式的映射,比如$x twice到$x $x,其中$x的位置可以放任意动词,这样就可以泛化到任何给定的新的自然语言句子上。那么,如何学习所谓的解析表达式呢?


我们来看一个简单的示意图,给定一个run opposite left after walk twice这样的自然语言句子,我们的模型会识别出run是一个变量槽,把它规约成一个变量,接下来left规约成另一个变量,接着是$x opposite $y,一步步规约下去,原自然语言的句子就可以解耦成一系列源语言领域的表达式。

然后通过符号函数,我们可以得到目标领域的表达式,再通过这种递归自下而上地填充目标领域变量的值,从而得到最终的指令序列,也就是最开始我们输入的自然语言对应的指令序列。

实现路径:带记忆的模型

了解思想后,如何进行模型构建的实际操作呢?我们提出了一个记忆增强模型来自动学习以上过程,该模型的独特性在于所有东西都是自动学习的,包括所有中间表达式的构造和映射,都是模型通过数据学出来的,没有任何中间表达式的监督信息。

模型通过composer、solver和memory这三个模块的交互来理解自然语言:比如给定一句话$x after $y twice,它首先经过composer找到一个可以规约的表达式$y twice,然后通过solver模块映射到目标领域的表达式$y $y,其中$y直接从memory模块中取值,比如此处$y对应之前存储的walk,形成具体的表达式walk walk。接下来我们把要规约的源语言领域的表达式$y twice用变量替换,得到下一个步的输入,再经过类似的步骤得到最终的输出。

我们发现整个学习过程实际上非常难,因为在这些中间的表达式上并没有任何监督信息。所以我们主要有两大挑战:

第一:composer和solver之间的$y twice这样的表达式是离散、不可导的,所以没法直接通过反向传播来学习这个过程,而是使用强化学习。
第二:在奖励非常稀疏的情况下,很难训练,所以我们采用分层强化学习和课程学习的解决方法。

分层强化学习是指把composer和solver作为不同层次的代理,图中πθ代表composer,πΦ代表solver。通过直觉可以想到,composer作为高层的代理,学习率一定要比 solver慢。课程学习则相对比较简单,它是指一种循序渐进、从简单到复杂的过程。这里我们按照输入序列由短到长来组织整个训练的流程,让模型在初期不易发散。

 三、实验结果

结果表明,我们的模型在SCAN上全部取得100%的好成绩,远胜于其他各种深度学习模型的表现。同时我们的模型是第一个在不带任何额外资源的情况下,在SCAN这个任务上能够全部解决这些组合泛化挑战的模型。


我们也做了另一个实验,因为SCAN本身并没有评测这个模型在输入的序列长度上的泛化能力,我们构造了一个新的数据集SCAN-ext。该数据集在训练时输入的序列长度就在10左右,测试时全都是长度为10到40的输入序列。可以发现基线模型的性能主要由输入长度序列的频率所决定,而我们的模型在任意长度上都能取得较好的性能。

总结

我们的论文主要通过学习解析表达式来解决组合泛化的问题。实际上,语言的组合性在于把语言视作一种代数系统,从而被解析表达式所建模,学习解析表达式的过程是对composer、solver和memory这三个模型的联合优化,这些模块之间离散的action可以由分层强化学习和课程学习的结合来缓解,从而实现优良的性能。

论文:

Qian Liu, Shengnan An, Jian-Guang Lou, Bei Chen, Zeqi Lin, Yan Gao, Bin Zhou, Nanning Zheng, and Dongmei Zhang."Compositional Generalization by Learning Analytical Expressions." Advances in Neural Information Processing Systems 33 (2020).

代码:

https://github.com/microsoft/ContextualSP

整理:涂宇鸽

审稿:刘   乾

排版:岳白雪

AI TIME欢迎AI领域学者投稿,期待大家剖析学科历史发展和前沿技术。针对热门话题,我们将邀请专家一起论道。同时,我们也长期招募优质的撰稿人,顶级的平台需要顶级的你!

请将简历等信息发至yun.he@aminer.cn!

微信联系:AITIME_HY

AI TIME是清华大学计算机系一群关注人工智能发展,并有思想情怀的青年学者们创办的圈子,旨在发扬科学思辨精神,邀请各界人士对人工智能理论、算法、场景、应用的本质问题进行探索,加强思想碰撞,打造一个知识分享的聚集地。

更多资讯请扫码关注

 

(直播回放:https://b23.tv/Bi7ZLb)

(点击“阅读原文”下载本次报告ppt)


转载:https://blog.csdn.net/AITIME_HY/article/details/112598218
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场