LLM⊗KG范式下的知识图谱问答实现框架思想阅读

2024-05-06 18:28

本文主要是介绍LLM⊗KG范式下的知识图谱问答实现框架思想阅读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分享一张有趣的图,意思是在分类场景下,使用大模型和fasttext的效果,评论也很逗。

c4f1f6d7348a13ff53cecb303ef1f35a.jpeg

这其实背后的逻辑是,在类别众多的分类场景下,尤其是在标注数据量不缺的情况下,大模型的收益是否能够比有监督模型的收益更多。这个例子虽然没有说标注数据量,但估计量不会少。

我们继续回到知识图谱与大模型的话题:

读到一个大模型和知识图谱融合的有趣工作《 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推理范式说起

大模型在各种自然语言处理任务中表现出了卓越的性能,但在面对复杂的知识推理任务时仍有很大的局限性。

57ba6df2bebb5c11f58f7f4eb58b719e.png

上图1中介绍了三种LLM推理范式的代表性工作流程,其中:

1、纯LLM推理范式

纯LLM,例如采用思维链提示,对于需要专业化知识的问题,LLMs通常无法提供超出预训练阶段(图1a中的过时知识)的准确答案,或者对于需要长逻辑链和多跳知识推理的问题,LLMs也无法提供准确答案。

fc6b355e6126021e6c31a8c0bc00521b.png

2、LLM⊕KG范式

LLM⊕KG范式,通常通过LLM生成的SPARQL查询进行KBQA,考虑到纯LLM推理范式的不足,一个自然而有前途的解决方案就是纳入外部知识,如知识图谱(KGs),以帮助提高LLM的推理能力。

0905733331aa4a5750afc3c9ffb13804.png

早期的研究在预训练或微调过程中将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填充完整的信息。

a7b72973bb7c75c931b1a51e4f0a1742.png

