博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
增量关系抽取中的灾难性遗忘与顺序敏感性
阅读量:2242 次
发布时间:2019-05-09

本文共 5954 字,大约阅读时间需要 19 分钟。

点击蓝字

关注我们

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

连续关系抽取是从非结构化文本中逐步抽取新事实的一项重要任务,该任务面临两个重要的挑战,即灾难性遗忘和顺序敏感性。本报告中我们将介绍一种新的课程元学习框架来解决上述两个问题。通过将元学习和课程学习相结合,快速调整模型参数以适应新的当前任务并减少先前任务对当前任务的干扰。框架内我们设计了一种新的关系表示学习方法,用于量化任务的难度。此外,我们还提出了一种新的基于难度的模型顺序敏感性度量指标,用于评估模型的鲁棒性。在三个基准数据集上的综合实验表明,我们提出的方法优于现有技术。

吴桐桐:东南大学-Monash大学联合培养博士生,中方导师漆桂林教授,澳方导师A.Prof. Reza Haffari、Dr. Yuan-Fang Li。主要研究方向为面向少样本或增量场景的关系抽取方法。本报告论文的部分工作在平安金融壹账通Gamma Lab研究院实习期间完成。

一、背景

关系抽取任务是从无结构文本中抽取结构化知识,知识的具体表现形式为三元组

如图所示,从摘要中可以抽取relation extraction和information extraction之间具有构成成分的关系,最后的组织形式是关系抽取作为头实体、信息抽取作为尾实体、以及它们的关系标记为r。

增量关系抽取和普通关系抽取有什么区别?传统的关系抽取,通常是从零开始训练、训练阶段可以利用完全的训练语料库,进入测试阶段后模型往往只针对已经学习过的类别进行预测。但实际应用中,抽取任务是源源不断到达的,我们需要不断让模型学习一些新的类别。由于存储资源的限制和计算效率的要求,关系抽取器不能访问到以前看到的任务中的所有训练实例、也无法每遇到一个新的任务就重新训练一个模型。这两个因素导致关系抽取模型可能会出现一定的遗忘现象。

为了更好的理解增量学习中所面临的两个挑战,我们类比人类的学习给出了两个例子:

关于第一个问题灾难性遗忘,假设我们把自己的心智调整到小学阶段,学习如下三个任务:先学习乘法、再学习加法、然后学习除法,最后期末考试。很可能小学生会把最后一个刚学习的任务也就是除法记得更清楚,但学期之初学习的乘法、加法就已经忘记了。

这个现象在机器学习训练中称为灾难性遗忘:模型只记得当前任务的知识,而忽略或遗忘了之前已经学习过的任务的知识。这是我们在考试阶段的预测性能下降的一个简单事例。

关于第二个问题顺序敏感性,其含义是模型针对不同任务的到达顺序,性能波动较大,比如按照加减乘除的顺序学习,学习效果就好,期末可以考90分;按照乘除加减的顺序学习,知识就不容易掌握,期末只能考59分。这个问题在增量学习研究中被长期忽视,但并非不重要,比如1)在医学领域一个简单的AI伦理问题,模型学习不同顺序的疾病之后,可能对于一个病例或病患的疾病预测会出现较大的波动,或者2)在知识图谱的构建过程中,如果学习关系的顺序不一样,可能最后抽取得到的知识图谱的质量也会时高时低。3)在一般的增量学习算法的评估标准问题上,现在的方法一般是随机选取给定任务的任意序列来测试模型性能,但这种方法并不能做到真正的公平公正。学习顺序引起的性能差异,往往会大于模型改进带来的性能提升。

 

本文我们有以下三个主要贡献。第一,针对上述的增量关系抽取中的这灾难性遗忘与顺序敏感性问题,我们提出了一种新的基于课程元学习框架。第二,在框架内内部,我们提出了一种新的关系表示学习方法,用于量化每个关系抽取任务在构建课程时的难度,从而合理地调度任务的学习顺序。第三,我们针对上述两个问题的出现形式,以及在增量关系数据中出现的原因,提出了新的量化指标并进行了详尽的分析实验。

二、文献回顾

我们列举了增量学习方法以及增量关系抽取相关的既有工作。如果大家感兴趣,可以找到后面的链接进行阅读。

三、针对两个问题的实验过程

我们先回到增量关系抽取这一核心话题,介绍一下基本的场景和知识。这张图是我们的基准方法和模型,左半部分是基于经验回放(Memory-replay)的增量学习的算法流程图,蓝黄两色分别区分模型的增量学习阶段和随时可能进行的预测阶段,虚线表示当前阶段模型不可见的数据。

当t=0时,模型只能在Support Set 0这部分的训练集上训练,由一个外置的memory存储之前已经见过的任务实例的结果,方便获取之前学习过的实例。初始memory是空的,训练完Support Set 0后采样一部分数据保留在memory里,这就完成了第一个任务的训练。在训练后续任务时,之前见过的那些数据已经变成了虚线表示,后续没有来的数据也是虚线表示。模型当前可以见到的,只有Support Set 1里面的训练集以及memory中保留下来的少量关于task 0的实例,模型会进行复习,并学习一些新的知识。

