AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


理解图结构和图推理,彻底掌握GraphRAG底层逻辑,悄悄超越99%的人 | ICLR2024
发布日期:2024-07-12 18:23:59 浏览次数: 2727 来源:AI修猫Prompt



近期,GraphRAG代码放出后,一时风头无二。很多朋友陷入了图的迷阵,图究竟是怎样在大语言模型下工作的?这是个好问题。

这样理解图(Graph),图本质上是一种结构化的知识表示方式,它通过节点(实体)和边(关系)来捕捉复杂的信息网络。在LL中引入图结,主要是为了弥补LLM在处理结构化信息和进行多步推理时的不足。

图片由xiumaodalle生成

LLM在常识推理、开放域问答等复杂任务上取得了惊人的表现。然而,LLM本身存在两大问题:一是知识盲区,缺乏对最新事实的了解;二是容易产生幻觉,给出与事实不符的推理结果。这严重影响了LLM在法律、医疗等高风险领域的实际应用。


知识图谱(KG)作为一种结构化的事实知识库,能够很好地弥补LLM的不足。目前业界将KG与LLM结合的方法可分为两大类:

1)语义解析,即将自然语言问题转化为可在KG上执行的逻辑查询语句;

2)基于检索的方法,即从KG中检索相关知识三元组,作为背景知识供LLM生成答案。但这些方法要么因逻辑查询的局限性而无法执行,要么将KG仅作为事实库而忽视了其结构信息,无法完成可解释、符合逻辑的推理。

谷歌2023年就提出了一种新的思路:让LLM"说话像图(Talk like a Graph)"。核心思想是将KG的结构信息编码为文本序列输入LLM,使其能基于KG完成可信、可解释的符号推理。这种"把图说成话"的编码范式,使得LLM获得了基于知识的推理能力,同时保留了自然语言交互的灵活性,在知识图谱问答(KGQA)基准测试中取得了最优表现。


接下来,让我们一起深入这场图推理的革命,看看它如何彻底改变大语言模型的思维方式!



01

图的语言:给AI"喂"数据

假如,你正试图向一位外星访客描述地球上错综复杂的人际关系网络。你会如何用语言来描绘这幅图景?这正是研究者们面临的第一个挑战:如何将图结构转化为大语言模型可以理解的语言。


传统方法往往采用简单粗暴的方式,比如直接列出所有的节点和边。但这就像是把一本精彩的小说变成了枯燥的电话簿!研究者们提出了一系列富有创意的图编码方法,每一种都像是在用不同的诗歌体裁描绘同一幅画作:

边(edge)的关系有各种姿态:


邻接表编码:如同一封封简短的电报,"A认识B","B认识C"。


入射表编码:仿佛是每个人的社交名单,"A的朋友有B、C和D"。


友谊关系编码:充满温度的叙述,"A和B是挚友"。


合著关系编码:学术圈的独特风景,"A和B共同创作了一篇论文"。


社交网络编码:现代社会的缩影,"A和B在社交平台上相连"。


箭头编码:简洁而富有方向感,"A→ B"。


这些编码方法不仅是技术选择,更是对人类关系的不同角度诠释。它们各自捕捉了图结构的独特面貌,为大语言模型提供了理解复杂关系的多元视角。


但是,光有边的描述还不够。节点(node)的命名同样关键!研究者们玩出了花样:


整数编码:冷冰冰的"节点0","节点1",像是一场没有温度的数字游戏。


常见英文名字:当"David"遇上"Mary",图谱顿时有了生活气息。


流行文化角色名:想象"Jon Snow"与"Cartman"成为了朋友,多么有趣的跨界联想!


政Z人物名字:当"Barack"与"Angela"建立联系,图谱仿佛成了国际政z的缩影。


字母编码:"节点A"遇到"节点B",简洁中透着几分优雅。


这些命名策略不仅影响模型的理解,更在无形中塑造了整个图结构的氛围和语境。选择合适的命名方式,就像是为图谱选择了最适合的叙事语调。