Baek等人(https://arxiv.org/abs/2306.04136)采样了包含出现问题的实体的三元组,用于LLM推理。

1e7253db123c0191293f1ce7c4dc4704.png

Li等人(https://arxiv.org/abs/2305.13269)使用LLM将问题分解为若干子问题,然后使用微调Llama生成相应的可执行SPARQL查询,以便从KGs中检索知识。

82c7b9c2267dd9148046ba5d8d2cec83.png

Wang等人(https://arxiv.org/abs/2308.13259)提出了一种检索器-阅读器-验证器QA系统,用于访问外部知识并与LLM交互。

d9e4404463730d7d171e92faf9575a33.png

这些方法都遵循一个模式:从大模型获取信息,相应地增强提示,然后将增强后的提示输入LLM。

不过,在LLM⊕KG范式中,LLM扮演的角色是翻译,将输入的问题转换成机器可理解的命令,供KG搜索和推理,但它并不直接参与图推理过程,并且,LLM⊕KG模式成功在很大程度上取决于KG的完整性和高质量。

例如,在图1b中,尽管LLM成功地识别出了回答问题所需的关系类型,但由于缺少关系"多数党",导致无法检索到正确答案。

3、LLM⊗KG

"LLM⊗KG"范式指的是KG和LLM协同工作,在图推理的每个步骤中互为补充,如图1c所示:

ac4a9a20d9143ae655e7e8b863cad8a1.png

图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所熟悉时,可以降低误导推理的风险。

381c3f9a9c832fdcec039ac580d63193.png

1、具体实现

图2显示了一个标准的ToG工作流程例子,ToG通过要求LLM在知识图谱上执行束搜索来实现"LLM⊗KG"范式。

ToG会不断更新和维护前N个推理路径P={p1,p2,...其中N表示波束搜索的宽度。ToG的整个推理过程包括以下3个阶段:初始化、探索和推理。

6b6e90be641e586935f9ffe3ac1a0317.png

高亮的实体是每次迭代(深度)开始搜索的中心实体,黑体字实体是剪枝后为下一次迭代选择的中心实体。

在每个剪枝步骤中,边的深浅代表LLM给出的排序分数,虚线表示因评估分数低而被剪枝的关系。

因此,这个时候的核心,就在于怎么选择中心实体,以及怎么进行边的排序从而实现剪枝。

1、初始化实体提取

给定问题后,ToG利用底层LLM定位知识图谱上推理路径的初始实体。这一阶段可视为前N个推理路径P的初始化。

ToG首先会提示LLM自动提取问题中的主题实体,并得到问题的前N个主题实体E0={e01,e02,...,e0N},主题实体的数量可能少于N。,这一步可以通过prompt完成。

在测试数据集上,事先给定了主题实体。

9f2d5fd2c7c56e6f25e0e835a0c5a170.png

例如,在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、子图查询与路径召回

子图查询中,包括关系查询和实体查询,先根据实体,查找其存在的关系,然后再根据关系,查询对应的实体。

f141c3437197b839f062028ba8771dc0.png

2、关系的剪枝

对于给定的实体,通过查询,可以得到多个路径,需要对路径进行排序,在这里,利用大模型进行评估,通过prompt完成,如:请检索对问题有贡献的N个关系(用分号隔开),并按0到1的等级对其贡献进行评分(N个关系的分数总和为 1)。4642910fce5c0216ece9be55e0321dc6.png如对应的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实现:

c626154720c76b80705a03460da2c417.png

如对应的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完成处理,思想在于:给定一个问题和相关的检索知识图谱三元组(实体、关系、实体),要求大模型回答用这些三元组和大模型知识是否足以回答这个问题(是或否)。

21449e81ab99c739eb1a67f427aeace3.png 20e46e0a17843ce8f3603026a9f7894b.png

5、生成结果

生成结果阶段,直接将检索到的文本加入到prompt中,送入大模型,完成答案生成。

9b86a9e3777996e53f3584d717b689f1.png

 

三、具体的效果与有趣的结论

1、一个具体的例子

如下表所示,可以看看一个具体的例子,给定问题,得到推理路径,生成答案。

57576fc8ca1d43af3f71287751229f50.png

2、对应效果

具体地指标可以从下表中看到,有一定的收益。

04cbb7aef58fa0165016f30635304c56.png

3、一些有趣的发展

其一,为了探索搜索深度Dmax和波束宽度N对ToG性能的影响,该工作在深度为1到4和宽度为1到4的设置下进行了实验。

如图3所示,ToG的性能随着搜索深度和宽度的增加而提高。这也意味着ToG的性能有可能随着探索深度和广度的增加而提高。【这个跟问题是否多跳有很大关系】

36348fa8913e24a48dfe9eef70d609fd.png

另一方面,当深度超过3时,性能增长就会减弱。这主要是因为只有一小部分问题的推理深度(基于SPARQL中的关系数,大于3。

其二,为了探究不同的提示设计对ToG的影响,需要确定哪种类型的提示表示法更为实用。实验结果见表4。

其中:

"Triplet"表示使用三重格式作为提示来表示多个路径,如"(堪培拉,澳大利亚首都),(澳大利亚,总理,安东尼-阿尔巴内斯)"。

"sequence"是指使用序列格式,如图2所示。

a3874d33b87a9ba37e1f37d903f0facb.png

"sentence"涉及将三元组转换为自然语言句子。例如,"(堪培拉,澳大利亚首都)"可转换为"堪培拉的首都是澳大利亚"。

结果表明,在推理路径中使用基于三元组的表示法能产生最高的效率和最好的性能。

相反,在考虑ToG-R时,每条推理路径都是以主题实体为起点的关系链,因此与基于triple的提示表示法不兼容。因此,将ToG-R转换为自然语言形式会导致提示过于冗长,从而导致性能明显下降。

其三,不同剪枝工具的影响。除了LLM之外,像BM25和SentenceBERT这样能确保文本相似性的轻量级模型也可以在探索阶段用作剪枝工具。

例如,可以根据实体和关系与问题的字面相似性来选择前N个实体和关系。对ToG性能的影响,如表5所示。使用BM25或SentenceBERT替代LLM会导致性能显著下降。

e9930503eb0acd9cb10330e1e5c61506.png

不过,在使用BM25或SentenceBERT后,可以有效减少调用LLM的次数。

其四,种子示例数量的敏感性。为了更好地了解ToG对种子示例数量的敏感性,该工作进行敏感性分析。

具体地,在fewshot试验的基础上,并从训练集中选择了1-6个示例作为fewshot试验设置。在Fewshot测试中,随机选择{1,2,3,4,6}个示例中的M个作为示例,并重复实验三次。随着示例数量的增加,整体性能也普遍提高。

16e623d5d4e2c24c7bf3d5cad3905401.png

总结

本文主要介绍了一个大模型和知识图谱融合的有趣工作《 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.

这篇关于LLM⊗KG范式下的知识图谱问答实现框架思想阅读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/965034

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文