从文档构建你的第一个知识图谱

你的第一个知识图谱不应该试图一次性捕获所有内容。相反,专注于构建一个能够很好地回答几个关键问题的模型。

从文档构建你的第一个知识图谱
微信 ezpoda免费咨询:AI编程 | AI模型微调| AI私有化部署
AI模型价格对比 | AI工具导航 | ONNX模型库 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo

大多数组织已经拥有构建实用知识图谱的原材料。这些信息存在于PDF、报告、政策、合同、手册、文章和内部笔记中。挑战不在于缺乏数据,而在于数据被锁定在普通文本中。知识图谱将非结构化文本转换为相互连接的事实网络,例如人员、公司、产品、地点、事件及其关系。

Neo4j和Microsoft GraphRAG等现代工具使用类似的过程:将文档分解成更小的片段,提取实体和关系,合并和总结相关信息,然后使用图谱进行搜索、分析或问答。

你的第一个知识图谱不应该试图一次性捕获所有内容。相反,专注于构建一个能够很好地回答几个关键问题的模型。这种方法帮助你快速创建有用的东西,而不是陷入无尽的原型设计中。Neo4j建议从用例和问题开始,专家们一致认为你的schema、identity和查询需求应该从开始就指导图谱的构建。

1、从文档应该回答的问题开始

在开始处理文件之前,先定义项目的成功标准。例如,你想回答诸如"哪些法规影响这个产品?"、"哪些人员和组织一起出现在报告中?"或"哪些文档从不同角度涵盖同一事件?"之类的问题。你的图谱模型应该围绕这些问题构建,因为它们决定了你提取什么、保留什么,以及查询图谱的难易程度。Neo4j的数据建模教程解释说,数据模型描述了回答用例所需的节点、关系、标签、类型和属性。

这个想法看似简单,但影响很大。如果你想搜索合规性,可能需要Regulation、Clause、Product和Jurisdiction等实体。如果你专注于研究发现,可能更关心Paper、Author、Method、Dataset和Claim。当你从问"我能提取什么?"转变为"我需要这个图谱解释什么?"时,你的第一个图谱就会立即得到改善。

2、选择适合项目的图谱模型

存储知识图谱有两种常见方式。**属性图谱(property graph)**存储节点、关系、标签和属性,这是Neo4j使用的模型。RDF图谱将知识表示为主语-谓语-宾语三元组,使用RDF Schema等标准进行建模词汇,使用SPARQL进行查询。

对于你的第一个项目,如果你想快速构建应用程序、可视化关系并使用模式查询连接数据,属性图谱通常更容易。当你需要互操作性、共享词汇、链接数据或基于标准的数据交换时,RDF是更好的选择。这更多是一个工程决策而非严格规则,但它与Neo4j和W3C描述其图谱模型的方式一致。

简而言之,两种模型都可以工作。最佳选择取决于你在第一个版本中最需要什么:快速开发和简单的图谱导航,还是对标准和互操作性的强有力支持。

3、在构建图谱之前将文档转换为干净文本

构建文档知识图谱始于文本提取。Apache Tika是这一步骤的流行工具,因为它可以从超过1000种文件类型中提取文本和元数据,包括PDF、PowerPoint、Excel和Word。它的解析器可以提取内容和元数据,并保留标题和链接等有用的结构。

这很重要,因为文档不仅仅是单词的集合。标题、章节标题、作者、日期、来源和链接等细节通常会成为图谱中的属性或来源链接。例如,Microsoft GraphRAG将每个文档视为一行,包含文本、标题、创建日期和可选元数据,然后进行chunking或索引。

一个常见的错误是过度扁平化文档。如果你的解析器删除了结构,你就会丢失上下文。如果它删除了元数据,你的图谱就会失去可追溯性。尽可能保留标题、来源、日期和章节边界等细节。这些细节有助于使你的图谱更值得信赖。

4、在不破坏含义的情况下对文档进行分块

解析之后,下一步是chunking。这看起来可能微不足道,但它对提取质量有很大影响。Microsoft的RAG指南指出,太小的chunk可能缺乏足够的上下文,而如果重要信息分散在多个chunk中,则可能被遗漏。GraphRAG通过将文档划分为"TextUnits"用于提取和检索来解决这个问题。

