夕小瑶科技说 原创
作者 | 谢年年
在初学算术加法或乘法时,我们通过数小棍的方式逐步从1+1=2,1+2=3等例子中得出1+3=4,这是一种依赖记忆中的数学表格进行演绎推理的过程。
后来老师告诉我们前辈们总结了一套完备的求和或乘法表,只要背住,做简单算术题根本不成问题,也不需要数小棍啦!这样一套完备的求和或乘法表可以看做是一套规则库,从大量的演绎推理中总结出来的。
如果大模型也掌握了这样一套规则库,那么即使当任务偏离常规知识,大模型也能hold住,大大减少“幻觉”的问题,即减少生成看似合理,但与现实世界知识相矛盾的输出。
受此启发,谷歌团队提出了一种"Hypotheses-to-Theories"(HtT)框架,它能让LLMs在推理任务中自动形成规则库,来减少语言模型中的"幻觉"现象。
HtT方法包括归纳阶段和演绎阶段,两者都通过少样本提few-shot prompt来实现。在归纳阶段,让LLMs为训练集中的问题-答案对生成规则并进行验证,然后根据它们的出现次数和与正确答案的关联频率进行筛选,形成演绎阶段的规则库,即HtT中的Hypotheses(假说)。在演绎阶段,让LLM从规则库中检索适合的规则(Theories 理论)来解决推理问题,以减少LLM生成幻觉的可能性。
论文链接:
https://arxiv.org/abs/2310.07064
论文标题:
Large Language Models can Learn Rules
让我们来看看具体是怎么做的吧!
HtT框架包括归纳和演绎推理两个阶段。接下来将简单介绍一下归纳和演绎推理的概念。
什么是推理?推理是运用合理的逻辑步骤从现有信息中得出结论的过程。推理的核心是两个概念:事实和规则。事实是描述问题当前状态的信息片段,而规则是在特定条件下将事实转化为新事实的函数。以著名的三段论为例:
苏格拉底是一个人。所有人都是会死的。因此,苏格拉底是会死的。
我们可以从“苏格拉底是会死的”和“苏格拉底是一个人”这两条事实推理出“所有人都是会死的”这一条规则。后面所说的规则库则包含了众多这样由事实推理出来的规则。
而所谓归纳推理就是是从许多观察事实中推出普遍规则。我们知道“苏格拉底是人”和“苏格拉底是会死的”这些事实,而这些事实也适用于亚里士多德,那么我们可能会推出一个规则:“所有人都是会死的”。
而演绎推理的目标是根据已知的事实和规则推出新的事实。对于语言模型LLM,大部分的提示技术都是为了引发演绎推理。比如,思维链CoT和Less_to_More的提示方法,都是教导LLM如何从给定的事实中推导出结论。这些方法可以归类为隐式推理方法,因为它们依赖于LLM中储存的隐式规则。而本文直接给出归纳阶段获得的规则库(是一种显示规则),LLM的主要目标就变成了选择最优的规则与最优的推理顺序。
HtT提示基于两个猜想:
尽管LLMs有时会产生错误的规则,但它们能在一部分示例上以合理的概率生成正确的规则。因此,只要有足够的训练示例,LLMs就能找出问题类别中的大部分必要规则。
对于LLMs来说,检索规则比生成正确规则更简单。所以,当LLMs被明确的规则引导时,它们在演绎推理方面的表现会更好。
因此,本文的HtT方法包括归纳和演绎两个阶段,两者都通过少样本提示来实现。如下图所示,左边是诱导规则与验证阶段,使用CoT生成规则,并在训练样本上进行验证;右边是演绎阶段,使用规则库中的知识增强CoT提示。
▲整体框架图对于每个训练样本,也就是一个问题-答案对,首先让LLM生成回答问题的规则,这些规则可能正确,也可能错误。然后通过真实答案来验证它们,这种验证方法可以帮助过滤掉错误答案相关的规则,只保留在推理阶段与正确答案高度相关的规则。
过滤规则基于覆盖率和置信度的原则,即要求规则不仅要频繁出现,而且要与正确答案有足够的关联。本文收集了LLM在整个训练集上生成的规则,只保留那些出现次数超过k次,且通过验证测试的概率高于p的规则。
此外,由于推理问题往往需要多步操作,有些规则只有在某些中间结果出现后才能得出。因此,本文提出了一种从演绎中归纳的方法,使用演绎推理提示(如CoT,LtM)同时处理规则生成和验证(见框架图的左侧部分),其核心思想是在进行演绎推理时明确声明规则。然后从模型预测中提取规则,并用训练样本的准确率来验证规则的有效性。
生成的不分规则库如下图所示:
一旦找到一套有效的规则库,下一步就是利用这些规则解答测试题。将规则库添加到提示中,让LLM从库中找出规则,进行演绎推理。
但在处理大规模规则集时,即使是强大如GPT4的LLMs也也难以在每一步都准确找出正确的规则。如果规则数量有限,比如最多10条,检索通常就会成功。为了解决这个问题,本文还开发了一种XML标记技巧,以提升LLM的上下文检索能力。具体来说就是将规则集组织成一个层次结构,每一层只涉及少量选项。手动将相似的规则分组,形成这样的层次结构。受到提示教程中使用XML标签的启发,使用XML标签标记每个层次,比如and(如下图所示)。为了在层次结构中进行索引,还让LLM在输出检索到的规则之前,先为每个层次生成标签。
在推理阶段使用的prompt示例如下图所示:
作者选择了两个对当前的少样本提示方法来说较为困难的多步推理数据集Arithmetic和CLUTRR,在GPT3.5和GPT4两个模型上采用了三种基准提示方法,包括zero-shot CoT,5-shot CoT,5-shot LtM(less is more)进行实验。
在推理阶段,为了避免形成的规则知识与输入样本的混淆,作者将学习到的规则库添加到system message中。
Arithmetic数据集包括了多种非十进制求和算数题。由于非十进制系统的规则与十进制系统大相径庭,该数据集也被视为一种需要LLM进行推理,而非背诵的反事实环境。实验结果如表1所示: 1. 无论是CoT还是LtM的提示,HtT都能显著提升准确性。2. 特别值得关注的是,HtT在GPT4上使CoT的平均准确性提高了21.0%。然而,对于GPT3.5,性能提升并不明显,它在诱导正确规则和执行推理阶段的表现较差。
除此之外,作者还考虑了另一种解决方案,即使用强大的模型来诱导规则,然后使用较弱的模型来执行推理,在表中(+HtT(GPT4))体现。
可以看到,在从GPT4获取更好的规则后,LtM + HtT有了显著的改进,但是CoT + HtT并没有看到性能的提升,这是因为GPT3.5更倾向于依赖自己的信念(主要是十进制规则),而不是从带有CoT的知识块中检索规规则库。
关系推理数据集选取的是CLUTRR。在CLUTRR中,每个示例都由家庭成员之间的亲属关系链构成,目标是推断链中头实体和尾实体的关系。CLUTRR有两种形式:一种是仅包含实体和关系的符号版本,另一种是包含无关上下文的文本版本。本文对这两种版本进行了HtT评估,并在表2中分别报告了结果:
1. HtT是否能降低规则的幻觉现象?
尽管HtT提升了解决推理问题的整体性能,但还不清楚这种提升是由于减少了幻觉,还是有其他的改进。本文对来自Arithmetic(16进制)和CLUTRR的100个测试示例上的CoT和CoT + HtT的预测进行了手动分析,并将预测结果分为三类:正确、规则幻觉和其他。
图3展示了错误案例的分布情况。可以看到,与CoT相比,HtT显著降低了幻觉的发生。
2. 模型学习的规则只是对规则空间的提示吗?
有研究表明,在上下文学习中,随机标签的表现与黄金标签相似。如果本文的问题也存在这种情况,那么可以只生成随机规则,而不必依赖HtT来学习规则库。为了探究这个问题,作者在学习规则中用随机答案替换结论。例如,在16进制的数据集中,将5 + A = E替换为5 + A = 7。从表4中可以看到,所及规则使得准确率大大降低,这说明HtT来学习规则库是有必要的。
3. XML标签如何提升演绎推理的能力?
在Arithmetic中使用了三级层次结构,包括进位、第一个加数和第二个加数。在CLUTRR中使用了两级层次结构,包括第一个关系和第二个关系。本文验证了具有不同层次结构的XML标签的重要性。由于XML标签需要规则排序,同时考虑了一种未排序(也就是随机排序)规则的变体。
根据表4的数据,XML标签技巧显著提升了性能。这说明,即使有了好的规则,检索在演绎推理中仍然是重要的能力。因此后续可以进一步微调LLM,以实现更好的检索能力。
4. HtT在归纳阶段需要多少样本呢?
作者还对HtT与样本数量的关系以及所需最小样本数量进行了探索,在归纳阶段使用不同数量的样本。如图4所示:
5. HtT能发现多少规则?
在归纳阶段本文利用CoT提示生成并验证规则,但由于规则本身的不完美性,LLM可能无法发现所有规则。为了知道HtT能发现多少比例的规则,作者将HtT和包含了示例中所有必要规则的真实规则集合进行比较。
图5展示了真实规则集合和HtT归纳出的规则数量以及HtT中真正的正规则数量。结果发现,在所有数据集中,HtT发现了超过85%的规则。有趣的是,规则数量在16进制和11进制上增长,但在9进制上没有增长。这表明,即使是GPT4也无法发现一些9进制的规则。
本文介绍了一种名为假设到理论(HtT)的方法,它能学习明确的规则并用于解决推理问题。HtT分为两个阶段:归纳阶段生成并验证规则,构建规则库;演绎阶段则利用这些学习到的规则解决推理问题。实证分析显示,HtT显著提升了数值推理和关系推理问题上基线提示方法的性能。
这种方法为利用LLMs学习文本知识开启了新的方向。期待HtT能推动LLMs的各种应用和未来的研究。