基于语义解析任务探究深度模型的组合泛化能力
点击蓝字
关注我们
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)
基于语义解析任务探究深度模型的组合泛化能力相关推荐
- 知识问答(KBQA)两种主流方法:基于语义解析和基于信息检索的方法介绍
什么是知识问答 基于知识的问答是以知识库为认知源,在知识库的基础上回答自然语言问题. 知识库(KB)是一个结构化数据库,其中包含形式<主题,关系,对象>的事实集合,每个事实都可以随附所谓的 ...
- 5分钟NLP-知识问答(KBQA)两种主流方法:基于语义解析和基于信息检索的方法介绍...
来源:DeepHub IMBA 本文约1200字,建议阅读5分钟本文介绍了知识问答的两种主流方法. 什么是知识问答 基于知识的问答是以知识库为认知源,在知识库的基础上回答自然语言问题. 知识库(KB) ...
- Transformer性能被高估?DeepMind动态评估模型的时间泛化能力
©PaperWeekly 原创 · 作者 | 王馨月 学校 | 四川大学 研究方向 | 自然语言处理 论文标题: Mind the Gap: Assessing Temporal Generaliza ...
- 我来说话你来查,智能代码新技术!语义解析专场干货
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 一直以来是,语义解析(Semantic Parsing) 都是自然语言处理领域一个非常基础且重要的研究问题.通俗来讲,语义解析旨在让计算 ...
- 深度学习WideDeep模型——记忆能力和泛化能力的综合
文章目录 Wide&Deep前言 模型的记忆能力与泛化能力 Wide&Deep模型的结构 Wide&Deep前言 Wide&Deep模型的主要思路正如其名,是由单层的W ...
- 深度模型从研者 眼里的 似然估计 Hessain 海森矩阵 Fisher Information (费雪信息)...
2019独角兽企业重金招聘Python工程师标准>>> 深度模型的训练的基本依据是最小化模型拟合数据的误差.旨在不仅知其然(如何构建和训练一个深度模型),还应知其所以然(为什么这样训 ...
- ICLR2020 | 谷歌最新研究:用“复合散度”量化模型合成泛化能力
2020-03-11 18:13:47 据官方消息,ICLR 2020会议将取消线下会议,并于4月25日-30日线上举办虚拟会议.本届会议共有 2594篇投稿,其中 687篇论文被接收(48篇oral ...
- 基于Go的语义解析开源库FMR,“屠榜”模型外的NLP利器
(由AI科技大本营付费下载自视觉中国) 作者 | 刘占亮 一览群智技术副总裁 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 如何合理地表示语言的内在意义?这是自然语言处理业 ...
- 基于深度学习实现语义识别和问答判断模型及算法优化-制造业-CSDN公开课-专题视频课程...
基于深度学习实现语义识别和问答判断模型及算法优化-制造业-1685人已学习 课程介绍 本次课程,邀请IBM研究院讲师就制造业语义识别及判断模型搭建.QA模型.词向量.句子量化.POWE ...
最新文章
- Rman--备份命令
- linux find 删除文件夹,linux中find与rm实现查找并删除目录或文件linux操作系统 -电脑资料...
- JAVA中的命令模式实例教程
- THINKPHP中使用swoole
- css除法,CSS_关系数据库 除法,假设有两个关系,R(a,b,c)和T(b,c - phpStudy
- 实现DRBD的简单配置
- 用极大化思想解决最大子矩形问题
- 在git提交时输错密码,怎么办?
- 《并行计算的编程模型》一2.3.2 段信息
- 计算机教室布线施工方案,最新计算机教室施工方案.docx
- 突发奇想!自动化测试在测试过程中该怎样提升效率?
- 关于微软Bing搜索语言无法更改的问题
- 在线绘图网站文图使用教程
- 带有数字化伪装外观,全新ID.7轿车即将全球首发
- 通读cheerio API
- 使用Maya和Substance Painter制作一辆越野赛车(1)
- 新恒结衣为什么是中国程序员共同的老婆?
- 云计算、大数据和人工智能的由来和关系
- Android蓝牙初始名称修改(高通平台)
- 网络编程 socket函数参数介绍