链载Ai

标题: GraphRAG 文档结构:打造高性能实体溯源方案 [打印本页]

作者: 链载Ai    时间: 1 小时前
标题: GraphRAG 文档结构:打造高性能实体溯源方案


ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin-right: 8px;margin-bottom: 1.5em;margin-left: 8px;">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;line-height: 1.75;border-radius: 4px;display: block;margin: 0.1em auto 0.5em;" title="null"/>

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: normal;visibility: visible;">作者:陈梓康,蚂蚁图计算研发工程师

众所周知,GraphRAG将文档内容抽取为知识图谱三元组后,实际上仅保留了关联性知识信息,因此不可避免地会丢失原文的一些内容细节。在对数据完整度要求严格的业务场景,如金融、医疗、保险等行业,这是不希望看到的结果。为了解决此类业务诉求,我们将文档结构信息引入GraphRAG链路,以解决知识抽取后原文信息损失的问题。同时,我们也从端到端优化了GraphRAG链路,大幅提升了知识图谱的构建和检索性能。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;margin: 2em auto 1em;padding-right: 1em;padding-left: 1em;border-bottom: 2px solid rgb(59, 130, 244);">1. 摘要

GraphRAG 是一个创新的知识检索与问答增强框架,它巧妙地结合了图数据库技术与检索增强生成(RAG)方法。GraphRAG 往往在处理复杂数据关系任务上取得比传统 RAG 更好地效果,是当下 LLM 领域热门的工程方向之一。

作为 DB-GPT 万星开源项目的重要组件之一,蚂蚁自研的 GraphRAG 近期获得了显著的性能提升——改进的 GraphRAG 在原有的社区摘要增强和混合检索支持的基础上,新增了文档结构(Document Structure)索引,进一步提升了知识图谱的丰富度和知识召回的完备性。同时,继续兼容基于 AntV G6 引擎和 TuGraph 引擎的知识图谱的酷炫渲染,GraphRAG 让文档中的复杂数据关系一目了然。

本文将详细介绍 DB-GPT GraphRAG 系统的最新技术改进,重点包括文档结构索引的创新实现、知识图谱构建的效率优化,以及多维检索机制带来的效果提升。通过与业界标杆的对比测试,验证了优化方案在降低资源消耗的同时,保持了知识表示的完整性和准确性。文章同时展示了实际应用案例,为读者提供了直观的技术参考。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;margin: 2em auto 1em;padding-right: 1em;padding-left: 1em;border-bottom: 2px solid rgb(59, 130, 244);">2. 知识图谱构建

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(59, 130, 244);">2.1 文档结构图谱

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(59, 130, 244);">2.1.1 文档解析

为提升文档解析的精确度,我们对 Markdown 格式文件实现了增强支持。系统通过识别标准格式文档中的标题层级符号(如"#"、"##"等),将文档智能切分为多个独立的文本块(content block, 简称 chunk)。这种结构化解析方法不仅保留了原始内容的完整性,更重要的是准确捕获了内容之间的层级关系。

基于这些层级关系,我们构建了一个有向图结构:

每个节点代表一个文本块(chunk)。

边的类型分为两种(有向边):

•next:连接同一层级的相邻文本块,表示内容的顺序关系。

•include:连接不同层级的文本块,表示上下级包含关系。

为了直观展示文档结构解析的过程,让我们通过一个具体的示例来理解这个机制,考虑以下 Markdown 文档片段:

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;overflow-x: auto;border-radius: 8px;padding: 1em;margin: 10px 8px;">#机器学习基础
##监督学习
###分类算法
###回归算法
##无监督学习
###聚类算法

这个文档会被切分成以下文本块(用[...]表示具体内容):

•chunk1: "# 机器学习基础 [...]"
•chunk2: "## 监督学习 [...]"
•chunk3: "### 分类算法 [...]"
•chunk4: "### 回归算法 [...]"
•chunk5: "## 无监督学习 [...]"

•chunk6: "### 聚类算法 [...]"

同时,这些文本块(chunk)之间存在着两种有向关系(包含 include、连接 next):

• include 边:chunk1 包含 chunk2 和 chunk5;chunk2 包含 chunk3 和 chunk4;chunk5 包含 chunk6。

• next 边:chunk2 连接 chunk5;chunk3 连接 chunk4。

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;padding-left: 8px;border-left: 3px solid rgb(59, 130, 244);">2.1.2 文档结构图谱构建

自然地,得益于文本块(chunk)之间的有向关系,可以将文件结构组织为有向图。顺便,将其写入到知识图谱(基于 TuGraph 底座)。如图所示,在图的上半部分,其中的节点可以是文件的一个内容分片/文本块(chunk,紫色节点),边则代表了文本块(chunk)之间在原文档中的结构关系。

通俗地说,Document 1 就像一本教程的主目录,它通过包含(include)关系连接到不同的章节(Chunk 1、2、3)。每个章节又可以包含(include)更具体的知识点(Entity)。同时,通过 next 关系,我们能清晰地看到学习的推荐顺序。