亲爱的AI开发者们,请记住:不要再用那些枯燥乏味的方式来"喂"数据给AI了!用富有想象力的方式来编码图结构,让AI真正"读懂"复杂的关系网络。这不仅能提升模型性能,更能激发AI前所未有的创造力!


02

图的性格:AI也有"选择性偏见"

正如每个人的性格会影响他们思考和行动的方式,图的结构特征也深刻影响着大语言模型的推理表现。研究者们巧妙地设计了七种具有代表性的图结构,仿佛是七种不同"性格"的图:

上一篇文章对这个问题有深入的探讨


往期推荐

GraphRAG实战:突破传统RAG的界限,把PDF转换成为Prompt可优化的数据集

用GraphRAG把PDF自动生成数据集的代码已放到了群里

Erdős-Rényi(ER)随机图:犹如一群随性的陌生人,关系全凭偶然。


Barabási-Albert(BA)无标度网络:宛如社交网络,有"网红",也有"小透明"。


随机块模型(SBM):像是有着明确派系的社交圈,组内热闹,组间冷淡。


无标度网络(SFN):现实世界关系网的写照,少数人脉广,多数人际圈小。


星形图:一呼百应的意见领袖,周围簇拥着追随者。


路径图:如同一条长长的队伍,信息传递需要一个接一个。


完全图:乌托邦式的社交网络,人人都与他人直接相连。


这些图结构就像是不同的社交场景,每一种都考验着AI的"社交智慧"。这些图在GraphRAG中也都有应用。实验结果揭示了一些令人惊讶的发现:


在"寻找圈子"(环路检测)的游戏中,AI在完全图上表现出色(准确率91.7%),仿佛在一个"所有人都认识所有人"的小镇上轻松找到八卦圈子。但在路径图这种"单线联系"的结构中,AI却显得手足无措(准确率仅5.9%)。这揭示了AI可能带有"人际关系总是复杂纠葛"的先入之见。


当被问及"两个人是否认识"(边存在性判断)时,AI在路径图上的判断更为准确(60.0%),而在完全图上却频频失误(仅19.8%正确)。这似乎反映了AI倾向于认为人与人之间"不太可能"直接相连,这与现实世界的"六度分隔理论"不谋而合。


有趣的是,在询问某人有多少朋友(节点度数)、社交圈有多大(节点数量)等问题时,AI在星形图和路径图上表现最佳。这可能是因为这些结构较为简单,描述起来更加清晰,没有太多干扰信息。就像在一个小村庄里,每个人的社交关系都一目了然。


这些发现不仅有趣,更具有深远的实践意义。它提醒我们,在设计基于图的AI应用时,需要充分考虑数据的内在结构。例如,在分析社交网络时,可能需要特别关注网络的稀疏程度和关键节点的分布,以确保AI能够做出准确的判断和推理。


别被AI表面的"聪明"骗了!它们也有自己的"选择性偏见"。作为开发者,我们的任务是理解并巧妙利用这些偏好,设计出更智能、更接地气的AI系统。


03

别让AI变成"只会开卷考试的书呆子"

理解了图的语言和性格,下一个挑战是:如何让AI真正地"思考"这些图结构?ICLR2024澳大利亚的研究者们提出了一个巧妙的"规划-检索-推理"图推理框架(RoG),仿佛为AI配备了一副"图思维的眼镜"。



规划:绘制思维导图


当你面对一个复杂的问题时,你可能会先在纸上画出一个思维导图。AI的规划模块就是在做类似的事情。它生成"关系路径",这些路径就像是解决问题的导航图。


例如,面对"谁是Alice的孙子?"这个问题,AI可能会规划出这样一条路径:


marry_to →father_of


这就像是在说:"先找到Alice的配偶,然后看看这个人是谁的父亲。"这个简单的计划包含了解决问题的关键步骤。


检索:在图中寻宝


