AAAI 2023 | 基于自监督逻辑归纳的可解释模糊时序常识推理
论文名称:Self-Supervised Logic Induction for Explainable Fuzzy Temporal Commonsense Reasoning 论文作者:蔡碧波,丁效,孙洲浩,秦兵,刘挺,王宝军,尚利峰 原创作者:蔡碧波 出处:哈工大SCIR 进NLP群—>加入NLP交流群
动机介绍
理解自然语言中与事件相交织的时间概念是理解事件演化的重要内容。人可以具有对事件的典型发生时间、发生频率、持续时间等时间属性的感知能力,同时,也能够把握好在上下文中,时间概念之间相对大小,前后顺序等依赖关系。对于机器而言,掌握这些时序常识知识,获取相应的时序推理能力,也对进行也对事件脉络构建,医疗事件时序分析,改进对话系统中时间常识一致性等下游任务有着重要的意义。
为了让模型能够掌握相关的时序常识知识以提高其在下游自然语言理解任务上的性能,前人的典型做法是,首先基于弱监督的方法(如模版匹配)从海量的自然语言文本中获取显式表达了时序常识的自然文本,然后基于富时序常识的自然文本来构建以掩码恢复为代表的自监督目标函数,对预训练模型重新训练。然而, 这种基于传统语言模型目标函数的方法存在一定的局限性。如图1(a)所示,为了在空白处填入正确的答案,模型首先要具备一定的全局推理能力,即能够根据上下文归纳出正确答案对应的时间概念与在文中所提到的“3点”之间的依赖关系(即早于)。除此之外,与传统的同样需要这种逻辑关系归纳能力的任务不同,这种推理过程存在着固有的模糊性。例如,在图1(b)所示的阅读理解型数值推理任务中,一旦模型可以正确归纳出正确的计算逻辑为对应数值的减法,即可得到正确答案(2008-2007=1)。但是在图1(b)的时序推理问题中,文中出现的“3点”是一个模糊的时间表述,模型需要理解其表示的是一天种的某个时间,而且最可能是下午的3点。因此正确答案的逻辑约束为早于("下午3点",?)决定。同时,需要注意的是,最终的答案本身也并非一个确切的结果,在一定的模糊的时间区间内的时刻均是合理的。然而当前时序推理模型往往仅仅是隐式的对上下文进行编码,使其并不能够具备这种模糊的时序归纳推理能力,而往往依赖于浅层的表面线索来实现这种复杂推理,这使得推理的结果不可解释且并不可靠。
为此,在本文中,我们提出了一个基于自监督逻辑归纳的模糊时序推理框架LECTER。其将时序推理过程结构化为3个连续的步骤,即(1)归纳出文中的时间表达式间的逻辑约束关系(2)将文中的模糊时间概念进行具体化(3)综合利用前两步的结果以及额外的上下文信息来验证候选时间概念的正确性。具体的,其包含有3个子模块分别完成上述的3个子过程,分别是时间依赖逻辑归纳模块,模糊时间概念具体化模块和逻辑验证模块。我们通过逻辑编程语言DeepProbLog来实现逻辑验证模块。为了在对LECTER进行自监督的训练,我们引入了两个自监督的目标函数:(1)基于回归的时间概念预测损失(2)模糊时序逻辑蕴含损失。其充分考虑到了文中的模糊时间概念对推理过程带来的影响,前者用于使得模型从数据中学习相关的时间常识,后者则是使得模型能够基于蕴含来归纳出正确的时序逻辑。
背景介绍
问题定义
在文档中包含有个句子,以及个时间表达式, 这里>.代表所含有的时间表达式的集合. 本章中的时序推理任务被定义为一个多项选择任务:将原文档中的某一个时间表达式删去获得文档,给定,该任务要求模型能够从给定的候选时间表达式集中选取出所有的合适的时间表达式能够填入中被删去的时间表达式的位置,并且符合上下文语义。
例如,对于图1 (a)中的空缺,2点
,下午两点2:00 pm
都是正确的答案,但是上午8点
就不符合原文中的语义约束了。
逻辑编程语言框架DeepProbLog
概率逻辑编程[2]是一种依赖于正式逻辑(formal logic)的编程范式。由概率逻辑编程语言所编写的程序包含有一组形如 的概率事实(probabilistic facts)和一组逻辑规则,其中代表概率代表原子式。例如,如下的程序定义了在扔硬币中的概率过程
0.4 :: coin(x1,h). 0.5 :: coin(x2,h). twoHeads(X,Y) :- coin(X, h), coin(Y, h).
这里,coin
()代表事实:硬币正面朝上。
逻辑规则twoHeads
() :- coin
(, ), coin
(, )则定义了“什么代表两枚硬币都时候正面朝上”,这里, :- 代表了逻辑蕴含: 如果均为真,那么成立。基于这种概率编程语言,可以轻易的计算目标原子式的成立的概率。在本例中,针对查询原子式twoHeads
(), 程序可以自动的计算两枚硬币均朝上的计算结果,即P(twoHeads
())=0.2。
综上所述,在概率逻辑中,形如的原子表达式的概率是。而在DeepProbLog中,其将“神经网络”组件的解释为一个“神经”谓词,即在原子表达式上的概率是由神经网络来得到。而除此之外,其保留了ProbLog语言的包括语义,推理机制和实现在内所有组成部分。
如下的DeepProbLog程序定义了扔硬币的神经化拓展:
nn(coin_nn, [X], S, [h,t]): coin(X,S) twoHeads(X,Y) :- coin(X, h), coin(Y, h).
(例如可以是扔硬币结果的一张图片)输入到模型中,并映射为在上的分布 (朝上和朝下). 由神经谓词定义的事实的成立的概率由神经网络的softmax层给出。
为了对实现神经谓词的训练,DeepProbLog框架将基于神经网络的输出层所产生的神经谓词引导的概率事实,以及在逻辑程序中的其他概率事实和子句作为输入,而由ProbLog编程语言计算查询原子式的成立概率 ,这里代表神经谓词的可训练参数,代表训练数据,代表查询的原子式。由于默认查询原子式一般为真,在训练时最大化即可,该损失称之为逻辑蕴含损失。
由于ProbLog的代数扩展已经可以支持自动求导,所以,其可以将梯度信息传播到神经谓词的输出处,故其可以直接基于优化器以梯度下降的方式直接训练整个模型。
模型方法
在本文中我们提出了基于模糊逻辑归纳的事件时序常识推理方法LECTER,如图2所示。其包含有3个部分:(i)上下文编码器,用于对富时间表达式的上下文进行编码(ii)逻辑归纳模块,由时序依赖归纳器和去模糊器构成。其目标是为了能够预测上下文中的多个时间表达式之间的时序依赖关系,以及得到一个模糊时间概念的具体数值意义。(iii)逻辑验证器,其通过神经概率逻辑编程语言来表示人对于不同的时间表达式间数值关系的先验知识,来评估查询时间表达式是否与神经网络的预测结果想一致。同时我们还提出了两个自监督损失以有效的训练LECTER模型,分别是“基于回归的时间值恢复损失”和“时序逻辑蕴含损失”。
上下文编码器
我们基于预训练语言模型(如BERT/RoBERTa)来对上下文中的每个时间表达式进行编码。为构建自监督训练数据,我们从给定的输入数据中随机选择一个时间表达式,将其删去并替换为2个[MASK]符.这两个[MASK]分别代表在一个时间概念中的数值部分和单位部分。于是,对于每一条原始富时间表达式文本,我们都可以得到一个填空形式的输入。在下文中,称需要被恢复的时间表达式为“目标时间表达式”,而文中剩余的时间表达式为“辅助时间表达式“。基于该编码器对上下文进行编码后,可得到待恢复的时间表达式的表示为,而上下文中辅助时间表达式的表示为.
逻辑归纳模块
时序依赖归纳器时序依赖归纳器用于生成上下文相关的目标时间表达式与辅助时间表达式之间应满足的逻辑约束关系。在本文中,我们建模了潜在的二元依赖关系,形式上即为一种关系抽取任务,我们考查了3种关系,分别是早于、晚于和同时。对于输入的目标和辅助时间表达式和,该归纳器输出在标签集上的概率分布:
时间概念去模糊器这里我们定义在文本中,只给出其数值内容,但是单位缺失的时间概念为模糊时间概念。例如,“I wake up at 6”中,“6”代表了一个时刻,然而其单位(上午/下午)未在文中显式的给出。这使得并不能直接将基于时序依赖归纳器得到的概念间逻辑关系实例化以实现对答案数值区间的推理。为此,我们引入了时间概念去模糊器,其目标是估计模糊时间概念具体化为每个特定可行解的概率。
具体的,每个时间表达式的上下文表示都会作为其对应维度的时间单位分类器的输入:
即在给定的维度的标签集上每个标签的分数,.
逻辑验证器
逻辑验证器用于计算目标时间表达式满足神经网络所归纳的逻辑约束的概率,在训练时,该概率将会被最大化(即“蕴含损失”)。这部分由神经-符号系统DeepProbLog实现。一旦符号实例化的结构给定,DeepProblog程序既可以使得我们能够简单的基于反向传播的方式来完成训练。图3展示了一个符号实例化之后,DeepProbLog框架进行概率前向传播的过程。
训练
基于回归的时间数值恢复损失本文中我们同样以使得模型恢复文中被掩盖住的时间表达式的一个损失函数,该损失函数要求模型能够跟据给定上下文,预测出缺失时间表达式的归一化之后的数值。前人的工作[3]证明了在持续时间维度,基于回归的方式构建预训练损失能够取得良好的效果,我们将其拓展到更广泛的时序常识维度。
这里是模型预测得到的归一化值, 。其中,时间表达式归一化方法为:将时刻统一以小数时间表示,将持续时间转化为以秒为单位后的数值的对数(例如, 2 小时 7200 秒 ). 7:30 pm 19.5). )。基于均方差误差来优化:
这里就代表时间表达式的归一化后的值。
时序逻辑蕴含损失仿照DeepProbLog[4], 我们也同样使用了“蕴含损失”函数。给定训练数据和查询,模型调整其参数来最大化查询为真的概率. 可以描述为对于查询的平均负对数损失:
综上,LECTER的损失函数为:
在进行推理时,我们基于如下方式里选择最正确的答案:
这里是答案集,代表被删去一个时间表达式的输入文档。
实验
数据集及评估方式
我们在一个具有挑战性的TIMEDIAL[4]数据集上评估LECTER的性能。TIMEDIAL是一个面向复杂上下文(对话)的时序常识推理数据集。给定一个多轮对话并掩住其含有的一个时间表示式,该任务需要模型能够从4个选项中选择出合理的候选时间表达式,在4个答案中有且仅有两个答案是正确答案。只有模型能够正确的理解上下文语义与目标时间表达式的因果关系,其才有可能做出正确的预测。该数据集中总计有1.1k个数据实例,平均每段对话有11轮,包含有3个以上的时间表达式。我们使用2-best accuracy指标来评估模型的性能。在实验中,我们基于收集了在TIMEDIAL域外分布的对话数据来以自监督的方式训练LECTER模型。训练和验证集的数据量分别为97k和24k。
结果分析
表1展示了我们的方法与[1]中提出的基线方法相比的结果。我们可以得出如下结论:(1)通过时序增强的持续训练,预训练模型的表现可以得到很大提升,证明了通过弱监督方式获取时序知识信号对与时序推理任务的意义。(2)得益于对模糊时间概念的建模,LECTER模型可以大幅度的超过基线方法,取得了超过10%的提升。
消融实验
表2展示了消融实验的结果,我们证明了我们添加的两个自监督损失的有效性。如表2所示,基于回归的时间概念恢复损失,提升了约9.0%。可能的原因在于,经典的预训练的损失并不能够很好的完全建模时间常识的模糊性,在给定的语义下,在一个模糊的连续区间内的时间概念都可以是可行解。而这种连续性恰好可以很好的基于数值回归的方式进行建模。时序逻辑归纳损失也提升了2.1%,这是由于通过显式的逻辑归纳,模型获得了更强的依据潜在的逻辑关系进行推理的能力,这比隐式的编码上下文的方式往往更鲁棒可靠。
结论
在本文中,我们提出了基于模糊逻辑归纳的事件时序常识推理方法LECTER。我们将典型的时序常识推理过程建模为三个连续步骤:(1)归纳出文中的时间表达式间的逻辑约束关系(2)将文中的模糊时间概念进行具体化(3)综合利用前两步的结果以及额外的上下文信息来验证候选时间概念的正确性。利用“基于回归的时间值恢复损失”和“时序逻辑蕴含损失”,模型可以在深度理解文中时间表达式之间全局依赖的同时,有更好的针对模糊时间概念的推理能力。在TIMEDIAL数据集中,我们大幅度超越了基线方法。
参考文献
[1] TIMEDIAL: Temporal Commonsense Reasoning in Dialog. Lianhui Qin, Aditya Gupta, Shyam Upadhyay, Luheng He, Yejin Choi and Manaal Faruqui. ACL 2021
[2] ProbLog: A Probabilistic Prolog and its Application in Link Discovery. Raedt, Luc De et al. International Joint Conference on Artificial Intelligence 2007).
[3] Improving Event Duration Prediction via Time-aware Pre-training. Zonglin Yang, Xinya Du, Alexander Rush, and Claire Cardie. EMNLP Findings 2020.
[4] DeepProbLog: Neural Probabilistic Logic Programming. Robin Manhaeve, Sebastijan Dumancic, Angelika Kimmig, Thomas Demeester, Luc De Raedt. NeurIPS 2018.
本期责任编辑:丁 效
进NLP群—>加入NLP交流群
微信扫码关注该文公众号作者