2.2 三元组图谱

完成文档结构图构建后,下一个关键步骤是通过语义理解提取文档中的知识实体与关系,构建结构化知识图谱。我们采用了创新的"上下文增强"方法,通过多维度信息融合提升知识抽取的准确性。

2.2.1 相似文本块检索

•对于每个待处理的文本块(chunk),我们首先通过向量相似度检索找到语义相近的其他 top k 个文本块(chunk)。

•这些相似的文本块将作为补充上下文,帮助 LLM 更好地理解当前内容。

2.2.2 三元组知识抽取

•将当前文本块和相关上下文一起作为一个请求,并发送到 LLM 服务端。
•基于更丰富的上下文,LLM 能够更准确地识别和抽取出知识三元组。

•抽取的结果遵循 【entity】--(relation)->【entity】的标准格式。

2.2.3 并发抽取优化

1. 文本块的三元组抽取是相对独立的进程,因此,我们采用并发的形式来批次执行进程。

2. 考虑到三元组知识抽取任务的特点:

    •各文本块之间的处理相互独立。
    •计算过程无共享状态。

    •任务粒度适中。

    3. 我们实现了基于文本块的并发处理机制:

    •通过批处理方式,平衡并发数量和 LLM 调用资源。

    •从而,实现了处理速度和资源利用的最优平衡。

    4. 该提出的并发优化方案取得了显著的性能提升:任务处理时间降低至原有耗时的 20%。这种五倍的性能提升充分证明了并发策略在大规模知识抽取场景下的效果。在实际运行中,我们也观察到了两个主要的性能瓶颈:

这些限制是由 LLM 服务的基础架构决定的,超出了我们的 GraphRAG 框架的优化范围。不过,这也为我们指明了未来的优化方向:


“上下文增强”方法的优势在于:

• LLM 能够获得更全局的知识视角,不会被单个文本块的局部信息所限制。
•通过上下文的补充,能够建立起更准确的实体关系。

•最终形成的知识图谱质量更高,关系更加准确和完整。

例如,当处理一个关于“深度学习”的文本块(chunk)时,通过检索相似内容,LLM 可以(通过系统支持的相似度算法)同时看到“神经网络结构”、“反向传播算法”等在意义上相似的文本块(chunk),从而帮助 LLM 更准确地抽取出三元组/实体之间的关系,如:【深度学习】--(使用)->【反向传播算法】;【神经网络】--(是)->【深度学习模型】。

至此,加上前文提到的文档结构,我们拓展了 GraphRAG 对于 Graph 的定义范畴:

其中,

•三元组有向图(Triplets Graph):捕获实体间语义关系。

•文档结构图(Document Structure Graph):保持知识层级结构。

这种图结构不仅仅绘制了一张“知识地图”,还为 LLM 顺藤摸瓜式地依据 entity 回溯到原始文本块(chunk)提供了可能性。在未来,我们或许构建一个更加复杂、覆盖更加全面的信息的图,支持更加复杂的检索算法。

2.3 社区摘要总结

为了更好地宏观地、全局地理解和组织图谱中的知识,我们引入了社区层面的知识总结和归纳机制。这个过程分为三个关键步骤:

2.3.1 社区发现

GraphRAG 默认采用 Leiden 算法进行社区检测。它以其高效和准确的特点著称,该算法能够:

•自动发现知识实体间的紧密关联群组。
•在保持社区内部联系紧密的同时,确保社区间边界清晰。

•适应性地确定合适的社区规模。

2.3.2 社区文本化

对于每个识别出的社区,我们进行了系统的信息提取(即,图的展开过程):

•收集社区内所有实体的属性信息、提取实体间的关系描述。

•将图结构信息转换为结构化文本表示。

2.3.3 社区总结

基于文本化的社区信息,我们通过以下步骤生成社区摘要:

•调用 LLM 分析社区的核心主题和关键概念,生成凝练的社区主题描述(使用并发处理社区摘要总结功能)。

•将摘要信息持久化存储,便于后续检索和分析。

因此,得益于文档结构+三元组结构,以及社区摘要总结,新版的 GraphRAG 不仅提供了知识图谱的局部视角,帮助人们发现知识间的紧密联系,还为知识图谱的应用提供了更高层次的语义理解基础。

2.4 图数据建模

在设计 GraphRAG 数据持久化的阶段,我们选择了 TuGraph 作为底层存储引擎。同时,在原来的图模型(Graph Schema)的基础上,新设计了一套完整的图模型,使得图谱表达、存储和索引文档结构的部分。因此,新的图模型具备如下特点:

1. 完整保留文档的层级结构。
2. 清晰表达文本块之间的关系。
3. 支持三元组知识实体的关联表示。

2.4.1 点类型

GraphRAG 定义了三种基本的节点类型:

  1. 1.document:表示文档对象

  2. •核心属性:id、name。
    •可选属性:community_id(用于社区划分)。
  3. 2.chunk:表示文档的文本块







欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5