1. 引言
赋予机器自动推理的能力是人工智能领域长期以来追求的目标之一[1]。现有的生成式语言模型在多跳推理和逻辑推理等任务上取得了较好的表现,但这些任务往往只关注最终的答案,忽视了模型的推理过程[2][3]。为了解决这个问题,Clark等人[4]提出一种知识推理任务的新范式(如图1所示),给定自然语言形式的一个假设以及一组知识集,要求模型为假设提供推理步骤,从而解释模型如何从知识集的子集中通过推理生成假设。推理步骤被组织为树状结构,其中每一个非叶子节点都代表一个推理步骤。
已有方法可分为一步推理方法[5][6]和逐步推理方法[7]-[10]。逐步推理方法选择相关的知识逐步结合,利用推理的组合性,使模型更容易学习并推广到长推理[8]。然而,由于自然语言固有的模糊性,每个推理步骤的搜索空间比简单的合成任务要大得多,模型需要对新的例子进行大量的组合泛化[11],这是现有最先进的大型语言模型都难以胜任的能力[12]。
为了应对这一挑战,本文提出一种逐步推理方法ProofsNavigator。首先,给定目标假设以及一组已知的知识集,ProofsNavigator使用Entailer模块通过Beam搜索生成多个候选推理步骤;然后,ProofsNavigator通过Verifier和Navigator模块分别对候选推理步骤的有效性以及跟假设的相关性进行验证,挑选高质量的推理步骤;最后,将所选择的推理结论加入知识集中以进行下一轮循环。通过这种迭代的方法,ProofsNavigator逐步生成完整的推理树。该方法能指引模型学习在庞大的搜索空间之中朝着假设的方向进行推理,最终只生成与假设相关的推理步骤,避免了模型在推理过程中陷入无效或不相关的推理。通过ProofsNavigator的引导,模型能够更加精准地判断推理的方向,并以此生成更加精确和有针对性的推理步骤,从而提高了推理的效率和准确性。
在EntailmentBank数据集上的实验结果显示,ProofsNavigator在三个难度依次递增的任务分别达到了40%、35.6%和7.1%的准确率,比之前最好的对比方法分别高出1.1%、2.3%和0.2%。此外,在仅使用10%的训练数据与21%的模型参数的情况下达到了26.5%的准确率,比参数量达110亿的大型模型高0.9%,可见该方法在标注数据稀缺的情况下仍有较好的表现。
本文主要贡献总结如下:
1) 本文提出了ProofsNavigator,一种逐步知识推理方法,该方法可以指引模型学习在庞大的搜索空间之中朝着假设的方向进行推理。实验结果显示ProofsNavigator的性能优于目前最优的对比模型。
2) ProofsNavigator在小样本数据上表现优秀,在数据有限的情况下表现良好,仅使用10%训练数据与21%的模型参数,性能超过了参数量达110亿大模型。
Figure 1.A Example of generating an entailment tree based on assumptions and knowledge set
图1.根据假设和知识集生成一颗推理树的例子
2. 方法
本文提出的基于ProofsNavigator的文本知识推理方法的框架图如图2所示,从图中可以看出,给定假设H和知识集C,ProofsNavigator在每次迭代中,首先基于一个状态Statei,使用知识推理模块Entailer执行单步前向推理,并通过Beam搜索方法生成n条中间知识i,其中每个结论都对应着一个推理步骤。其次,使用推理验证模块Verifier来验证推理步骤的有效性以及通过推理引导模块Navigator检验当前推理的方向。最后,将推理过程有效且推理方向正确的中间结论添加进知识集C中,得到新的状态Statei+1,依次进入下一轮的迭代推理。
Figure 2.Framework diagram of a bootstrap interpretable knowledge reasoning method proposed in this article
图2.本文提出的一种基于引导的可解释知识推理方法的框架图
2.1. 任务定义
如图1所示,该任务的输入包括假设H以及一系列知识的集合
,H和si是自然文本形式的知识。根据任务难度的不同,si可以分为与H相关的知识和与H不相关的知识。该任务期望模型的输出是以蕴涵树T的形式所组织而成的推理过程,该推理过程可以表明模型如何根据C中的知识推理得到H。T的根节点是H,叶子节点si是模型在C中选择的相关知识,中间节点i是模型在推理过程中生成的新知识。
每个非叶子结点都代表着一个推理步骤Step,该节点由其孩子节点推理而得。如果模型所输出的推理树的根节点是H且所有推理步骤都是正确的,则T被认为是有效的。本文将数据集中人工注释的蕴涵树标记为Tgold,将其叶子节点集表示为Cgold。
2.2. 算法模型
2.2.1. 知识推理模块
Figure 3.Three inspection mechanisms and their representative meanings
图3.三种检验机制及其代表的含义
在本文中,我们提出了Entailer是一种序列到序列的生成式模型,负责根据给定的假设和知识集合生成新的知识。模型将假设、知识集以及迭代过程生成的中间结论串联作为输入,输出则是新的中间结论,与输入的知识一起构成新的推理步骤。
Entailer是一个序列到序列的生成模型,其输入是线性化的状态Statei,输出是中间结论以及代表该其置信的分数Pscore(如图3所示)。T中的任意一个非叶结点都代表着一个推理步骤,每个推理步骤都可以通过以下形式抽取出对应的训练数据(以图1为例):首先,从非叶子节点的孩子节点推理得到该节点的过程,例如(i1, i2)→H、(s1, s2)→i1和(s3, s4)→i2。其次,在此基础上,通过将前提中的节点替换成对应的孩子,得到新的训练数据。例如将(i1, i2)→H可分别替换i1、i2得到(s1, s2, i2)→H、(i1, s3, s4)→H和(s1, s2, s3, s4) →H等。
在推理过程中,Entailer可能会生成语法上错误的推理步骤。以图1作为示例,首先,模型可能会超出所提供的知识集,使用模型内部的知识进行推理,例如(snew, s1)→i3。其次,模型的推理步骤可能不完整,例如(s1)→i1。此外,模型可能仅通过复制前提作为结论,而非进行推理。例如(si, i2)→s1。本文通过Beam搜索在每次迭代中生成多个推理步骤,然后筛选掉有明显错误的推理步骤,如语法错误或格式错误等。
2.2.2. 推理验证模块
尽管本文根据一定的规则筛选掉了部分明显错误的推理步骤,但是模型的输出仍存在着无效或者低质量的推理步骤。为了进一步提高推理步骤的有效性和质量,参考NLProofS[9]的设置,本文通过微调预训练语言模型来实现推理验证模块Verifier,该模块输出一个处于[0, 1]之间的分数Vscore(如图3所示),代表着推理步骤的有效性。
2.2.3. 推理引导模块
随着输入知识数量的增加,整个推理搜索空间将迅速增长,并且树中也会出现复杂的分支。为了确保每一步推理都逻辑正确且与假设紧密相关,本文引入了推理引导模块Navigator。该模块的主要作用是评估模型推理过程的中间结论与假设的相关程度,实现在庞大的搜索空间中指引模型的推理方向,确保模型的推理方向与假设保持一致。
本文通过微调预训练模型来实现Navigator。模型以(中间结论,假设)的句子对作为输入,输出一个属于[0, 1]之间的分数Rscore(如图3所示),从而指示中间结论与H的相似程度,即代表着模型推理的方向。训练数据的构建方法如下:设Tgold是人工标注正确答案的推理树,当前节点node的深度为dnode,node的祖先节点的深度记作dance。本文计算该节点与其祖先结点(包括根节点)的深度差
:
(1)
然后采用
的倒数作为数据的相关性分数Rscore(如图3所示):
(2)
其中,Rscore反映了当前节点与其祖先节点(或假设)的相关性,它与两个节点间的距离呈现单调非递增的关系。
3. 实验设置
3.1. 数据集
Table 1.EntailmentBank datasets
表1.EntailmentBank数据集
Split |
训练集 |
开发集 |
测试集 |
总计 |
推理树数量 |
1131 |
187 |
340 |
1840 |
单树最大推理步骤 |
17 |
15 |
11 |
17 |
总推理步数 |
4175 |
597 |
1109 |
5881 |
为了评估Navigator的证明生成能力,本文参考NLProofS[9]的设置在EntailmentBank1数据集上进行实验。EntailmentBank是第一个支持以推理树形式进行知识推理的复杂数据集,由专家注释构建而得,更具挑战性。如表1所示,EntailmentBank包含有1,840棵蕴涵树,其中1,313棵用于训练,187棵用于验证,340棵用于测试,每棵树都对应于ARC数据集的一个问题,平均包含7.6个节点和3.2个推理步骤。根据C范围的不同,每棵树可分为三个越来越困难的任务:
Task1:C = Cgold
Task2:C = Cgold+ 15~20条干扰知识
Task3:C = Ccorpus
在Task1中,C没有任何干扰知识,即C恰好由基本知识(即黄金树的叶子结点)组成。在Task2中,C由基本知识以及干扰知识组成,始终保持为25条句子。在Task3中,C是一个源自WorldTree V2的大型语料库,拥有12,000条知识。本文对这三个Task都进行评估。本文的方法直接适用于任务1和任务2。对于任务3,由于模型输入长度的限制,无法将整个语料库作为模型输入。为了解决这个问题,EntailmentWriter方法为每个假设检索25个相关的知识,本文使用与EntailmentWriter方法同样的知识集进行实验,并使用Task2中训练得到模型评估其在Task3上的性能。
3.2. 评价指标
本文使用EntailmentBank开发的官方指标对EntailmentBank进行评估。该算法先通过Jaccard相似度将预测树Tpred中的节点与黄金树Tgold的节点进行对齐,然后通过以下几个指标对预测树的质量进行评估:叶子结点、推理步骤和中间结论。
1) Leaves:通过计算叶子节点spred和sgold之间的F1分数从而评估Tpre是否使用了正确的叶子节点。
2) Steps:通过比较推理步骤steppre和stepgold之间的F1分数从而评估蕴涵树结构中的推理步骤是否正确。
3) Intermediates:通过对比中间结论ipred和igold间的F1分数从而评估模型生成的中间结论的准确性。如果BLEURT-Large-512分数(衡量模型生成的中间结论ipre与相应的黄金标准igold之间的一致性)超过阈值0.281,中间结论被认为是正确的。
对于上述三个指标,如果F1得分等于1,则对应的AllCorrect得分被赋予1;否则,AllCorrect得分为0。当且仅当所有叶子、步骤和中间结论都正确时,Overall-AllCorrect指标得分为1。这是一个严格的指标,因为Tpred结果中的任何错误都将导致Overall-AllCorrect得分为0。
3.3. 实验环境
本文通过微调flan-T5-large预训练模型[13](7.83亿参数)来实现Entailer模块。Verifier模块和Navigator模块通过微调预训练的RoBERTa模型[14](3.55亿)来实现。
对于Task1和Task2,本文为不同的实验分别训练了单独的Entailer、Verifier和Navigator模型块。而对于Task3,本文重新使用Task2中训练好的模型,无需额外训练。
Pscore、Vscore和Rscore均采取0.4:0.3:0.3的比例进行加权求和。
ProofsNavigator的所有实验均在配备2个NVIDIA GeForce RTX 3090 (24G显存),128G内存的机器上进行。本文使用AdamW优化模型作为优化器,学习率从0线性升温到最大值,然后按照cosine schedule衰减。不同Task的超参数分别根据验证数据进行调整。最优的模型根据验证集上最佳的“Overall-AllCorrect”指标所选择。
4. 实验结果与分析
4.1. 知识推理实验
如表2所示,对于所有三项Task,ProofsNavigator在最严格的Overall-AllCorrect指标上均取得优秀的成绩。以Task2为例,首先ProofsNavigator总体上生成了更正确的推理,将Overall-AllCorrect从20.9%提升至35.6%。其次,ProofsNavigator更忠实于推理步骤进行推理,而不是借助外部知识,将Steps-AllCorrect从22.9%提升至37.7%。第三,ProofsNavigator能生成更正确的中间结论,将Intermediates-AllCorrect从28.5%提升至38.5%。
与拥有110亿参数的EntailmentWriter模型相比,ProofsNavigator仅使用21%的模型参数便在Task1、Task2、Task3的Overall-AllCorrect指标上以绝对值高出4.7%、10.0%、4.2%,这表明了ProofsNavigator具有高效的性能以及优秀的泛化能力,能够在较少的参数限制下,更好地捕捉和理解数据中的模式,在多个Task上实现优异的表现。
本文注意到所有方法在Task3的表现上都不佳,主要原因是官方数据集中所检索的知识可能不包含Cgold所需的所有知识(68%的情况)。
Table 2.Knowledge reasoning experiment results
表2.知识推理实验结果
Task |
Method |
Leaves |
Steps |
Intermediates |
Overall |
F1 |
AllCorrect |
F1 |
AllCorrect |
F1 |
AllCorrect |
AllCorrect |
Task1 |
EntailmentWriter |
98.7 |
86.2 |
50.5 |
37.7 |
67.6 |
36.2 |
33.5 |
EntailmentWriter (11B) |
99.0 |
89.4 |
51.5 |
38.2 |
71.2 |
38.5 |
35.3 |
NLProofS |
97.8 |
90.1 |
55.6 |
42.3 |
72.4 |
40.6 |
38.9 |
ProofsNavigator (ours) |
98.1 |
90.3 |
57.7 |
43.24 |
73.2 |
42.1 |
40.0 |
Task2 |
EntailmentWriter |
84.3 |
35.6 |
35.5 |
22.9 |
61.8 |
28.5 |
20.9 |
EntailmentWriter (11B) |
89.1 |
48.8 |
41.4 |
27.7 |
66.2 |
31.5 |
25.6 |
NLProofS |
90.3 |
58.8 |
47.2 |
34.4 |
70.2 |
37.8 |
33.3 |
ProofsNavigator (ours) |
90.0 |
58.2 |
49.3 |
37.7 |
69.9 |
38.5 |
35.6 |
Task3 |
EntailmentWriter |
35.7 |
2.9 |
6.1 |
2.4 |
33.4 |
7.7 |
2.4 |
EntailmentWriter (11B) |
39.9 |
3.8 |
7.4 |
2.9 |
35.9 |
7.1 |
2.9 |
NLProofS |
43.2 |
8.2 |
11.2 |
6.9 |
42.9 |
17.3 |
6.9 |
ProofsNavigator (ours) |
43.0 |
9.1 |
12.6 |
7.1 |
41.9 |
18.2 |
7.1 |
4.2. 消融实验
Table 3.Ablation experiment results
表3.消融实验结果
Index |
Method |
Leaves |
Steps |
Intermediates |
Overall |
F1 |
AllCorrect |
F1 |
AllCorrect |
F1 |
AllCorrect |
AllCorrect |
(a) |
full model |
90.0 |
58.2 |
49.3 |
37.7 |
69.9 |
38.5 |
35.6 |
(b) |
w/o Entailer score |
88.4 |
52.4 |
43.0 |
32.1 |
79.4 |
42.7 |
32.1 |
(c) |
w/o Verifier score |
89.4 |
56.2 |
47.8 |
36.2 |
68.4 |
37.4 |
34.1 |
(d) |
w/o Navigator score |
90.5 |
58.2 |
48.4 |
36.2 |
69.4 |
36.8 |
34.1 |
(e) |
flan-t5 -> t5 |
90.0 |
57.4 |
48.3 |
35.6 |
70.2 |
38.8 |
35.0 |
ProofsNavigator需要Entailer score (Pscore)、Verifier score (Vscore)和Navigator score (Rscore)三个组件共同发挥作用。为了研究每个模块在知识推理结果所发挥的作用,本文在EntailmentBank数据集的Task2任务上进行消融实验,实验结果如表3所示。从中可以看出:Navigator所提供精准的相关性分数有助于模型朝着正确的方向进行推理。比较(a)和(d),当屏蔽Navigator模块时,模型在Steps和Intermediates这两个与模型推理方向相关的指标上表现均有所下降,这代表Navigator对推理方向的选择发挥着重要作用。另外,更强的生成模型可以实现更高的生成性能(比较(a)和(e)),这意味着ProofsNavigator方法可以通过使用更强的生成模型进一步改进。此外,在使用同样的T5模型下,ProofsNavigator方法的性能同样超过了先前的最优对比方法。
4.3. 数据稀缺性实验
Table 4.Experimental results in a data-scarce environment
表4.数据稀缺环境下的实验结果
方法 |
训练数据采样比例 |
100% |
50% |
20% |
10% |
1% |
EntialmentWriter |
20.9 |
20.5 |
18.0 |
12.9 |
8.0 |
MetGen |
28.0 |
24.1 |
22.0 |
19.1 |
14.7 |
NLProofS |
33.3 |
31.5 |
25.0 |
23.0 |
16.8 |
Ours |
35.6 |
31.8 |
27.4 |
26.5 |
20.0 |
人工标注的数据是非常昂贵的。为了研究模型在少量标注数据情况下的表现,本文在不同的采样比例下随机读取EntailmentBank的训练集数据,然后在Task2上进行训练。而挑选超参数以及测试模型性能则在完整的开发集和测试集上运行,实验结果如表4所示。
首先,在训练数据数量相同,采样比例依次为100%、50%、20%、10%和1%和情况下,ProofsNavigator分别实现35.6%、31.8%、27.4%、25.3%和20.0%的准确率,比对比方法分别高出2.3%、0.3%、2.4%、2.3%和3.2%。这说明ProofsNavigator具有较强的鲁棒性和泛化能力,能够在面对数据采样比例降低的情况下仍能保持准确率。
此外,在仅使用10%训练数据的情况下,ProofsNavigator实现了26.5%的准确率,比参数量达110亿的大模型高出0.9%。这说明ProofsNavigator具有较强的特征提取能力,能够在训练数据稀缺的场景下有效地利用有限的标注数据,从少量数据中学习到足够的信息,实现了性能上的提升。
5. 结论
本文提出一种基于引导的可解释知识推理方法ProofsNavigator,该方法通过Navigator模块引导模型朝着假设的方向进行推理。在EntailmentBank数据集上的三个任务中的性能均超过了先前的最优对比模型,此外该方法在小规模数据亦有较好的性能。
NOTES
*通讯作者。
1https://github.com/allenai/entailment_bank.