主要要点是按含义进行chunking,而不仅仅是按大小。将短段落与其标题和附近上下文一起保留,通常比将其分割成固定长度的集合效果更好。目标是保留足够的上下文以提取有用的实体和关系,同时不让chunk变得太大而导致处理变慢或产生噪音。

如果你的文档包含表格、图表或大量幻灯片,请做好额外努力的准备。Neo4j的LLM Knowledge Graph Builder最适合长篇幅英文文本,对表格、电子表格或充满图像的文档效果较差。

5、在提取之前设计一个轻量级Schema

许多初学者希望模型能自己发现一切。实际上,使用简单的schema通常会获得更好的结果。Neo4j的Knowledge Graph Builder包含一个schema构建器来定义节点和关系类型,其文档说明当你提前设置schema时,提取质量会提高。

对于你的第一个文档知识图谱,一个小schema通常就足够了。你可以从Document、Chunk、Person、Organization、Place、Topic和Event等类型开始,以及HAS_CHUNK、MENTIONS、WORKS_FOR、LOCATED_IN、ABOUT或CITES等关系。目标不是捕获所有内容,而是创建一个你的提取过程可以可靠填充的结构。

如果你选择RDF,RDF Schema为你提供了类、属性、标签、注释、域和范围的词汇。SHACL添加了一种标准方法来验证你的数据图谱是否符合你期望的形状和条件。它们共同提供了一种规范的方式来描述图谱中存在的事物类型以及有效数据应该是什么样子。

6、从文本中提取实体、关系和声明

这是大多数人在考虑从文档构建知识图谱时想象的内容。有两种主要方法:经典NLP和基于LLM的提取。在经典NLP中,命名实体识别(named entity recognition)在文本中查找人员、组织和地点。例如,spaCy的EntityRecognizer标记这些跨度并将它们存储为文档实体。

对于关系提取,Stanford CoreNLP的OpenIE工具以主语、关系、宾语的形式提取关系三元组。如果你没有特定的关系schema或训练数据,这很有帮助。OpenIE研究将其描述为从非结构化文本中提取结构化关系,而不局限于固定的一组关系。

基于LLM的管道更进一步。Microsoft GraphRAG的标准方法从每个文本单元中提取命名实体及其描述,然后找到实体对之间的关系,总结重复的描述,还可以提取声明(claims)。Neo4j的文档到图谱工具使用类似的过程:它们构建文档和chunk的词汇图谱以及节点和关系的实体图谱。

对于你的第一个项目,混合方法通常效果最好。从确定性解析和简单NLP开始清理数据,然后在语言混乱或关系以不同方式表述时使用LLM或图谱提取工作流。Microsoft的FastGraphRAG使用这种混合方法,在速度和成本更重要时,用一些LLM推理换取名词短语提取和基于共现的关系。

7、解决重复项,使图谱反映真实世界

从文档构建的图谱很快就会充满重复项。例如,"IBM"、"International Business Machines"和"the company"可能都指同一个组织。这就是实体链接(entity linking)和解析(resolution)重要的原因。spaCy的EntityLinker通过利用候选生成和上下文进行消歧,将文本提及连接到知识库中的唯一ID。

实体解析是知识图谱维护中的一个基本挑战,而不仅仅是初步任务。关于知识图谱补全的多源实体解析研究将挑战描述为将新实体与图谱中先前识别的实体进行对齐和聚合。你需要的不仅仅是生成图谱,还需要一种技术来判断两个提及是否指同一事物。

实体解析的实用第一步方法是使用主名称、别名、来源提及和上下文。保留原始名称作为证据,但只有在确信它们匹配时才将它们合并为单个实体。GraphRAG的提取过程合并重复实体和关系,然后总结它们的描述作为基线。对于更关键的系统,你需要比简单标题匹配更严格的规则。

8、保留来源,否则你的图谱将难以信任

构建文档图谱时的一个好习惯是保留一种追溯源文本的方法。Microsoft GraphRAG将文档链接到它们创建的文本单元以用于来源追溯。Neo4j的LLM Knowledge Graph Builder还存储文档和chunk的词汇图谱以及实体图谱。

这意味着你的图谱不仅应该说明Person A为Organization B工作。它还应该让你找出哪个文档,以及理想情况下哪个章节提供了该信息。这使得审查、调试和信任你的图谱变得更加容易。

第一个实现的简单模式如下所示:

MATCH (d:Document)-[:HAS_CHUNK]->(c:Chunk)-[:MENTIONS]->(p:Person)-[:WORKS_FOR]->(o:Organization)

