点击蓝字
关注我们
AI TIME欢迎每一位AI爱好者的加入!
自然语言处理领域有很多序列对序列任务,比如我们常见的机器翻译、语义解析、文本摘要等。目前最基本的解决方案是收集大量成对的数据,然后训练一个编码器解码器架构的模型。但是近两年来,研究者们注意到一个非常严重的问题,就是这样训练出的序列对序列网络不具备组合泛化能力。本文介绍北大硕士郭一诺在这方面的两篇工作:第一篇是从方法的角度,提出层次化偏序解码模型,来提高语言的组合泛化能力;第二篇是从数据的角度,探究单语言数据能给模型的组合泛化能力带来怎样的帮助。
郭一诺:北京大学计算语言所硕士三年级,主要关注语言解析,自然语言生成,组合泛化等话题。目前以第一作者的身份在AAAI, NeurIPS等会议发表多篇论文。
一、背景
什么是组合泛化能力?
从一个简单的序列对序列任务看起:把一个自然语言句子转换成动作序列,比如输入run twice,希望转换出RUN RUN这样的动作序列。输入jump and walk,输出JUMP WALK序列。给定前面两个例子,人类很容易推理出对应的动作序列JUMP JUMP RUN,但现有的序列对序列模型很难做到。
这个例子背后的本质是现有模型缺乏组合泛化能力。如果训练数据中存在a和b这两个原子,但没出现它们的组合,那么遇到a和b组合的情况,人类也能给出答案。组合泛化能力是人类智能非常基础的能力,即乔姆斯基说的有限资源的无穷利用。但是现有模型不具备这种能力,这就带来了极大的困扰,也是近几年来备受关注的研究点。
衡量模型的组合泛化能力
为了衡量模型的组合泛化能力,一些研究工作也随之出现。研究员们提出让训练集和测试集来自不同的分布,以这此划分数据。比如有个问题模板是who do something,在训练数据中和direct之类的动词同时出现,但在测试过程中问题模板只和produce之类的动词出现,这就保证了测试集和训练集包含相同的原子,但组合方式的分布完全不同。
我们使用了2020年 Google提出的CFQ数据集,这是一个大规模的真实的自然语言问答数据集,是用来衡量组合泛化能力的benchmark。具体的数据形式是将输入的自然语言转化成spark查询语句,spark是Free base知识图谱上的结构化查询语句。下图是一个随机划分的数据集,它能达到约98%的准确率。
但是当我们按照组合性的准则来划分我们的数据集,它的准确率就只掉到了17%、18%左右。因此,现有的语义解析任务用到的模型并不具有组合泛化能力的,或者说具有较弱的组合能力。
二、两篇研究工作
今天介绍我们在这方面的两篇工作:第一篇是从方法的角度,提出层次化偏序解码模型;第二篇是从数据的角度,探究单语言数据能给模型的组合泛化能力带来怎样的帮助。
1. 方法:层次化偏序解码
第一篇是今年发表在nips上的工作,这篇工作的原理是基于语义具有置换无关性的显著特征。
我们认为,目前的语义解析模型忽略了语义具有潜在置换环境(potential permutation environments)的特点。事实上,一些成分的不同排列所表达的是相同语义。比如给出如下的检索语句,我们可以在数据库中检索到相同的答案。尽管不同的三元组之间顺序有所变化,但进行任意置换都不会影响最终检索出来的结果。这种特性叫部分置换无关,在语义中其实扮演非常重要的角色。
举个例子,图中给出的seq2seq和seq2tree模型,红色的虚线指向produce和found,我们可以看到found是在 produce解码之后才去解码,但是本身这两个条件是平行的。由于在解码过程中将它们建模成了一个序列,使得两者具有一种无须模型学习的额外的顺序关系,被模型强制拟合。这其实是我们训练数据中不必要的统计的偏置,会增加模型训练的难度,导致无法很好地学习到模型的子结构,从而限制模型的组合泛化能力。
为了解决这个问题,我们提出在解码的过程中,将语义建模为一个偏序集(poset,partially ordered set),对于这种置换无关的成分,采用一种平行解码的方式。
我们可以把语义看成偏序集,也就是一个DAG图或者拓扑图。底下有person、edit、produce这三个token,属于一种相对独立的关系。因此,在解码的过程中,由于置换无关性,它们应该是用一种平行的方式解码,从而更好地建模每个相对独立的结构,让模型更好地理解语义本身。
具体来说,我们提出层次化的偏序解码方式(Hierarchical Poset Decoding),主要包括三个部分:左上的部分是原子预测,右上的部分是骨架预测,最底下的是链路预测。给定一个自然语言的句子,我们首先进行上面两部分的预测,这样自然而然地就利用了偏序解码的方式,这里面会进行原子的抽象,这就是hierarchical的机制。也就是说,一方面,我们会对一些具体的谓词、实体等进行抽象,从而预测偏序的骨架;另一方面,根据我们输入的自然语言进行原子成分的预测,比如预测可能出现哪些谓词和实体,最后得到一些候选的原子。
第三步是链路预测,将预测出来的骨架和原子进行拼接,这其实是一个分类任务,对可以组成的多条候选路径进行二分类,预测哪些链路和输入的自然语言是一致的。
最后我们相当于得到若干条预测出来的可行路径,再把这些链路进行拼接,可以叫做一条条叶子,每条叶子都可以拆出一条单独的路径,也就是我们在第三步预测出来的每条可行的链路。相当于对它们进行一个前缀的合并,最终得到目标偏序集合,这就是我们模型的整体框架。
我们在CFQ数据集上评估我们提出的HPD模型,实验结果表明该模型显著优于现有的解码器。
总结一下,这篇工作其实主要是从模型的角度,利用语义中偏置无关的特性,来提高语言的组合泛化能力。我们将语言的部分置换不变的特点融入模型结构中,从而避免模型过拟合于训练数据中的顺序偏置信息。另外,我们使用了层次化机制,对不同粒度的谓词、实体等变量进行多层化建模,让模型更好地理解偏序集的高层语义结构。
2. 数据:单语言数据的潜力
第二篇工作是从数据的角度探究了单语言数据的潜力,对组合泛化能力的帮助。这篇工作发表于今年的AAAI。
这篇工作的思路其实非常简单,我们知道平行数据的标注成本很高、数量也有限,单语料数据则相对容易获得。在数据资源短缺的时候,半监督学习是一种非常高效的学习方式。
因此,我们引入更多的单语言数据,利用迭代回译(Iterative Back-Translation,IBT)的技术,来提高模型的组合泛化性能。
我们训练一个从源端到目标端的正向模型,同时训练一个从目标端到源端的反向模型,反向模型和正向模型互相为对方生成伪平行数据。利用IBT在迭代过程中不断更新平台数据,质量不断提高。
这篇工作更偏向于实验分析,去探究IBT背后的一些关键影响因素。
有三个研究问题:
(1)IBT到底能否提高模型的组合泛化能力?
(2)基于实验结果,探究背后的关键因素是什么?
(3)基于探究到的关键因素,能否基于这些关键因素去进一步提高我们IBT的性能?
我们的数据集主要是前面已经介绍过的CFQ和组合泛化领域的经典测试基准SCAN。第一步的实验结果可以看右下角的这张图,结论是IBT确实可以提高模型的组合泛化能力。
第二步是探究背后的关键因素。在这之前,我们首先对迭代过程生成的尾平行数据的质量做了分析,可以看到生成的数据质量是随着训练的不断进行而不断提高的。在迭代过程中,模型会不断修复最开始的噪音和错误,最终达到收敛的结果。在大概3万个step之后,无论是Accuracy还是BLEU,都上升到较高的值,说明平行数据的质量在不断提高。
我们进一步做了两个对比实验,首先我们在这里对比了一个标准的去掉迭代过程的back-translation,使用的是一开始质量较差的伪平行数据,直接和平行数据进行混合,来训练我们的模型。第二个实验想探究随机性给模型带来的影响,因为我们知道在迭代过程中,每轮都会有新数据的生成,这其实涉及到了一个随机性的引入。我们只用平行语料去训练反向模型,持续为正向模型生成伪平行数据,这里面其实保留了迭代的过程,但是生成数据的质量是一样的,也就是用相同质量但不完全一样的数据去训练模型。
具体得到了两个实验结果,我们可以看到第一个蓝色BT是用标准的back-translation得到的结果。第二个深蓝色是随机性实验得到的结果。无论哪个实验,都会相比于baseline也就是用平行数据去直接训练模型有所提升,当然随机性带来的提升是更大的。
我们分析,背后的第一个原因主要是即使数据中有很多错误,但是带给模型更多的unseen combinations,即模型中本来没有的组合,这种正向效应大于数据本身包含的错误,所以整体还是会提升模型的组合泛化能力。
第二点关于随机性,尽管数据质量不是很高,但每一轮的数据是动态生成的,也就是说每轮生成的数据尽管都有很多错误,但这些错误并不相同,这就帮助模型不去拟合那些具体的错误偏置,而是更多地关注这些数据中共有的部分,这就会提高模型的表现。
我们提出了一种基于课程学习的IBT,帮助模型更高效地改正数据中的错误。具体做法是把数据按照难度分为k等,然后在整个训练过程中依次按照难度去增加数据,最开始加入的是最简单的数据。
我们知道简单的数据,对于模型而言,生成的数据错误也相对较少,随着训练过程的不断继续,模型的能力不断提升,就能够解决一些更难的问题。其实相比于直接去加入数据来说,它会在这种错误修正上更有效率,这是一种上台阶似的不断累积的过程。
实验结果可以看出,左边的这张图代表基于课程学习的方式,能够给迭代回译技术带来很大的帮助。右边是我们划分的数据的不同难度,可以看出对于较难的数据它的帮助是更大的,这也是符合我们预期的。
最后,总结这篇关于数据部分的、偏实验分析性质的工作。第一,实验表明迭代回译技术是能够显著提高模型的泛化能力的。第二,我们归纳出背后的三个原因:一是加入了很多未出现的组合,扩大了模型对数据分布的认识;二是整个迭代的过程中,IBT能够持续不断地提高生成伪平行数据的质量,从而更好地帮助模型提高表现;三是随机性的引入可以帮助模型不去过拟合错误偏置,从而带来较好的效果提升。基于我们分析的关键因素,我们提出了一种更高效的帮助模型修正错误的方式,基于课程学习的迭代回忆技术,帮助模型进一步提升表现。
论文链接:
https://arxiv.org/pdf/2012.04276.pdf
https://arxiv.org/pdf/2010.07792.pdf
整理:涂宇鸽
审稿:郭一诺
排版:岳白雪
AI TIME欢迎AI领域学者投稿,期待大家剖析学科历史发展和前沿技术。针对热门话题,我们将邀请专家一起论道。同时,我们也长期招募优质的撰稿人,顶级的平台需要顶级的你!
请将简历等信息发至yun.he@aminer.cn!
微信联系:AITIME_HY
AI TIME是清华大学计算机系一群关注人工智能发展,并有思想情怀的青年学者们创办的圈子,旨在发扬科学思辨精神,邀请各界人士对人工智能理论、算法、场景、应用的本质问题进行探索,加强思想碰撞,打造一个知识分享的聚集地。
更多资讯请扫码关注
(直播回放:https://b23.tv/mhgMUF)
(点击“阅读原文”下载本次报告ppt)
转载:https://blog.csdn.net/AITIME_HY/article/details/114315391