图的右半部分是增量关系抽取模型的基本结构。在这里,我们把关系抽取问题理解成一个基本的文本分类问题,给定句子实例x以及句子中等待抽取关系的实体对,我们需要模型预测关系的类型。这是类似于孪生网络的结构,模型分别对实例x以及所有的候选关系y进行encoding,然后计算这两个encoding之间的相似性,最后根据得分去判断当前的实例到底属于哪一个类别。每个任务在训练阶段的损失函数,是如图所示的triplet loss。

3.1 第一个问题:是什么?

我们首先回答第一个问题:在SoTA模型中,灾难性遗忘以及顺序敏感性问题究竟是什么?

针对这个目的我们设计了如下实验,所基于的模型是EA-EMAR,所基于的数据集是Fewrel,该数据集包含80个关系,每个关系有700个标注实例,被分成了训练集、测试集两个部分。

 

我们在实验阶段根据关系的embedding进行聚类,将80个关系聚类成了10个不相交的task,每个task包含了数量不等的关系。我们可以观察右侧这个彩色的表格,第一行的task ID代表了每一个具体的关系,第二行的run ID代表了不同的实验组,每一种颜色代表了一组实验,这个表格中数字是模型在这一组实验训练(包含10个task)完成后,对每一个task的表现进行分别预测以及总体预测的准确率。P0到P9代表在当前序列中,每个task到底出现在序列中的什么位置。

平均准确率和全局准确率的计算方法如图所示,平均准确率简单来说就是每个task分别进行预测,然后对这些task上的预测结果取平均。全局准确率是所有task的测试集的所有实例,放在一起直接进行评测后的平均准确率。

如果横向对比每一列的话,可以发现当不同的task在学习的过程中出现在不同位置的话,性能的表现是不一样的。比如T4也就是第5个task出现在p0位置时准确率是100%,出现在P9位置时准确率也是100%。所以它似乎针对序列中的不同位置,性能不会出现任何的下降。相反,T1、T5这些task如果出现在P0位置,学习完一组实验后,性能会下降到50%左右。

也就是说不同的task,针对增量学习出现遗忘的幅度是不一样的,这导致在最后阶段观测到的accuracy的表现相差极大。比如当T4 task出现在1号位置时最终的平均准确率是79.5,而T6 task出现在1号位置时平均准确率是62.8。如果顺序不一样,此时模型准确率的差值在17个点左右,远远大于一些SoTA模型带来的性能提升。而且我们根据表格分析得到结论是,顺序敏感性问题其实一定程度上和不同任务的不均衡的灾难性遗忘问题有关

3.2 第二个问题:为什么?

那么我们接下来分析原因,包括两个子问题:一、灾难性遗忘问题出现的一般性因素到底是什么?从前一个表格可以看出如果纵向对比每一行,总体的趋势是任务出现越靠前,模型的准确率可能会越低,出现越靠后的表现可能会越好。我们希望能够通过一定的分析得到,为什么会出现这一个大的趋势。二、为什么每个task遗忘的幅度是不一样的,有什么特殊性因素?

关于一般性因素,我们设计了如下实验。通过调节在 memory复习的过程中,每个task究竟保留多少个instance,最后得到的实验结论是,当模型针对每个task保留的记忆样本数越多时,肯定效果就越好,这当然也很符合我们的直觉。但如果在保留同样多的 memory instance的前提下,训练集的规模越大,反而性能会出现一定的下降,也就是说memory和训练集的比例会影响到最后预测的准确率。所以一个一般性因素是,模型对于记忆样本会存在过拟合的现象

对于特殊性因素,即每个task遗忘的幅度不一样的原因,我们设计了如下的可视化实验。对每个类别在向量空间中进行了可视化的展示,我们发现task 4处在整个向量空间中一个相对边缘的位置,而且task 4是以紫色为标记的话,整个task就只包含了一个关系,所以在这个 task上准确率会相对来说比较高,由于task本身比较简单。而T6和T5这些遗忘幅度比较大的类别,可能和其他任务之间出现一定的重叠,或者和其他任务会存在相互影响的现象,换言之就是这些任务比较难。那么解决方法是在任务输入的同时,可以通过评估任务的相对难度,并且引导模型有意识地区分之前已经学习过的与当前任务相似的类别,去提高模型的最终性能。

3.3 解决方案

那么,如何设计这个结构,来解决我们上面提出的两个问题呢?

我们主要在原有训练流程中加入了如下的KB-C结构,即Knowledge-Based Curriculum,基于知识的课程规划器。它起到的作用是在模型复习之前的样本的过程中,调节要复习哪些样本以及复习的顺序,从而让模型能够和之前见过的最相似的类别进行对比。同时我们引入了元学习的机制,也就是说之前的样本其实对于当前的任务学习有一定的帮助作用。要最大化这种知识迁移的能力,我们需要调整学习顺序,让模型先学习那些可能不那么相关的实例,最后去复习那些最相似的实例,从而能够在最相似实例的训练基础上学习一个新的task。