有了计划,下一步就是根据这个计划在知识图谱中寻找实际的信息。这就像是按照地图寻宝。检索模块使用一种叫做"约束广度优先搜索"的算法,听起来很复杂,但你可以想象它就像是在迷宫中按照特定规则探索所有可能的路径。


继续上面的例子,系统可能会找到这样的路径:


Alice marry_to−−−−−→Bob father_of−−−−−→ Charlie


这条路径告诉我们:Alice嫁给了Bob,Bob是Charlie的父亲。


推理:得出结论


最后,推理模块接管了这个过程。它就像是一个善于分析的侦探,根据收集到的线索(检索到的路径)来回答问题并解释推理过程。


对于我们的例子,AI可能会这样回答:


"Charlie很可能是Alice的孙子。因为Alice嫁给了Bob,而Bob是Charlie的父亲。所以,Charlie是Alice配偶的孩子,也就是Alice的孙子。"


这种方法不仅能给出答案,还能提供清晰的推理过程,让用户理解AI是如何得出结论的。


亲爱的朋友们,别让你的AI变成只会开卷考试的书呆子!就像GraphRAG一样只是一个又贵又慢的“开卷考试”,能用于拓展新的未知领域,但不一定适合你的生产环境。使用这种"规划-检索-推理"框架,让AI真正学会思考,而不是简单地匹配模式。这不仅能提高AI的准确性,还能让它的回答更加可信和透明。


实验结果

研究者们在两个具有挑战性的数据集上测试了这种方法:WebQuestionSP(WebQSP)和Complex WebQuestions(CWQ)。这些数据集包含了复杂的多步骤问题,就像是给AI出的高难度脑筋急转弯。


结果令人振奋:



在WebQSP上,新方法的Hits@1(即第一个答案就是正确答案的比例)达到了85.7%,比此前的最佳成绩提高了4.4%。这就像是在考试中,不仅答对了题,还总能在第一时间想到正确答案。


在更具挑战性的CWQ数据集上,成绩更是令人瞩目。Hits@1提升了22.3%,F1分数(衡量整体表现的指标)提高了14.4%。这相当于在一场难度很大的智力竞赛中,大幅度地超越了前任冠军。



04

图编码、图推理和开发GraphRAG

理解图编码和图推理对于开发GraphRAG系统具有重要意义,主要体现在以下几个方面:


1. 优化图结构表示


图编码是将图结构转化为语言模型可理解的文本形式的关键步骤。通过探索不同的图编码方法,如邻接表编码、入射表编码、友谊关系编码等,开发者可以找到最适合特定任务和数据集的编码方式。这直接影响了语言模型对图结构的理解能力,从而影响整个系统的性能。


例如,研究发现使用更具描述性的编码方法(如友谊关系编码"A和B是挚友")比简单的数字编码(如"节点0连接节点1")能让模型更好地理解和推理复杂关系。


2. 增强检索效率


图推理能力让系统可以更智能地在知识图谱中导航和检索信息。不同于简单的关键词匹配,图推理可以理解实体之间的关系,从而实现多跳检索和推理。


比如,对于"谁是Alice的孙子?"这样的问题,系统可以通过图推理生成一个推理路径:Alice → 配偶 → 父亲 → 孩子,然后沿着这个路径在知识图谱中检索相关信息。这大大提高了复杂问题的回答准确性。


3. 提升答案生成质量 


图推理为语言模型提供了一个结构化的思考框架。通过"规划-检索-推理"的框架,系统可以:


- 先生成一个解决问题的"路线图"(关系路径)


- 根据这个路径在知识图谱中检索相关信息


- 最后基于检索到的信息进行推理和答案生成


这种结构化的推理过程有助于生成更加全面、连贯和准确的答案,特别是对于需要多步推理的复杂问题。


4. 实现全局总结能力


GraphRAG的一个重要创新是利用图的模块化特性来实现全局总结。通过社区检测算法,系统可以将大型知识图谱划分为多个相关性较强的社区。对这些社区进行独立总结,再汇总这些社区总结,就可以高效地实现对整个数据集的全局总结。


