今天是2023年12月17日,星期日,北京,天气晴,我们来继续看看一些有趣的话题。
KG与大模型融合是一个很有趣的话题,尤其是在RAG范式中,KG可以作为一个重要的召回源,来优化prompt,从而提升效果。
我们在之前的文章《再看知识图谱融合大模型RAG问答:用于多文档QA的知识图谱构图及prompt应用思路》(https://mp.weixin.qq.com/s/WAeewL6pLg1PaMJa_jHdXg)中有介绍,《Knowledge Graph Prompting for Multi-Document Question Answering》(地址:https://arxiv.org/pdf/2308.11730.pdf),提出了一种知识图谱提示(KGP)方法,用于在多文档问题解答(MD-QA)中制定正确的LLM提示上下文。
其大致思想在于:在构建图时,该工作在多个文档上创建一个知识图(KG),图中的节点表示段落或文档结构(如页面/段落),边表示段落之间或文档内部结构关系之间的语义/词汇相似性,最后基于图结构,引导大模型进行答案生成。该工作的代码可以参见:https://github.com/YuWVandy/KG-LLM-MDQA。
这种方法借助的是图谱的图结构信息,而早上看到另一个有趣的方向,将KG与COT进行结合,即生成COK的范式,也很有趣,分享给大家,供一起思考。
一、COK的实现思想的来源
COK是工作《Boosting Language Models Reasoning with Chain-of-Knowledge Prompting》(地址:https://arxiv.org/pdf/2306.06427.pdf)的一个思路。
其提出背景在于:**”思维链”(CoT)提示在复杂推理任务中取得不错的效果,其目的是设计一个简单的提示,如”让我们一步步思考”或多个语境中的示例,再加上精心设计的理由,以诱发大语言模型(LLM)生成中间推理步骤,但是生成的理由往往带有错误,使推理链不符合事实、不真实。**
例如,如下图1所示,给定StrategyQA的查询”下面的句子’德里克-怀特反手击球’是否可信”,标准的ICL和CoT会给出错误的答案。其中一个推理步骤”德里克-怀特最有可能是一名曲棍球运动员”是错误的(事实上,德里克-怀特是一名篮球运动员),从而对问题做出了不符合事实的推断。此外,当LLM生成了逻辑上合理的推理链,却仍然提供了不正确的答案时,答案也可能是不真实的。
所以,其提出了一种新颖的知识链(CoK)提示方法,旨在诱导LLM生成结构三元组的显式知识证据,基于此还引入F2-Verification方法,从事实性和忠实性两个方面来评估推理链的可靠性。对于不可靠的回答,可以指出错误的证据,促使LLM重新思考。
二、COK的具体实现思路
因为CoT提示生成的推理链有时会出现错误,最终导致错误答案,因为LLM可能会强行生成符合CoT提示格式的文本推理,但在逻辑上却模棱两可,从而得出错误的答案。
所以主要做2点改变。
一个是提示格式,因为纯文本推理链不足以让LLM生成可靠而具体的推理过程。受知识库中三重结构的启发,需要用结构化特征来增强提示。
一个是事后验证。LLM通常无法检查他们所回答的答案,这就要求利用外部知识进行验证。
所以整个思路就变得很直接,如图二所示,分三步:
首先用知识链(CoK)提示构建示例。然后,CoK提示可以让LLM生成推理链,包括证据三元组、解释提示和最终答案。最后,从事实性和忠实性两个方面对推理链的可靠性进行评估,并对不可靠的推理链进行反思。
那么,什么是知识链提示(CoK),知识链提示(CoK)由两个主要部分组成,即证据三元组(CoK-ET)和解释提示(CoK-EH)。
CoK-ET代表一个由多个三元组组成的列表,每个三元组都代表从大模型那里获得的知识证据,以支持逐步思考的过程。
CoK-EH表示推理链的解释,这与普通的CoT类似。例如,在图1中,可以引导LLM生成两个显式证据”(德里克-怀特,isA,篮球运动员),(篮球投篮,常用于,曲棍球或网球)”和一个文本解释,以支持最终答案”否”。
1、示例构建
CoK提示的关键挑战在于利用其结构证据三元组构建文本理由。
其一,随机选择K个问题作为基本示例,首先从训练集中随机选取多个标注示例。 选取了8个标签数据:CoinFlip、ARC-c、AQuA、GSM8K、MUltiArith、CSQA、SVAMP、OpenBookQA;4个标签数据:LastLetterConnection;6个标签数据:Sports、BoolQ、StrategyQA。
其二,为了自动获取CoK-EH,对于每个标签数据,首先使用zeroshot CoT进行文本推理链生成。 在输入查询后直接连接一个简单的提示”让我们一步步思考”,以诱导LLM生成推理和最终答案。然后,移除该提示,并通过连接输入查询和生成的文本推理链来重建输入查询。
其三,为了获得注释的CoK-ET,首先从六个领域中构建一个KB,涉及字典、常识、实体、事件、脚本和因果关系。 它们都是三元组的形式,六个领域如下:
其四,为了构建证据三元组,从预建知识库中检索一些相关的知识三元组。在检索过程中,给定一个文本推理链(如CoK-EH),用句子编码器模型(如BERT)对其进行编码,然后使用最大内积搜索工具SCaNN检索最相关的知识三元组。
其五,由于检索到的知识三元组可能包含噪音和冗余信息。为了提高证据三元组的可靠性,邀请了五位领域专家(包括教授和博士生)根据检索到的知识三对证据三元组进行人工标注,并手工设计相应的CoK-ET,例如,对于sports understanding task任务,设计的COK如下:
2、F2-Verification(F2-验证)
给定一个测试查询输入,可以直接选择示例中的排列组合,并将它们与该测试查询串联成一个线性序列,从而提示LLM以生成预测。由于演示的格式设计合理,从LLM得出的最终预测结果由三元组、一系列解释提示和最终答案组成。
然而,LLM无法检查预测结果,因此无法保证生成的理由和最终答案的质量,所以,可以利用F2-Verification(F2-验证)进行校验。
校验的逻辑也很简单:
在事实性验证上,事实性可视为每个生成的三元组证据与知识库中的基本真实知识之间的匹配度。具体来说,定义一个函数fv来表示每个证据的真实性。设计两种不同的fv策略:
一个是精确验证。根据主体和客体来检索所有相关的三元组,并找出生成的相关性。
另一个是隐式验证。对于KB中不存在的三元组,可以对其进行修正。将事实性验证转化为预测三元组是否为真的知识补全任务,使用TransR对KB进行预训练,并使用现成的能量函数为每个证据三元组赋分。如果证据三元组存在于K中,将使用精确验证策略分配分数,或者使用隐式验证策略。
在忠实性验证上,给定一个测试查询、一个证据三元组列表和最终答案,直接将它们连接成一个新的序列,利用预置的句子编码器SimCSE来计算新序列与先前序列之间的相似度,最后,对于每个查询,可以得到一个分数Ci(0<Ci<1),表示该理由对答案是否可靠。
如下示意图所示:
F2-Verification可以帮助确保模型生成的三元组和解释的真实性和忠实性。此外,除了验证之外,还可以通过反思过程(也就是其中的rethinking)进一步提高LLM的性能。
这块的逻辑在于:当LLM生成的推理链未能通过验证且可靠性得分低于阈值θ时,会在反思阶段为它们提供额外的再次生成机会。
如表4所示,CSQA和LastLetterConnection案例研究:知识链提示与反思过程。红色、蓝色和绿色标记分别表示错误的理由、注入的知识和纠正的理由。
从CSQA和Last Letter Connection任务中随机选择了两个例子,可以看出,错误的三元组则可以通过提出的F2-Verification检测出来。在重新思考的过程中,LLM 可以在注入知识的新提示引导下得出正确答案。
三、对比实验及多种COT范式
在实验过程中,选择了五种不同的任务来评估,如下:
细节的,对比模型包括zero-shot、few-shot、Chain of thought、Zero-shot-CoT、Mannual-shot-Cot、Auto-CoT等多个,每种方法的示义如下:
zero-shot:模型直接回答;
few-shot:给定多个示例,模型参照进行回答;
Chain of thought:标准的思维链提示,提供四到八个手工制作的示例,包含一系列中间推理步骤;
Zero-shot-CoT:一种基于模板的zeroshot-CoT方法,通过添加与任务无关的提示,mMannual-shot-Cot通过人工定义prompt进行处理
Auto-CoT:通过选择不同的问题自动构建CoT示例。(https://arxiv.org/pdf/2210.03493.pdf)
此外,还设计了六个变体:1)CoK:基本提示,不含反思过程;2)CoKw/o.ET:仅包含解释提示(与CoT相同);3)CoKw/o.EH:只有证据三元组;4)CoK+F2-V:表示整个框架;5)CoK+F2-Vw/o.:在反思过程中只使用忠实性得分;6)CoK+F2-Vw/o.只使用事实性得分。
对CSQA、ARC-c、BoolQ和最后字母连接等四项任务进行了消融研究,结论很有趣:
去除每个成分后,性能都会下降,这说明了所有成分的重要性。对于CoK,可以看到变体CoKw/o.ET的性能低于CoKw/o.EH,这表明敦促LLM生成明确的证据三元组是对性能最重要的贡献。
四、再看看COT的一些其他事情
COT看起来很有效,COT当前已经出现了许多的变体,例如前面所介绍到的CON(chain of note),先生成笔记,然后用来应对RAG中的不同上下文。
但为什么有效是值得关注的,《Towards Understanding Chain-of-Thought Prompting: An Empirical Study of What Matters》(地址:https://aclanthology.org/2023.acl-long.153.pdf)中做了一些解释,文章《https://cobusgreyling.medium.com/the-anatomy-of-chain-of-thought-prompting-cot-b7489c925402》也做了一个总结,觉得很有趣。
其中有2个重要指标:连贯性和相关性。
连贯性是指推理步骤的正确顺序,具体来说,由于思维链是一个顺序推理过程,因此后面的步骤不可能是前面步骤的前提条件;相关性是指理由是否包含问题中的相应信息。
而我们进一步又可以想想,当前许多fewshot和ICL上下文的示例选择,本质上也是在找相关性,如knn等,这些都如出一辙。
总结
本文主要介绍了《Boosting Language Models Reasoning with Chain-of-Knowledge Prompting》这一工作,该工作的思想在于将LLMs得出的推理链分解为多个证据三元组和解释提示,从而进一步提高推理能力。在知识链提示的基础上,引入了F2-验证,充分利用外部知识库对生成的推理链进行事实性和忠实性的后验证。然后,利用重新思考过程注入知识,纠正错误的证据三元组,并引导LLM重新生成答案。
但是,这种方式的前提是,我们已经事先有个知识图谱存在,但在真实落地场景下,可能并不满足,并且,整体框架变得较为复杂,但其思想值得借鉴。
此外,文中所提到的基于多个cot-prompt的工作,对于加强我们对prompt的理解也有帮助,感兴趣的也可以多关注。
参考文献
1、https://arxiv.org/pdf/2306.06427.pdf
2、https://arxiv.org/pdf/2308.11730.pdf
3、https://mp.weixin.qq.com/s/WAeewL6pLg1PaMJa_jHdXg
4、https://cobusgreyling.medium.com/chain-of-knowledge-prompting-0285ac879ede
5、https://cobusgreyling.medium.com/the-anatomy-of-chain-of-thought-prompting-cot-b7489c925402
关于我们
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。