本章贡献有两个方面。第一,介绍了 NLProofS,这是一种逐步生成证明的方法,可搜索由验证者对其有效性进行评分的证明。在具有挑战性的 EntailmentBank 数据集上,它大大提高了最先进的性能。第二,通过广泛的分析和消减,揭示了性能提升的原因,并揭示了当前的瓶颈。本章的工作是探索验证器和证明搜索在生成自然语言证明过程中的相互作用的第一步,我们期待在这条道路上取得更大的进步。
生成自然语言证据
1. 任务定义
这里定义了证明生成任务。如图4.1 ( Top )所示,输入由一个假设h和一组支撑事实C = { sent1,sent2,..,sentn }组成,其中h和senti都是自然语言句子,通过推理可以从C的一个子集通过若干个步骤推导出h。
输出为一棵证明树T,其说明了如何从C中推导出h。该树以h为根,以senti为叶节点。中间节点是模型生成的中间结论。每个非叶子节点u对应一个以u为结论、以其子节点为前提的演绎步骤。为了成功地执行该任务,模型必须从C中选择相关的句子,将其作为叶子节点组成一棵通向h的有效证明树,并填写所有的中间结论。
2. Singles-shot vs. stepwise generation
由ProofWriter (塔菲约德et al , 2021)推广的一种简单而有效的方法是微调一个预训练的T5模型( Raffel et al , 2020),将输入的( h和C)映射到输出( T ),无论是单次还是分步。为此,必须将输入/输出编码为文本序列,如图4.1所示,通过串联h和C对输入进行编码。
输出的证明树可以通过后序遍历进行编码。如图4.1所示,节点被标识符标记:叶节点为' sent * ',中间节点为' int * ',根节点为' hypothesis '。输出序列通过后序遍历树,在每个非叶子节点生成一个证明步,使用' & ' for '和' '和' - > ' for ' includes '生成。由于证明步骤之间和步骤内前提之间的顺序不同,该树可能对应多个有效序列。然而,评价指标可以从重建的树中计算而不是从原始文本序列中计算。
在单步生成中,模型生成整个证明(图4.1中)的输出序列,而在分步生成中,模型每次将当前部分证明作为输入(除了h和C),只生成下一步(图4.1底图)。阶梯式证明生成的思想并不新鲜,在不同的语境下都有探索,其中ProofWriter (塔菲约德等, 2021)、FairRR (三亚尔等, 2022)、SCSearch (波斯特罗姆等, 2022)与我们最相关。与他们相比,我们的方法是假设导向的- -它生成了对假设h进行条件化的中间结论,因此它可以学习生成仅对证明h有用的证明步骤。此外,还使用了验证器来防止模型幻想无效的证明步骤。
NLProofS
以下介绍本章的自然语言证明生成方法NLProofS,主要有3个组成部分:( 1 )用于生成候选证明步骤的逐步证明器;( 2 )打分证明有效性的验证器;( 3 )搜索聚合证明分数高的证明的算法。
1. 逐步证明器
与之前的工作(Tafjord 等人,2021 年)一样,通过微调预训练的 T5 模型来实现逐步证明器。训练数据是从基本真实证明的步骤中提取的。假设 T 是一棵证明树,u∈ T 是一个非叶节点,对应于我们要提取的步骤。以图4.1中的节点int1为例。T 中的非叶节点可分为:(1) u 的后代;(2) u 本身及其祖先,如图 4.1 中的 int1 和 h;(3) 两者都不是,如图 4.1 中的 int2。部分证明必须包括所有 (1),但不包括 (2)。部分证明可能包括也可能不包括 (3) 中的节点。因此,在这个特定的例子中,部分证明不能包括 int1 或 h,但可以自由选择是否包括 int2。在预处理训练数据时,会随机选择作为一种数据增强。
在推理过程中,证明者可能会生成语法错误的证明步骤。在图 4.1(下)的例子中,"int1 & int2 -> hypothesis; "就是语法错误的,因为当前的部分证明中没有前提 int2。通过波束搜索从模型中生成多个证明步骤,并使用启发式方法过滤掉格式错误的证明步骤,例如那些语法错误或前提不可用的证明步骤,从而缓解了这一问题。
波束搜索(Beam Search):一种用于寻找最优解或近似最优解的启发式搜索算法,通常用于解决离散空间中的搜索问题。 引入了参数“波束宽度”(beam width),该参数决定了在搜索过程中保留的候选解的数量。 在每一步,波束搜索会生成多个候选解,并根据某种评估准则(比如概率、得分等)选择其中的前几个作为下一步的搜索对象,而抛弃其余的候选解。
2. 证明器
- 打分证明步骤
我们引入了一个独立的验证器,经过培训后,它可以检查证明步骤的有效性,防止证明者根据假设产生无效步骤的幻觉。一个证明步骤有多个前提和一个结论。验证器将它们作为输入,并在 [0, 1] 范围内产生连续的有效性得分。
我们通过微调预训练的 RoBERTa 模型(Liu 等人,2019 年)来实现验证器,从而将证明步骤分类为有效或无效。输入前提被随机洗牌,并与结论串联。对于训练数据,可以从地面实况证明中提取正例(有效步骤);但是,没有现成的负例。我们没有像 Dalvi 等人(2022 年)那样注释额外的反面例子,而是自动生成伪反面例子。详情请参见附录 C。
- 对整个证明进行打分汇总
将步骤得分进行汇总,得到整个证明树的得分。我们递归地将得分与树中的所有节点相关联。所有的叶子都有1.0的分数,因为它们被明确地提供了始终成立的假设。每个非叶子节点u对应其子节点v1,v2,..,vl的一个证明步s,其得分定义为:
其中,scrs ( s )为步骤得分,例如,由验证者产生。直观地说,scrn ( u )反映了我们对u的信心,它是关于步长分数和它的子代分数的单调非增的。式1只是定义scrn ( u )的一种简单方式,我们留给以后的工作更深入的探索评分选项。最后,证明得分scrn ( h ):根的得分。
3. 证明搜索
现在,将证明者和验证者结合到证明搜索算法中,该算法寻找具有最佳证明得分的证明。我们的方法受到形式逻辑中自动推理的启发(Russell 和 Norvig,2002 年),在形式逻辑中,证明是通过在大空间中高效搜索找到的。我们不是贪婪地逐步生成证明,而是在大型证明图(图 4.2)中搜索证明树,让模型探索不同的路径,从错误中恢复,最终找到更好的证明。
实验结果
1.实验装置
使用两个基准测试程序来评估NLProofS的证明生成能力:一个真实的基准测试程序EntailmentBank (达尔维等, 2021)和一个合成的基准测试程序RuleTaker ( Clark et al , 2020b)。
EntailmentBank由专家注释者构建的1,840棵证明树( 其中1 313棵用于训练, 187棵用于验证, 340棵用于测试)组成。它伴随着证明生成任务( 生成自然语言证据小结)的三个变体,支持事实C的干扰项数量不同。
为了说明NLProofS对不同推理数据集的广泛适用性,还在RuleTaker上进行了评估。在RuleTaker中,h既可以被证明,也可以被反证,或者既不能证明,也不能反证。该模型需要做两件事情:( 1 )将答案预测为这三个类别中的一个;( 2 )当h可以被证明或反证时,生成一个证明。与EntailmentBank不同,RuleTaker中的例子是由模板生成的简单的、合成的英文句子组成。我们使用塔菲约德等人( 2021 )介绍的数据集的OWA (开放世界)版本。沿用三亚等( 2022 )的设定,我们在D0 - D3子集上进行训练和测试,该子集包含深度≤3的证明。它有129K个示例- - 90K用于训练,13K用于验证,26K用于测试。预测答案使用准确率进行评估,而证明则使用Overall - AllCorrect进行评估,但忽略了中间结论。
表4.2展示了我们在EntailmentBank上的测试结果。我们与当前最先进的Entailment Writer (达尔维等, 2021)进行比较,并对T5模型进行微调,以便在一次拍摄中生成证明(第4.3节)。它有两个版本,一个是T5 - large ( 737万参数),另一个是T5 - 11B ( 11亿参数)。对于我们的方法,由于计算限制,我们只对T5 - large进行实验。
表4.3给出了Entailment Writer生成但NLProofS避免的无效步骤的两个例子,这可能是由于它的验证器。在第一个例子中,蕴含写作者的结论中的"六月"是基于假设的幻觉,因为这个词不出现在前提中。第二个例子是博斯特罗姆等人( 2022 )也观察到的一种典型的不良行为。当模型难以产生结论时,它又回到了复制其中一个前提。我们的方法在这两个例子中都得到了合理的结论。
表4.4。ProofWriter是塔菲约德等( 2021 )中的迭代模型,也是领先的方法。它在T5的基础上逐步生成证明。我们的方法与ProofWriter具有竞争性,并且比FaiRR (三亚尔等, 2022)有小幅度的提高。