RETURN d.title, p.name, o.name

Cypher的MATCH子句正是为这种基于模式的图谱检索而设计的。

9、像真实系统一样验证、索引和查询图谱

数据进入图谱后,验证很重要。在RDF系统中,SHACL是W3C标准,用于根据形状和条件验证RDF图谱。在Neo4j中,索引和约束通过提高检索速度和执行唯一性、存在性、类型和键约束等规则发挥类似的运营作用。Neo4j的文档建议尽早定义约束,因为数据必须在添加时符合它们。

查询是知识图谱与普通文档存储不同的地方。在Neo4j中,Cypher允许你使用MATCH等命令搜索图谱模式。在RDF系统中,SPARQL允许你跨不同数据源查询图谱模式。两种方法都允许你询问关系、路径和特定子图,而不仅仅是关键词匹配。

查询后,你可以使用图谱分析。例如,Neo4j的Node Similarity算法基于共享邻居比较节点以找到相似实体。Microsoft GraphRAG使用Leiden添加分层社区检测,并创建支持广泛分析和重点搜索的摘要。

10、为什么来自文档的知识图谱对RAG如此有效

简单的vector索引可以找到相似的段落,但它不会显示谁与谁相关、哪些实体出现在多个文件中,或证据如何分组。GraphRAG通过提取实体、关系和声明,将它们分组到社区中,并为广泛和重点搜索创建摘要报告来解决这个问题。Neo4j的工具通过将提取的图谱与GraphRAG、vector搜索和text-to-Cypher工作流相结合来实现类似功能。

这就是为什么知识图谱通常充当原始文档和可靠AI应用程序之间缺失的结构。它不会取代文本检索,而是为其提供一张地图。

11、应避免的常见错误

第一个错误是试图一次性建模所有内容。专注于特定用例的小schema更容易检查,并能提供更好的提取。第二个错误是粗心的chunking —— 太小的chunk会丢失上下文,忽略文档结构会损害提取。第三个错误是在不检查来源或验证的情况下信任提取。第四个是假设默认prompt在每个领域都有效。Microsoft GraphRAG建议为你的数据调整prompt,Neo4j说schema指导有帮助。

第五个错误是跳过实体解析。充满重复人员、公司和产品的图谱看起来很丰富,但行为像杂乱。如果你的节点与现实世界的identity不一致,你的分析和检索质量就会受到影响。

12、你的第一个文档知识图谱的实用蓝图

可靠的第一个版本通常遵循以下步骤:从文件中提取文本,保留元数据,按章节chunking,定义简单schema,提取实体和关系,解决重复项,存储文档和实体图谱,添加索引和约束,然后使用Cypher或SPARQL查询结果,具体取决于你的存储。这不仅仅是理论 —— 这是Neo4j和GraphRAG管道中使用的常见方法。

如果你遵循这些步骤,你的第一个知识图谱就已经很有价值了。它将帮助你跨文档跟踪事实,找到重复实体,比关键词索引更清晰地解释关系,并为搜索、分析和AI提供更强大的基础。这就是从文档构建知识图谱的真正好处:使你的文档集合易于导航、理解和使用。

13、常见问题

从文档构建第一个知识图谱的最简单方法是什么?

最简单的方法是从一个小用例开始。将文档解析为文本和元数据,将它们分割成有意义的chunk,提取几种类型的实体和关系,并将所有内容存储在具有链接回源文本的图谱数据库中。Neo4j和GraphRAG管道都使用这种方法。

我应该使用RDF还是属性图谱?

如果你想要快速、以应用为中心的开发,并且易于进行模式查询,请选择属性图谱。如果你需要标准、链接数据和语义网工具,请选择RDF。两者都是知识图谱的好选择。

我需要LLM来构建文档知识图谱吗?

不需要。经典NLP工具可以处理命名实体识别和开放信息提取,许多系统将这些与基于规则的逻辑相结合。当语言复杂、关系微妙或你想要更丰富的摘要时,LLM很有用,但它们不是必需的。

为什么实体解析如此重要?

因为图谱的强度取决于其identity层。如果同一个人或公司作为多个节点出现,你的查询、分析和AI结果将不太可靠。实体链接和解析将提及转换为图谱中的真实世界实体。


原文链接: How to Build Your First Knowledge Graph from Documents

汇智网翻译整理,转载请标明出处