这种方法使得系统能够回答"数据集的主要主题是什么?"这类需要对整体数据有全面理解的全局性问题,这是传统RAG系统难以实现的。


5. 提高可解释性


图结构和图推理过程为系统的决策提供了清晰的路径。开发者可以追踪系统是如何从一个实体到另一个实体,从一个概念到另一个概念。这增强了系统的可解释性,让用户更容易理解和信任系统的输出。


6. 适应不同规模的数据和问题


GraphRAG通过调整社区总结的层级来处理不同规模的数据集和不同复杂度的问题。对于较小的数据集或简单问题,可以使用较高层级的社区总结;对于大型数据集或复杂问题,则可以使用较低层级的社区总结。这种灵活性使系统能够在效率和性能之间取得良好的平衡。


7. 支持迭代式探索


图结构天然支持用户的迭代式探索。用户可以从高层次的社区总结开始,逐步深入到感兴趣的子社区或具体实体。这种交互式的探索方式非常适合数据分析和知识发现等任务。

了解了GraphRAG的底层逻辑,深入理解图编码和图推理对于开发高效、智能和灵活的GraphRAG系统至关重要。它不仅能提升系统在回答复杂问题和全局总结方面的能力,还能增强系统的可解释性、适应性和交互性,为用户提供更好的知识探索和理解体验。


05

坚持实践:Prompt工程师的新武器

对于正在开发AI产品的Prompt工程师来说,这项研究提供了一系列强大的新工具。以下是一些关键的Prompt技巧,它们就像是开启图推理能力的魔法咒语:



###规划提示模板
###用于生成关系路径的提示模板可以这样设计:
CopyPlease generate a valid relation path that ---
<Question>
####这个简洁的模板引导LLM专注于生成与问题相关的关系路径。

##推理提示模板
####用于最终推理的提示模板可以这样设计:
CopyBased on the reasoning paths, ---
Reasoning Paths:
<Reasoning Paths>
Question:
<Question>
####这个模板明确指示LLM基于给定的推理路径进行回答,并要求列出所有可能的答案。

##解释生成提示模板
#####如果需要生成可解释的结果,可以使用以下模板:
CopyBased on the reasoning paths, please answer ---
Here are some examples:
<Examples>
Reasoning Paths:
<Reasoning Paths>
Question:
<Question>
###这个模板通过提供示例,引导LLM生成结构化的解释。

图编码prompt


在编码图结构时,可以尝试不同的表述方式,例如:


  • 邻接表: "In an undirected graph, (i,j) means that node i and node j are connected with an undirected edge."


  • 入射表: "Node 0 is connected to nodes 1, 2. Node 1 is connected to nodes 0, 2. ..."


  • 友谊关系: "James and Robert are friends. James and John are friend


我用友谊关系的提示,写了一段预测人际关系发展趋势的简单代码,运行结果如下:

import networkx as nx
from openai import OpenAI

def build_relationship_graph(people, interactions):
    G = nx.Graph()
    for person in people:
        G.add_node(person['name'], personality=person['personality'])
    for interaction in interactions:
        G.add_edge(interaction['person1'], interaction['person2'],
                   sentiment=interaction['sentiment'],
                   content=interaction['content'])
    return G

def text_representation_of_graph(graph):
    representation = "人际关系图:\n"
    representation += "="*20 + "\n"
    for person in graph.nodes():
        representation += f"{person} ({graph.nodes[person]['personality']}):\n"
        for neighbor in graph.neighbors(person):
            edge_data = graph[person][neighbor]
            representation += f" - 与 {neighbor} 的互动: {edge_data['content']} (情感倾向: {edge_data['sentiment']})\n"
        representation += "\n"
    return representation

def get_relationship_paths(graph, start_person, max_depth=2):
    paths = []
    for node in graph.nodes():
        if node != start_person:
            for path in nx.all_simple_paths(graph, start_person, node, cutoff=max_depth):
                paths.append(path)
    return paths


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询