相比于传统的有监督学习,元学习的一个主要特点是在训练的过程中,我们把每一个mini-batch当做了一个小的 main task,然后模型会在每个batch上得到一个参数,最后通过一个基于元学习算法的机制,把这个参数合并成了最后更新的参数。我们这边提出了一个核心结构叫Curriculum-based Memory Replay,涉及到三个步骤,第一个步骤是针对每个task分配一个难度,然后是基于难度从memory中选择需要复习的实例,最后对这些选择出来的实例进行排序,来决定最后复习的顺序。

我们给出的难度计算公式如下所示,核心思想是计算每两个任务之间关系的embedding的相似度,最后得到两个 task中关系的平均相似度。

如何得到这个关系的embedding,我们提出的一个方式是基于关系在知识图谱中的上位词的相似度。每个关系在知识图谱中包含着头实体和尾实体,比如父子关系的头实体和尾实体的上位词都是一个人,但不同的是头实体的上位词肯定是一个男人,尾实体的上位词则对性别没有要求。类似的,比如首都的关系,头实体是一个国家,尾实体是一个城市;雇佣的关系,头实体是一个公司,尾实体是一个员工。

由于实体数非常多,但每个关系包含的概念其实相对来说比较少的。最后关系的embedding其实是在这个关系的的概念下,头实体部分的向量embedding以及尾实体的embedding的拼接所组成。我们以此来计算两个task之间关系的相似度。

最后我们基于一定的方法从记忆样本memory中选择和当前关系最相似的一些关系,把保留下来的实例进行复习。

四、实验结果

评估实验结果即模型表现,用到的基准模型是我们在前面的相关工作中提到的几篇文章,其中需要重点关注的是清华大学刘知远老师的组在ACL20上提出来的EMAR。我们在三个数据集上进行了测试,包括Lifelong - Fewrel,Lifelong - SimpleQuestions和Lifelong - Tacred。

我们的实验主要包含如下三个指标,前两个指标代表模型的准确率,最后一个指标用来评估模型的顺序敏感性,也就是模型在测试不同顺序的序列时,性能的浮动范围到底有多大。

对比我们提出的模型CML(Curriculum-Meta Learning)和EA-EMR关于顺序敏感性分析的表格,结论是我们的模型显著低于EA-EMR,尤其是通过最后一行的标准差。对比CML和MLLRE也是如此。

最后分析我们提出的基于知识的课程学习模块到底是否起到作用。具体的分析方法是基于我们提出的难度公式,计算出每个task的难度作为先验难度

同时我们提出了另外一个指标叫Average Forgetting Rate,即每个task出现在不同序列不同位置时,平均准确率之间的差值除以上一个位置的准确率得到的比率,我们称之为平均遗忘率。它代表了任务的后验难度,即模型在学习任务之后,觉得这个任务到底是简单还是容易。我们发现应用了基于知识的课程学习模块后,两种难度皮尔逊相关系数降低了,也就是应用了我们方法之后,两种难度之间不那么相关了,有效避免了之前和任务难度相关的情况出现。

五、总结

我们提出了增量关系抽取任务,其中包含灾难性遗忘以及数据敏感性这两个问题。它们背后有两个因素:一般性因素是过拟合,特殊性因素是任务相似性。我们的两个核心创新点在于,提出CML框架,以及一个基于知识的课程规划器KB-C。最后,增量学习或者数据敏感性问题在NLP中是一个比较新的课题,相关研究并不多,对于大家来说这是一个很好的研究切入点。

 

论文链接:

https://arxiv.org/abs/2101.01926

整理:涂宇鸽

审稿:吴桐桐

排版:岳白雪

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

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

微信联系:AITIME_HY

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

更多资讯请扫码关注

 

(直播回放:https://www.bilibili.com/video/BV1X54y1h7qm?share_source=copy_web)

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

转载地址:http://tzwdb.baihongyu.com/

你可能感兴趣的文章
Struts2中的session、request、respsonse获取方法
查看>>
如何理解MVC模型
查看>>
SpringMVC中乱码解决方案
查看>>
SpringMVC中时间格式转换的解决方案
查看>>
post和get请求相关知识点
查看>>
关于try finally 中的return语句的问题
查看>>
RequestBody/ResponseBody处理Json数据
查看>>
springmvc请求参数获取的几种方法
查看>>
在eclipse中创建和myeclipse一样的包结构
查看>>
Java中的IO流
查看>>
java中的关键字
查看>>
如果某个方法是静态的,它的行为就不具有多态性
查看>>
优化Hibernate所鼓励的7大措施
查看>>
Java 8系列之重新认识HashMap
查看>>
HashMap 、 ArrayList、String 重写了equals方法 而Object类(比如User)没有重写
查看>>
Servlet的生命周期
查看>>
Object中的getClass()返回的是当前运行的类
查看>>
加载驱动程序的方法
查看>>
深入理解java异常处理机制
查看>>
object类的基本方法
查看>>