分享一张有趣的图,意思是在分类场景下,使用大模型和fasttext的效果,评论也很逗。
这其实背后的逻辑是,在类别众多的分类场景下,尤其是在标注数据量不缺的情况下,大模型的收益是否能够比有监督模型的收益更多。这个例子虽然没有说标注数据量,但估计量不会少。
我们继续回到知识图谱与大模型的话题:
读到一个大模型和知识图谱融合的有趣工作《 Think-on-Graph: Deep and Responsible Reasoning of Large Language Model on Knowledge Graph》(https://arxiv.org/pdf/2307.07697.pdf、https://github.com/IDEA-FinAI/ToG.),该工作提出了一种新的LLM-KG集成范式"LLM⊗KG",将LLM视为一个代理,通过交互式地探索KG上的相关实体和关系,并根据检索到的知识执行推理,取得了一定的效果。
这个工作有很多有趣的细节,供大家一起参考。
一、从三种LLM推理范式说起
大模型在各种自然语言处理任务中表现出了卓越的性能,但在面对复杂的知识推理任务时仍有很大的局限性。
上图1中介绍了三种LLM推理范式的代表性工作流程,其中:
1、纯LLM推理范式
纯LLM,例如采用思维链提示,对于需要专业化知识的问题,LLMs通常无法提供超出预训练阶段(图1a中的过时知识)的准确答案,或者对于需要长逻辑链和多跳知识推理的问题,LLMs也无法提供准确答案。
2、LLM⊕KG范式
LLM⊕KG范式,通常通过LLM生成的SPARQL查询进行KBQA,考虑到纯LLM推理范式的不足,一个自然而有前途的解决方案就是纳入外部知识,如知识图谱(KGs),以帮助提高LLM的推理能力。
早期的研究在预训练或微调过程中将KG中的结构化知识嵌入LLM的底层神经网络。然而,嵌入LLM的KG牺牲了其自身在知识推理中的可解释性和知识更新的效率。
另外一条路,知识图谱提供了结构化、明确和可编辑的知识表征,为缓解LLM的局限性提供了一种补充策略。研究人员已经探索了如何使用KG作为外部知识源来减轻LLM的幻觉。
例如,将LLM与KG结合起来,将KG中的相关结构化知识转化为LLM的文本提示,例如:
Li等人(https://doi.org/10.18653/v1/2023.acl-long.385)使用LLM生成SPARQL查询的主干,并使用KGs填充完整的信息。
Baek等人(https://arxiv.org/abs/2306.04136)采样了包含出现问题的实体的三元组,用于LLM推理。
Li等人(https://arxiv.org/abs/2305.13269)使用LLM将问题分解为若干子问题,然后使用微调Llama生成相应的可执行SPARQL查询,以便从KGs中检索知识。
Wang等人(https://arxiv.org/abs/2308.13259)提出了一种检索器-阅读器-验证器QA系统,用于访问外部知识并与LLM交互。
这些方法都遵循一个模式:从大模型获取信息,相应地增强提示,然后将增强后的提示输入LLM。
不过,在LLM⊕KG范式中,LLM扮演的角色是翻译,将输入的问题转换成机器可理解的命令,供KG搜索和推理,但它并不直接参与图推理过程,并且,LLM⊕KG模式成功在很大程度上取决于KG的完整性和高质量。
例如,在图1b中,尽管LLM成功地识别出了回答问题所需的关系类型,但由于缺少关系"多数党",导致无法检索到正确答案。
3、LLM⊗KG
"LLM⊗KG"范式指的是KG和LLM协同工作,在图推理的每个步骤中互为补充,如图1c所示:
图1c举例说明了LLM⊗KG的优势。在这个例子中,图1b中导致失败的"多数党"关系缺失,可以通过具有动态推理能力的LLM代理(发现的参考三元组(澳大利亚、总理、安东尼-阿尔巴内斯)以及来自LLM固有知识的安东尼-阿尔巴内斯的政党成员身份得到补充。
二、Think-on-Graph(ToG)的实现流程
Think-on-Graph(ToG),意思是LLM沿着图"思考",也就是LLM沿着推理路径"在"知识图谱"上逐步"思考"。
ToG使用KG/LLM推理中的beamsearch搜索算法,允许LLM动态探索KG中的若干推理路径并做出相应决策,简单来说,就是借鉴了Transformer的beam-search算法思路。
该算法为一个可循环的迭代过程,每次循环需先后完成搜索剪枝、推理决策两个任务,搜索剪枝用于找出最有希望成为正确答案的推理路径,推理决策任务则通过LLM来判断已有的候选推理路径是否足以回答问题,如果判断结果为否,则继续迭代到下个循环。
在ToG之外,ToG-R根据实体搜索得到的以EDcand结尾的所有候选推理路径执行推理步骤。与ToG相比,ToG-R省去了使用LLM修剪实体的过程,从而降低了总体成本和推理时间,并且强调关系的字面信息,当中间实体的字面信息缺失或不为LLM所熟悉时,可以降低误导推理的风险。
1、具体实现
图2显示了一个标准的ToG工作流程例子,ToG通过要求LLM在知识图谱上执行束搜索来实现"LLM⊗KG"范式。
ToG会不断更新和维护前N个推理路径P={p1,p2,...其中N表示波束搜索的宽度。ToG的整个推理过程包括以下3个阶段:初始化、探索和推理。
高亮的实体是每次迭代(深度)开始搜索的中心实体,黑体字实体是剪枝后为下一次迭代选择的中心实体。
在每个剪枝步骤中,边的深浅代表LLM给出的排序分数,虚线表示因评估分数低而被剪枝的关系。
因此,这个时候的核心,就在于怎么选择中心实体,以及怎么进行边的排序从而实现剪枝。
1、初始化实体提取
给定问题后,ToG利用底层LLM定位知识图谱上推理路径的初始实体。这一阶段可视为前N个推理路径P的初始化。
ToG首先会提示LLM自动提取问题中的主题实体,并得到问题的前N个主题实体E0={e01,e02,...,e0N},主题实体的数量可能少于N。,这一步可以通过prompt完成。
在测试数据集上,事先给定了主题实体。
例如,在SimpleQA中,topic_entity为预先设置好的主题实体,作为初始化:
{
"topic_entity": {
"m.02qkg8m": "Madam Satan"
},
"answer": "United States of America",
"question": "where is the madam satan located",
"relation": "country"
},
{
"topic_entity": {
"m.04knq3": "California Department of Parks and Recreation"
},
"answer": "A\u00f1o Nuevo State Park",
"question": "which parks are a part of the california department of parks and recreation",
"relation": "member_parks"
}
}
2、子图查询与路径召回
子图查询中,包括关系查询和实体查询,先根据实体,查找其存在的关系,然后再根据关系,查询对应的实体。
2、关系的剪枝
对于给定的实体,通过查询,可以得到多个路径,需要对路径进行排序,在这里,利用大模型进行评估,通过prompt完成,如:请检索对问题有贡献的N个关系(用分号隔开),并按0到1的等级对其贡献进行评分(N个关系的分数总和为 1)。如对应的prompt实现代码如下:
extract_relation_prompt = """Please retrieve %s relations (separated by semicolon) that contribute to the question and rate their contribution on a scale from 0 to 1 (the sum of the scores of %s relations is 1).
Q: Name the president of the country whose main spoken language was Brahui in 1980?
Topic Entity: Brahui Language
Relations: language.human_language.main_country; language.human_language.language_family; language.human_language.iso_639_3_code; base.rosetta.languoid.parent; language.human_language.writing_system; base.rosetta.languoid.languoid_class; language.human_language.countries_spoken_in; kg.object_profile.prominent_type; base.rosetta.languoid.document; base.ontologies.ontology_instance.equivalent_instances; base.rosetta.languoid.local_name; language.human_language.region
A: 1. {language.human_language.main_country (Score: 0.4))}: This relation is highly relevant as it directly relates to the country whose president is being asked for, and the main country where Brahui language is spoken in 1980.
2. {language.human_language.countries_spoken_in (Score: 0.3)}: This relation is also relevant as it provides information on the countries where Brahui language is spoken, which could help narrow down the search for the president.
3. {base.rosetta.languoid.parent (Score: 0.2)}: This relation is less relevant but still provides some context on the language family to which Brahui belongs, which could be useful in understanding the linguistic and cultural background of the country in question.
Q: """
3、实体的剪枝
让大模型用0至1分给各实体对问题的贡献打分(所有实体得分之和为1),用来做评分对比,也是通过prompt实现:
如对应的prompt实现代码如下:
score_entity_candidates_prompt = """Please score the entities' contribution to the question on a scale from 0 to 1 (the sum of the scores of all entities is 1).
Q: The movie featured Miley Cyrus and was produced by Tobin Armbrust?
Relation: film.producer.film
Entites: The Resident; So Undercover; Let Me In; Begin Again; The Quiet Ones; A Walk Among the Tombstones
Score: 0.0, 1.0, 0.0, 0.0, 0.0, 0.0
The movie that matches the given criteria is "So Undercover" with Miley Cyrus and produced by Tobin Armbrust. Therefore, the score for "So Undercover" would be 1, and the scores for all other entities would be 0.
Q: {}
Relation: {}
Entites: """
4、判断是否满足条件
通过探索过程获得当前推理路径P后,会提示LLM评估当前推理路径是否足以生成答案。如果评估结果是肯定的,就提示LLM以查询为输入,使用推理路径生成答案。
反之,如果评估结果为负,则重复探索和推理步骤,直到评估结果为正或达到最大搜索深度Dmax。
如果算法尚未结束,则表明即使达到最大搜索深度Dmax,ToG仍无法探索出解决问题的推理路径。在这种情况下,ToG将完全根据LLM中的固有知识生成答案。
这一目标,同样也是依赖prompt完成处理,思想在于:给定一个问题和相关的检索知识图谱三元组(实体、关系、实体),要求大模型回答用这些三元组和大模型知识是否足以回答这个问题(是或否)。
5、生成结果
生成结果阶段,直接将检索到的文本加入到prompt中,送入大模型,完成答案生成。
三、具体的效果与有趣的结论
1、一个具体的例子
如下表所示,可以看看一个具体的例子,给定问题,得到推理路径,生成答案。
2、对应效果
具体地指标可以从下表中看到,有一定的收益。
3、一些有趣的发展
其一,为了探索搜索深度Dmax和波束宽度N对ToG性能的影响,该工作在深度为1到4和宽度为1到4的设置下进行了实验。
如图3所示,ToG的性能随着搜索深度和宽度的增加而提高。这也意味着ToG的性能有可能随着探索深度和广度的增加而提高。【这个跟问题是否多跳有很大关系】
另一方面,当深度超过3时,性能增长就会减弱。这主要是因为只有一小部分问题的推理深度(基于SPARQL中的关系数,大于3。
其二,为了探究不同的提示设计对ToG的影响,需要确定哪种类型的提示表示法更为实用。实验结果见表4。
其中:
"Triplet"表示使用三重格式作为提示来表示多个路径,如"(堪培拉,澳大利亚首都),(澳大利亚,总理,安东尼-阿尔巴内斯)"。
"sequence"是指使用序列格式,如图2所示。
"sentence"涉及将三元组转换为自然语言句子。例如,"(堪培拉,澳大利亚首都)"可转换为"堪培拉的首都是澳大利亚"。
结果表明,在推理路径中使用基于三元组的表示法能产生最高的效率和最好的性能。
相反,在考虑ToG-R时,每条推理路径都是以主题实体为起点的关系链,因此与基于triple的提示表示法不兼容。因此,将ToG-R转换为自然语言形式会导致提示过于冗长,从而导致性能明显下降。
其三,不同剪枝工具的影响。除了LLM之外,像BM25和SentenceBERT这样能确保文本相似性的轻量级模型也可以在探索阶段用作剪枝工具。
例如,可以根据实体和关系与问题的字面相似性来选择前N个实体和关系。对ToG性能的影响,如表5所示。使用BM25或SentenceBERT替代LLM会导致性能显著下降。
不过,在使用BM25或SentenceBERT后,可以有效减少调用LLM的次数。
其四,种子示例数量的敏感性。为了更好地了解ToG对种子示例数量的敏感性,该工作进行敏感性分析。
具体地,在fewshot试验的基础上,并从训练集中选择了1-6个示例作为fewshot试验设置。在Fewshot测试中,随机选择{1,2,3,4,6}个示例中的M个作为示例,并重复实验三次。随着示例数量的增加,整体性能也普遍提高。
总结
本文主要介绍了一个大模型和知识图谱融合的有趣工作《 Think-on-Graph: Deep and Responsible Reasoning of Large Language Model on Knowledge Graph》(https://arxiv.org/pdf/2307.07697.pdf、https://github.com/IDEA-FinAI/ToG.),该工作提出了一种新的LLM-KG集成范式"LLM⊗KG",将LLM视为一个代理,通过交互式地探索KG上的相关实体和关系,并根据检索到的知识执行推理,取得了一定的效果。
其中关于剪枝的算法、prompt构造细节都值得我们学习,具体细节,可以看源代码,会有更多收获。
参考文献
1、https://arxiv.org/pdf/2307.07697.pdf
2、https://github.com/IDEA-FinAI/ToG.