今天是2024年7月13日,星期六,北京,天气晴。
我们来 《The GraphRAG Manifesto: Adding Knowledge to GenAI》(https://neo4j.com/blog/graphrag-manifesto/) ,这个文章介绍了GraphRAG(Graph-augmented Retrieval-Augmented Generation),通过结合知识图谱来增强传统的检索增强生成(RAG)模型。
核心观点认为,知识图谱在提供确定性答案、上下文和与真实世界知识连接方面的重要性,这些是传统基于文本的AI技术所缺乏的。
此外,GraphRAG相对于仅使用向量(Vector-only RAG)的RAG模型的优势,包括更准确的答案、更丰富的上下文、以及更好的可解释性和可审计性。
并比较了向量和图谱两种知识表示方式,指出知识图谱在人类和机器理解、推理方面的优势。
通读了几遍,科普意义还是有的,门槛不高,供大家一起参考并思考,大家可以仔细读,会有收获。
We’re Entering the “Blue Links” Era of RAG,我们正在进入RAG的‘蓝链’时代”
我们正处于利用检索增强生成(RAG)实现任何显著有用功能的边缘,你不能仅仅依赖自回归大型语言模型(LLMs)来做出决策。我知道你在想什么:“RAG是答案。”或者微调,或者GPT-5。
是的。像基于向量的RAG和微调这样的技术可以提供帮助。它们对于一些用例来说已经足够好了。但是,还有另一类用例,这些技术都会遇到一个天花板。基于向量的RAG——就像微调一样——提高了许多类型问题正确答案的概率。然而,这两种技术都没有提供正确答案的确定性。通常,它们也缺乏上下文、色彩以及与你已知真实情况的联系。此外,这些工具没有给你留下多少关于它们为何做出特定决策的线索。
回到2012年,谷歌推出了他们的第二代搜索引擎,并发表了一篇标志性的博客文章,标题为“引入知识图谱:事物,而不是字符串。”(Introducing the Knowledge Graph: things, not strings1, https://blog.google/products/search/introducing-knowledge-graph-things-not/)。
他们发现,如果你使用知识图谱来组织所有这些网页中由字符串表示的“事物”,除了也进行所有的字符串处理之外,能力上的巨大飞跃是可能的。我们今天在GenAI中看到了同样的模式。许多GenAI项目正在遇到一个天花板,结果的质量受到使用中的解决方案处理的是“字符串,而不是事物”这一事实的限制。
快进到今天,前沿的人工智能工程师和学术研究人员发现了谷歌所做的同样的事情:突破这个天花板的秘诀是知识图谱。换句话说,将关于“事物”的知识引入基于统计的文本技术的混合中。这就像任何其他类型的RAG一样,只是除了向量索引之外,还包括对知识图谱的调用。或者换句话说,也就是GraphRAG。
这篇文章旨在全面而易于阅读地介绍GraphRAG。事实证明,构建您的数据知识图谱并在RAG中使用它可以给您带来几个强大的优势。有充分的研究证明,它可以为您提供比使用普通仅向量RAG的LLM更好的答案,几乎所有问题都是如此。
这本身就将是GraphRAG采用的巨大推动力。除此之外,您还会因为数据在构建应用程序时可见而获得更轻松的开发体验。第三个主要优势是,图谱可以被人类和机器轻松理解并进行推理。因此,使用GraphRAG构建不仅更简单,而且可以给您带来更好的结果,而且——在许多行业中这是一个杀手锏——是可解释和可审计的!我相信GraphRAG将取代仅向量RAG,并成为大多数用例的默认RAG架构。这篇文章解释了为什么。
让我们明确一下,当我们说图谱时,我们指的是像这样的东西:
或者这个:
或者这个:
如果你想更深入地了解图谱和知识图谱,我建议绕道去Neo4j的GraphAcademy或者Andrew Ng的Deeplearning.ai课程上关于RAG的知识图谱(https://x.com/AndrewYNg/status/1767941813820862655?s=20)。我们在这里不会停留在定义上,而是假设对图谱有基本的工作知识,继续前进。
如果你理解上面的图片,你可以看到你可能如何查询底层知识图谱数据(存储在图数据库中)作为你的RAG流程的一部分。这就是GraphRAG的实质。
典型RAG的核心——向量搜索——接收一段文本,并从一个候选的书面材料体中返回概念上相似的文本。这是非常令人愉快的自动化魔法,对于基本搜索非常有用。
每次你这样做时,你可能不会想到向量是什么样子,或者相似性计算在做什么。让我们以人类的视角、向量的视角和图谱的视角来看待一个苹果:
人类对苹果的表示是复杂且多维的,不是我们可以完全在纸上捕捉的,想象这张美丽的诱人图片代表了苹果的所有感知和概念的荣耀。
苹果的向量表示是一个数字数组——统计领域的构造。向量的魔力在于它们每个都以编码形式捕捉了它们对应文本的本质。
然而,在RAG的背景下,它们只有在你需要识别一堆词与另一堆词有多相似时才有价值。做到这一点就像运行一个相似性计算(也就是向量数学)并得到一个匹配。
但是,如果你想理解向量内部是什么,理解它周围是什么,掌握文本中所代表的事物,或者理解这些事物如何适应更大的上下文,那么作为表示方式的向量就无法做到这一点。
相比之下,知识图谱是声明性的——或者用AI术语来说,是符号性的——对世界的表示。因此,人类和机器都能理解并推理知识图谱。
这是一个大问题,我们稍后将重新讨论。此外,你可以查询、可视化、注释、修复和扩展知识图谱。知识图谱代表了你的世界模型——代表你正在工作的领域的那一部分世界。
这并不是一场竞争,向量和图谱查询在RAG中各自增加了价值。正如LlamaIndex的创始人Jerry Liu所指出的,将GraphRAG视为包含向量是有帮助的。这与“仅向量RAG”不同,后者严格基于基于文本中单词的嵌入进行相似性比较。
从根本上说,GraphRAG是包含知识图谱的RAG。正如下面所示,核心GraphRAG模式是直接的。它基本上是与仅使用向量的RAG相同的架构,但是加入了知识图谱的层次。
1)GraphRAG模式
在这里,你可以看到图查询被触发。它可以选择性地包括向量相似性组件。你可以选择将你的图和向量分别存储在两个不同的数据库中,或者使用像Neo4j这样的图数据库,它也支持向量搜索。
使用GraphRAG的一个常见模式如下:
执行向量或关键词搜索以找到一组初始节点。->遍历图以获取有关相关节点的信息。->可选地,使用基于图的排名算法(如PageRank)重新排列文档。
模式因用例而异,并且像当今AI中的其他一切一样,GraphRAG被证明是一个丰富的领域,每周都有新发现出现。
2)GraphRAG 生命周期
使用GraphRAG的GenAI应用程序遵循与任何RAG应用程序相同的模式,只是在开始时增加了“创建图”的步骤:
创建图类似于将文档分块并加载到向量数据库中,工具的进步使得图的创建变得非常容易,主要包括三方面:
图是高度迭代的——你可以从一个“最小可行图”开始,然后从那里扩展。
一旦你的数据在知识图谱中,它就变得非常容易发展。你可以添加更多种类的数据,以获得数据网络效应的好处。你也可以提高数据的质量,以提升你的应用程序结果的价值。
这个栈的这一部分正在迅速改进,这意味着随着工具变得更加复杂,图的创建将变得更加容易。
在早期的图片中添加图创建步骤,你会得到一个看起来像这样的流程:
我稍后将更深入地讨论图的创建。现在,让我们将这一点放在一边,谈谈GraphRAG的好处。
我们从GraphRAG相对于仅向量RAG看到的好处主要分为三个主要方面:
更高准确性和更完整的答案(运行时/生产优势)
一旦你创建了知识图谱,那么构建和随后维护你的RAG应用程序就会更容易(开发时间优势)
更好的可解释性、可追溯性和访问控制(治理优势)
让我们深入探讨这些:
1)更高准确性和更有用的答案
我们看到GraphRAG的第一个(也是最直观的)好处是更高质量的响应。除了我们从客户那里看到的越来越多的示例外,越来越多的学术研究也支持这一点。
Data.world这样的数据目录公司在2023年底发布了一项研究 (https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/) ,显示GraphRAG平均提高了LLM响应在43个商业问题上的准确性3倍。基准测试发现,当由知识图谱支持时,响应的准确性有了显著提高。
最近可能更知名的是微软从2024年2月开始的一系列帖子,标题为"GraphRAG: 解锁LLM在叙事性私有数据上的发现",以及相关的研究论文和软件发布。他们观察到,基线RAG(即带有向量的RAG)存在以下两个问题:
基线RAG难以将点连接起来。这发生在回答问题需要通过它们共享的属性遍历不同的信息片段以提供新的综合见解时。
当被要求全面理解大型数据集合或甚至是单一大型文档上的总结性语义概念时,基线RAG表现不佳。
微软发现,“通过使用LLM生成的知识图谱,GraphRAG极大地改善了RAG的‘检索’部分,用更高相关性的内容填充上下文窗口,从而得出更好的答案,并捕获证据来源。”他们还发现,
GraphRAG所需的token数量比替代方法少26%到97%,使其不仅在提供答案方面更好,而且更便宜、更可扩展。
深入探讨准确性主题,重要的不仅是答案是否正确;还有答案的有用性。人们发现,GraphRAG不仅使答案更准确,而且更丰富、更完整、更有用。
LinkedIn最近描述GraphRAG对他们客户服务应用程序影响的论文提供了一个很好的例子。GraphRAG提高了回答客户服务问题的正确性和丰富性(从而提高了有用性),将客户服务团队的每个问题解决时间中位数减少了28.6%。
来自Neo4j和我们的合作伙伴在GCP、AWS和Microsoft的GenAI研讨会的另一个类似例子()https://github.com/neo4j-product-examples/genai-workshop)。
下面的目标是对SEC文件集合的样本查询,很好地说明了使用向量+GraphRAG与仅使用向量RAG所能得到的不同类型的答案:
请注意,描述可能受到锂短缺影响的公司特征与列出可能受到锂短缺影响的特定公司之间的区别。
如果你是一名投资者,希望在市场变化或公司希望在面对自然灾害时重新平衡其供应链,能够访问后者而不仅仅是前者可能会改变游戏规则。这里,两个答案都是准确的,第二个答案显然更有用。
Going Meta的第23集(Episode 23, https://www.youtube.com/watch?v=E_JO4-2D5Xs)由Jesus Barrasa提供,他使用法律文件用例,从词汇图谱开始。
那些观察X-sphere并在LinkedIn上活跃的人会定期发现新的例子,这些例子不仅来自实验室,还来自现场。这里,Lettria的Charles Borderie给出了一个仅向量RAG与GraphRAG的对比例子,针对一个基于LLM的文本到图的流程,该流程将10,000篇金融文章摄入知识图谱:
如你所见,与普通RAG相比,GraphRAG不仅显著提高了答案的质量,而且所需的token数量减少了三分之一。
我将包括的最后一个值得注意的例子来自Writer(https://writer.com/)。
他们最近宣布了一份基于RobustQA框架的RAG基准测试报告(https://arxiv.org/abs/2405.02048),比较了他们基于GraphRAG的方法与竞争中的最佳工具。
GraphRAG的得分为86%,这是与竞争相比的显著提高,后者的得分在33%到76%之间,延迟相当或更好。
每周我都会与来自许多行业的客户会面,他们在使用各种GenAI应用程序时都体验到了类似的积极效果,知识图谱通过使结果更准确和更有用,为GenAI铺平了道路。
2)改进的数据理解,更快的迭代
知识图谱在概念上和视觉上都是直观的。能够探索它们通常会揭示新的见解。许
多用户报告的一个意想不到的副作用是,一旦他们投资创建了知识图谱,他们发现它以意想不到的方式帮助他们构建和调试他们的GenAI应用程序。这部分与将数据视为图谱如何绘制了应用程序底层数据的生动画面有关。
图谱还为您提供了将答案追溯到数据的钩子,并将数据追溯到因果链上。
让我们以上面的锂暴露问题(lithium exposure) 为例。如果你可视化向量,你会得到类似的东西,只是有更多的行和列:
当你将数据作为图谱工作时,你可以以一种在向量表示中不可能的方式理解它。
这是LlamaIndex 10最近网络研讨会的一个例子,展示了他们提取向量化块的图谱(词汇图谱)和LLM提取的实体(领域图谱)的能力,并将两者用“MENTIONS”关系联系在一起:
(你可以在Langchain、Haystack、SpringAI等中找到类似的例子。)
查看这个图表,你可能会开始看到,当你的数据以图谱的形式存在时,如何为你打开了一系列新的发展和调试可能性。数据的各个部分保留了它们的价值,而结构本身存储并传达了额外的含义,你可以用它来为你的应用程序增加更多的智能。
这不仅仅是可视化。这也是拥有以一种传达和存储含义的方式结构化的数据的影响。这里是一个知名金融科技公司的开发者在将知识图谱引入他们的RAG工作流程一周后的反应:
这个开发者的反应与测试驱动开发假设一致,即验证答案的正确性,而不是信任。就我个人而言,我有点害怕将100%的自主权交给SkyNet,让它做出完全不透明的决定。
更具体地说,即使是AI非末日论者也可以欣赏能够看到与“Apple, Inc.”相关的一块或文档不应该被映射到“Apple Corps”的价值。由于_数据_最终是驱动GenAI决策的,拥有手头的设施来评估和确保正确性至关重要。
3)治理:可解释性、安全性等
GenAI决策的影响越大,你就越需要能够说服最终将对其错误的决策负责的人_信任_该决策。
这通常涉及能够审计每个决策。它还需要一个坚实且可重复的良好决策记录。但这还不够。你还需要能够在他们对决策提出质疑时向该人解释背后的推理。
LLM本身并没有提供一个好的方法来做这件事。是的,你可以获得用于做出决策的文档的引用。但这些并没有解释决策本身——更不用说LLM以编造这些引用而闻名,知识图谱在完全不同的层面上运作,使GenAI管道内的推理逻辑更加清晰,输入也更容易解释。
让我们继续上面的例子,Lettria的Charles用从10,000篇金融文章中提取的实体加载知识图谱,并使用这个与LLM一起执行GraphRAG。我们看到这提供了更好的答案。让我们看看数据:
将数据视为图谱是第一部分。数据也是可导航和可查询的,并且可以随着时间的推移进行更正和更新。
治理优势在于,它使查看和审计数据的“世界模型”变得更加容易。使用图谱使负责人更有可能理解决策,相对于提供相同数据的向量版本。在质量保证方面,将数据以知识图谱的形式存在,可以更容易地发现数据中的错误和惊喜(无论是愉快的还是不愉快的),并将它们追溯到它们的来源。
你还可以捕获图谱中的起源和置信度信息,并使用这些信息不仅在你的计算中,也在你的解释中。这在查看相同数据的仅向量版本时是不可能的,正如我们前面讨论的,对于普通人,甚至是高于普通人来说,这是相当难以理解的。
知识图谱还可以显著增强安全性和隐私性。这在构建原型时往往不是最重要的,但它是通往生产的关键部分。如果你在像银行或医疗保健这样的受监管的业务中,任何给定员工对信息的访问可能取决于该人的角色。
LLM或向量数据库都没有很好的方法来限制信息的范围以匹配角色。你可以在知识图谱中使用权限轻松处理这个问题,其中任何给定参与者访问数据的能力由数据库管理,并排除他们不允许看到的结果。
这里是一个简单的安全策略的模拟,你可以在具有细粒度访问控制的知识图谱中实现:
人们经常问我构建知识图谱需要什么。理解答案的第一步是要知道两种与GenAI应用最相关的图谱:
领域图谱,是你的应用程序相关的世界模型的图表示。这里是一个简单的例子:
词汇图谱,是文档结构的图。最基本的词汇图谱为每段文本都有一个节点:
人们经常扩展这一点,包括文本块和文档对象(如表格)、章节、节、页码、文档名称/ID、集合、来源等之间的关系。你也可以像这样组合领域和词汇图谱:
创建词汇图谱很容易,主要是一种简单的解析和分块策略。至于领域图谱,根据你引入的数据是来自结构化源、非结构化文本还是两者兼有,有几种不同的路径。
幸运的是,从非结构化数据源创建知识图谱的工具正在迅速改进。例如,新的Neo4j知识图谱构建器可以取PDF文档、网页、YouTube视频或维基百科文章,并自动从它们创建知识图谱。
它就像点击几个按钮一样简单,并允许你可视化(当然也可以查询)你的输入文本的领域和词汇图谱。它强大且有趣,大大降低了创建知识图谱的障碍。这个“词汇图谱”,它不是世界模型,而是关于向量块以及它们如何相互关联以及与文档结构(如表格/图表/页面/文档/集合/作者等)的关系的图谱。
关于客户、产品、地理位置等的数据可能以结构化形式存在于企业中的某处,并可以直接从它所在的地方获取。以最常见情况为例,如果它在关系数据库中,你可以使用遵循经过验证的关系型到图映射规则的标准工具。
一旦你有了知识图谱,就有越来越多的框架可以用来进行GraphRAG,包括LlamaIndex属性图索引、Langchain的Neo4j集成以及Haystack等。这个领域发展迅速,但现在程序化方法已经变得简单。
在图构建方面也是如此,有像Neo4j Importer这样的工具,它具有用于将表格数据映射和导入图的图形用户界面,以及上面提到的Neo4j Knowledge Graph Builder。
下图总结了构建知识图谱的步骤。
你还会发现自己在使用知识图谱时做的另一件事是将人类语言问题映射到图数据库查询。Neo4j的一个新开源工具,NeoConverse,旨在帮助使用自然语言查询图谱,这是向通用化迈出的坚实的第一步。
虽然图谱确实需要一些工作和学习才能开始,但也有好消息,那就是随着工具的改进,它变得越来越容易。
LLMs和基于向量的RAG所固有的基于文字的计算和语言技能提供了好的结果。要获得一致的极好的结果,需要超越字符串。
就像谷歌发现要掌握搜索,他们需要超越纯粹的文本分析并绘制出字符串下面的底层事物一样,我们开始看到AI世界中出现了同样的模式。这种模式是GraphRAG。
如上图所示,进步发生在S曲线中:当一项技术达到顶峰时,另一项技术会推动进步并超越前者。随着GenAI的发展,在答案质量至关重要的用途中;
或者当内部、外部或监管利益相关者需要可解释性;或者当需要对数据访问进行细粒度控制以保护隐私和安全时,那么你的下一个GenAI应用程序很有可能会使用知识图谱。
因此,知识图谱的概念,本身已经在发生改变。
1、https://neo4j.com/blog/graphrag-manifesto/,这也是本文的英文原文链接,作者Philip Rathle
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。