AI知识库

53AI知识库

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


利用LLM Graph Transformer实现知识图谱的高效构建
发布日期:2024-11-13 08:27:12 浏览次数: 1628 来源:大模型之路



在信息爆炸的时代,如何有效地从海量文本中提取结构化信息并构建知识图谱(Graphusion:基于零样本LLM的知识图谱构建框架),成为了一个备受关注的问题。知识图谱是一种强大的工具,它以图的形式表示实体及其之间的关系,能够帮助我们更好地理解和利用数据。近年来,随着大型语言模型(LLM)的飞速发展,LLM Graph Transformer应运而生,它利用LLM的能力,实现了从文本中自动提取实体和关系并构建知识图谱(GraphRAG原理深入剖析-知识图谱构建)的功能。今天我们一起了解一下LLM Graph Transformer。

一、LLM Graph Transformer介绍

LLM Graph Transformer是一种利用大型语言模型(LLM)构建知识图谱的工具。它通过提取文本中的实体和关系,将这些信息以图的形式表示出来,从而形成一个知识图谱。LLM Graph Transformer提供了两种主要的应用模式:工具基于模式和提示基于模式。这两种模式在不同的场景下各有优势,可以根据具体需求进行选择。

  1. 工具基于模式(默认模式)

  • 工作原理:当LLM支持结构化输出或函数调用时,工具基于模式会利用LLM的内置功能来提取实体和关系。通过定义工具规范,可以确保实体和关系以结构化、预定义的方式被提取出来。

  • 优势:工具基于模式减少了提示工程的工作量,因为LLM已经内置了提取结构化信息的能力。此外,这种模式还支持属性提取,可以获取更多关于实体和关系的详细信息。

  • 适用场景:适用于LLM支持结构化输出或函数调用的场景。

  • 提示基于模式(备用模式)

    • 工作原理:在LLM不支持工具或函数调用的情况下,LLM Graph Transformer会回退到提示基于模式。这种模式使用少样本提示来定义输出格式,引导LLM以文本方式提取实体和关系。然后,通过自定义函数将LLM的输出解析为JSON格式,用于填充节点和关系。

    • 优势:提示基于模式具有更高的灵活性,可以适应不同LLM的特性和输出格式。即使LLM不支持结构化输出或函数调用,也可以通过提示来引导其提取信息。

    • 适用场景:适用于LLM不支持结构化输出或函数调用的场景,或者当需要更多自定义输出格式时。

    二、创建知识图谱的具体步骤

    (一)设置 Neo4j 环境

    1. 选择 Neo4j 实例

    • 可以使用免费的 Neo4j Aura 云实例,它提供了便捷的云端数据库服务。或者,通过下载 Neo4j Desktop 应用程序并创建本地数据库实例来设置本地的 Neo4j 环境。

  • 配置连接参数

    • 使用Neo4jGraph类来配置与 Neo4j 数据库的连接。需要指定url、username(如neo4j)和password(如cables - anchors - directories)等参数,同时可以设置refresh_schema=False等其他可选参数。

      • from langchain_community.graphs import Neo4jGraph
        graph = Neo4jGraph(url="bolt://54.87.130.140:7687",username="neo4j",password="cables-anchors-directories",refresh_schema=False)

      (二)定义图模式(Graph Schema)

      1. 节点类型定义

      • 使用allowed_nodes参数来约束要提取的节点类型。这样 LLM 就会专注于提取这些类型的节点,减少不必要的节点提取,提高提取的准确性和一致性。

        • allowed_nodes = ["Person", "Organization", "Location", "Award", "ResearchField"]nodes_defined = LLMGraphTransformer(llm=llm, allowed_nodes=allowed_nodes)data = await nodes_defined.aconvert_to_graph_documents(documents)graph.add_graph_documents(data)
      • 关系类型定义

        • 可以通过allowed_relationships参数来指定允许的关系类型。最初可以使用简单的关系类型列表,如["SPOUSE", "AWARD", "FIELD_OF_RESEARCH", "WORKS_AT", "IN_LOCATION"],但这种方式可能导致关系连接的节点不明确和方向不一致等问题。后来引入了更高级的三元组格式,如[("Person", "SPOUSE", "Person"), ("Person", "AWARD", "Award"), ("Person", "WORKS_AT", "Organization"), ("Organization", "IN_LOCATION", "Location"), ("Person", "FIELD_OF_RESEARCH", "ResearchField")],明确了关系的源节点、关系类型和目标节点,大大提高了关系提取的一致性。

          • allowed_nodes = ["Person", "Organization", "Place", "Award", "ResearchField"]allowed_relationships = ["SPOUSE", "AWARD", "FIELD_OF_RESEARCH", "WORKS_AT", "IN_LOCATION"]rels_defined = LLMGraphTransformer(llm=llm,allowed_nodes=allowed_nodes,allowed_relationships=allowed_relationships)data = await rels_defined.aconvert_to_graph_documents(documents)graph.add_graph_documents(data)
        • 属性定义

          • 有两种方式定义属性。一是设置node_properties=True和relationship_properties=True,让 LLM 自主决定提取哪些属性。二是明确指定要提取的属性列表,如node_properties=["birth_date", "death_date"]和relationship_properties=["start_date"],这样 LLM 会按照指定的属性进行提取。不过,目前属性提取存在一些限制,如只能使用基于工具的方法提取、所有属性都提取为字符串、只能全局定义属性而不能按节点标签或关系类型定义,且无法自定义属性描述来引导更精确的提取。

            • allowed_nodes = ["Person", "Organization", "Location", "Award", "ResearchField"]allowed_relationships = [("Person", "SPOUSE", "Person"),("Person", "AWARD", "Award"),("Person", "WORKS_AT", "Organization"),("Organization", "IN_LOCATION", "Location"),("Person", "FIELD_OF_RESEARCH", "ResearchField")]node_properties=Truerelationship_properties=Trueprops_defined = LLMGraphTransformer(llm=llm,allowed_nodes=allowed_nodes,allowed_relationships=allowed_relationships,node_properties=node_properties,relationship_properties=relationship_properties)data = await props_defined.aconvert_to_graph_documents(documents)graph.add_graph_documents(data)

            (三)文本处理与图谱构建

            1. 文档准备

            • 将要处理的文本组织成Document对象。

          • 使用 LLM Graph Transformer 处理文档

            • 根据选择的工作模式(基于工具或基于提示),使用 LLM Graph Transformer 对文档进行处理。在基于工具的模式下,利用 LLM 的结构化输出能力直接提取实体和关系;在基于提示的模式下,通过精心设计的提示引导 LLM 进行提取。例如,使用aconvert_to_graph_documents函数异步处理文档,该函数会返回一个GraphDocument对象,其中包含提取的节点、关系和源文档等信息。

          • 将图谱文档导入数据库

            • 使用add_graph_documents方法将提取的图谱文档导入到 Neo4j 等图数据库中。可以选择不同的导入选项,如默认导入、添加基本实体标签(baseEntityLabel=True)以优化索引和检索,或者包含源文档(include_source=True)以便跟踪实体的来源。例如,在默认导入时,所有节点和关系会直接导入到数据库中;添加基本实体标签时,每个节点会额外获得一个__Entity__标签,便于后续的索引操作;包含源文档时,可以在数据库中看到源文档与提取实体之间的关联,为构建检索器提供了更多的信息。


            LLM Graph Transformer为我们提供了一种高效、灵活的方法来从文本中提取实体和关系,并构建知识图谱(Graphusion:基于零样本LLM的知识图谱构建框架)。通过选择合适的模式、准备文本数据、设置Neo4j环境、实例化LLM Graph Transformer以及提取和可视化知识图谱等步骤,我们可以轻松地构建出结构清晰、内容丰富的知识图谱。这些图谱不仅有助于我们更好地理解和分析文本数据中的信息,还可以为各种应用场景提供有力的支持。



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

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

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

          联系我们

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

          微信扫码

          与创始人交个朋友

          回到顶部

           
          扫码咨询