随着大语言模型(LLM)飞速发展,LLMs正在以前所未有的速度改变着我们与信息互动的方式。然而,尽管 LLMs 具有强大的功能,但确存在一些明显缺点,比如幻觉问题、可解释性差、抓不住问题重点、隐私和安全问题等。
大模型问题
-
信息准确性问题:生成式模型可能会“幻觉”(hallucinate),即生成与事实不符的内容。比如预训练的数据不完整、过期,模型采用的训练策略有特定偏好,推理解码策略的随机性等都会造成大模型"说胡话"。
-
知识时效性问题:生成模型的知识范围仅限于训练数据和训练时间点,缺乏实时性。
-
知识覆盖问题:大规模模型虽然包含广泛的知识,但面对某些领域的细节或长尾问题,可能回答不准确或无效。
RAG是什么?
RAG,正是为了尽可能地解决大模型在实际应用中面临的一些问题,特别是“幻觉”问题而诞生的,也是最重要的一种优化方案。
将传统的生成式大模型与实时信息检索技术相结合,为大模型补充来自外部的相关数据与上下文,以帮助大模型生成更丰富、更准确、更可靠的内容。这允许大模型在生成内容时可以依赖实时与个性化的数据和知识,而不只是依赖训练知识。简单的说:RAG给大模型增加了一个可以快速查找的知识外挂。
用一个例子帮助理解RAG:
如果把大模型比喻成一个经过大量知识与技能训练的优秀学生,把大模型响应的过程比喻成考试,那么这个优秀学生在考试时仍然可能会遇到没有掌握的知识,从而编造答案(幻觉)。
RAG就是在这个学生考试时临时给他的一本参考书。我们可以要求他在考试时尽量参考这本书作答,那么在遇到与这本书中的知识相关的问题时,他的得分是不是就高多了呢?
RAG架构
通常情况下,可以把一个简单的RAG应用从整体上分为数据索引(Indexing)与数据查询(Query)两个大的阶段,而在每个阶段都包含不同的处理环节。以上面的举例来解释:
传统RAG的问题
RAG虽然能够较好的回答一些事实性问题,但是在面对一些统计性、总结性、概要性的QFS问题(Query-Focused Summarization)时却表现非常差:当回答问题需要通过共享属性遍历不同的信息片段以提供新的综合见解时,就会发生这种情况,不能像人类思考问题时,将各个点连接起来进行总结概括主题。
GraphRAG基础
在开始之前,我们先快速了解图(Graph)、图数据库(GraphDB)、知识图谱(Knowledge Graph)以及GraphRAG的基础知识。
图
图(Graph)是一种用来表示对象以及它们之间关系的数学结构。任何两个对象之间都可以直接发生联系,所以适合表达更复杂的关系信息。一个图结构的主要的组成是节点和边。
图数据库(GraphDB)
图数据库是一种专门用于存储和操作图结构数据的数据库管理系统。与关系型数据库不同,图数据库使用图数据库是一种专门用于存储和操作图结构数据的数据库管理系统。与关系型数据库不同,图数据库使用节点、边和属性来表示和存储数据。这使得它们非常适合处理高度连接的数据,提供高性能的复杂查询能力,用来遍历与发现有洞察力的数据关系。其最大特点是:
什么是知识图谱
知识图谱是一种基于图结构的语义网络,用于表示现实世界中的知识。这个知识和上学去学的那个知识不是完全一致的,这个知识更接近我们平时所说的信息,任何东西都可以成为知识图谱里的知识。知识图谱的优势
-
结构化信息:知识图谱将信息以节点(实体)和边(关系)的形式组织,使得复杂信息结构化,便于存储和查询。
-
语义理解:通过明确的关系定义,知识图谱可以帮助系统更好地理解信息之间的语义关系,提升信息检索和自然语言处理的效果。
-
知识关联性:知识图谱能够将不同的知识点联系起来,形成更丰富的知识网络,帮助用户发现隐藏的关联。
-
支持推理:基于知识图谱,系统可以进行逻辑推理,从已知的信息推导出新的信息,提高智能应用的能力。
-
可视化:知识图谱通常可以通过图形化的方式展示,使得复杂关系一目了然,便于用户理解和分析。
GraphRAG
graphRAG在整体架构与传统RAG并无更大区别,区别在于检索的知识采用图结构的方式进行构建、存储并检索
GraphRAG 的工作原理
GraphRAG的流程包括两个部分:索引阶段 和 查询阶段。
索引阶段
索引阶段主要负责将非结构化文本数据转化为结构化的知识图谱,并将其存储到数据库中。其主要流程如下:
-
文本切分: 将输入的文本数据按照一定的规则切分成多个文本块 (Text Unit),每个文本块通常包含一个或多个完整的句子。文档和文本单元之间一般存在严格的一对多关系,在极少数情况下,这可以变成多对多关系(当文档很短并且我们需要其中几个来组成一个有意义的分析单元)。
2.实体和关系抽取(图提取): 利用 LLM 从文本块(Text Unit)中抽取实体、关系和声明
实体和关系提取:使用LLM从原始文本中提取实体和关系、包含具由名称、类型和描述的实体列表,以及具有源、目标和描述的关系列表
实体和关系摘要:通过LLM为每个实体和关系提供简短的摘要描述
例如,从句子 "OpenAI 开发了 ChatGPT" 中,可以抽取出实体 "OpenAI" 和 "ChatGPT",以及关系 "开发"。
3.知识图谱构建:将抽取出的实体和关系信息构建成图结构的知识图谱,其中节点代表实体,边代表关系。4.检测和识别社区: 利用图算法(例如,层次化 Leiden 技术)对知识图谱进行社区检测,将具有相似语义的实体聚集在一起,形成不同的社区。可以把社区理解成围绕某个主题的一组紧密相关的实体与关系信息。
-
生成社区摘要: 使用LLM基于社区数据为每个社区的摘要信息,用来了解数据集的全局主题结构和语义。比如:如果社区A是顶级社区,我们将获得关于整个图表的报告,如果社区是较低级别的,我们将获得有关本地集群的报告。这也是Microsoft GraphRAG的核心价值所在,也是回答QFS问题的关键。
在这个过程中,自然语言文本-->结构化的图谱--->自然语言摘要,由于转化的知识图谱组合了来自多个原始文本的实体和关系信息,因此基于社区的自然摘要就包含了跨多个数据源和文档的浓缩信息,因此可以很好的回答QFS问题
-
向量化: 利用 LLM 将实体、关系、社区概括等信息转化为向量表示,用于后续的语义搜索。
-
存储: 将构建好的知识图谱、社区信息和向量表示等数据存储到数据库中,供查询引擎使用。
查询阶段
GraphRAG定义了两种差异非常大的查询模式:local查询和global查询。
local查询:
-
local查询会根据输入的查询问题与对话历史,从知识图谱中识别出最相关的实体。
-
从这些实体开始,提取与实体关联的原始文本块、社区报告、实体关系等内容,并对其进行排序和筛选,最终形成参考的上下文。
-
借助LLM与提示模板,输入上下文与原始问题,生成最终响应。local查询相比RAG会产生更大的上下文,所以一次query使用的token比普通的RAG要多不少。从它使用信息,可以看出loccal查询更适合针对具体事实的提问
global查询:
global模式采用了分布式计算中的Map-Reduce架构。可以简单概括为:
-
MAP过程:根据用户输入问题与对话历史,查询指定层次结构上(community_level)的所有社区报告,对这些社区报告分成多个批次生成带有评分的中间响应(RIR),评分用来表示这个观点的重要性
-
Reduce过程:对中间响应进行排序,选择最重要的观点汇总并作为参考的上下文,最后交给LLM生成最终响应结果
通过使用全局搜索,遍历整个图谱以总结主题和概念,global模式更适合处理摘要、总结类、相对抽象的问题。
GraphRAG vs RAG
LazyGraphRAG
微软研究院11月发布了GraphRAG迭代版本——LazyGraphRAG。核心亮点是极低的使用成本,其数据索引成本仅为现有GraphRAG 的。此外,LazyGraphRAG 引入了全新的混合数据检索方法,大幅提升了生成结果的准确性和效率。该版本将很快开源,并纳入到 GitHub GraphRAG 库中。
关键特点:
-
LazyGraphRAG在数据索引成本方面大幅下降,仅为GraphRAG的0.1%。同时,其成本与向量RAG相当。
-
在与向量RAG相近的查询成本下,LazyGraphRAG在本地查询方面的性能超越了其他查询方法,包括GraphRAG已经提供的本地搜索(Local Search)与最新推出的DRIFT搜索。
-
相同配置下的 LazyGraphRAG 在全局查询中表现出与 GraphRAG 全局搜索(Global Search)相当的答案质量,但查询成本却降低了 700 多倍。
可以看到,两者最主要的区别是: