点击蓝字
关注我们
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数据集,这是一个大规模的真实的自然语言问答数据集,是用