利用LLM Graph Transformer实现知识图谱的高效构建
创作时间:
作者:
@小白创作中心
利用LLM Graph Transformer实现知识图谱的高效构建
引用
1
来源
1.
https://www.53ai.com/news/knowledgegraph/2024111370649.html
在信息爆炸的时代,如何有效地从海量文本中提取结构化信息并构建知识图谱,成为了一个备受关注的问题。知识图谱是一种强大的工具,它以图的形式表示实体及其之间的关系,能够帮助我们更好地理解和利用数据。近年来,随着大型语言模型(LLM)的飞速发展,LLM Graph Transformer应运而生,它利用LLM的能力,实现了从文本中自动提取实体和关系并构建知识图谱的功能。
LLM Graph Transformer介绍
LLM Graph Transformer是一种利用大型语言模型(LLM)构建知识图谱的工具。它通过提取文本中的实体和关系,将这些信息以图的形式表示出来,从而形成一个知识图谱。LLM Graph Transformer提供了两种主要的应用模式:工具基于模式和提示基于模式。这两种模式在不同的场景下各有优势,可以根据具体需求进行选择。
工具基于模式(默认模式)
- 工作原理:当LLM支持结构化输出或函数调用时,工具基于模式会利用LLM的内置功能来提取实体和关系。通过定义工具规范,可以确保实体和关系以结构化、预定义的方式被提取出来。
- 优势:工具基于模式减少了提示工程的工作量,因为LLM已经内置了提取结构化信息的能力。此外,这种模式还支持属性提取,可以获取更多关于实体和关系的详细信息。
- 适用场景:适用于LLM支持结构化输出或函数调用的场景。
提示基于模式(备用模式)
- 工作原理:在LLM不支持工具或函数调用的情况下,LLM Graph Transformer会回退到提示基于模式。这种模式使用少样本提示来定义输出格式,引导LLM以文本方式提取实体和关系。然后,通过自定义函数将LLM的输出解析为JSON格式,用于填充节点和关系。
- 优势:提示基于模式具有更高的灵活性,可以适应不同LLM的特性和输出格式。即使LLM不支持结构化输出或函数调用,也可以通过提示来引导其提取信息。
- 适用场景:适用于LLM不支持结构化输出或函数调用的场景,或者当需要更多自定义输出格式时。
创建知识图谱的具体步骤
设置 Neo4j 环境
- 选择 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)
- 节点类型定义
- 使用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=True relationship_properties=True props_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)
文本处理与图谱构建
- 文档准备
- 将要处理的文本组织成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为我们提供了一种高效、灵活的方法来从文本中提取实体和关系,并构建知识图谱。通过选择合适的模式、准备文本数据、设置Neo4j环境、实例化LLM Graph Transformer以及提取和可视化知识图谱等步骤,我们可以轻松地构建出结构清晰、内容丰富的知识图谱。这些图谱不仅有助于我们更好地理解和分析文本数据中的信息,还可以为各种应用场景提供有力的支持。
热门推荐
广州区域分布图:深度解析广州各区的地理与特色
土壤活化剂使用方法
为什么ChatGPT在提供真实答案时会出错?
2024亚洲人均GDP排名(预测)
匀变速直线运动的规律
如何让新人信任团队
团队凝聚力激发无限创意
WOS/EI/SCOPUS 三大文献检索数据库区别你了解吗?
明年家电国补还将继续吗?政府家电补贴2025年还有吗?
塔罗牌恋人逆位:爱情与关系的深层解读
开在垃圾堆旁的30多家外卖共用一张执照?企查查可一查到底
中山大学团队揭示膀胱癌脉管癌栓形成的关键分子机制
承千年古风 创文化活力:安徽查济村的文旅振兴之路
吃饭养成这两个好习惯,健康长寿根本不是问题
重塑健康生活:网球肘的成因、治疗与预防性健身
《自然》发布的科研白皮书,“中国领衔”意味着什么?
如何提高论文质量
北京清明节:樱花季的文化遗产之旅
《中国体育报》整版报道江西:以全民健身助力全民健康
ROS网络互通方案:采用WireGuard构建高效安全隧道
烧烤酱料的做法配方 烧烤酱汁怎么调
新生儿报销医保需要什么资料
胰腺癌患者的饮食护理和治疗措施有什么
CBA常规赛:山西7人上双击败广东迎开门红,张宁17+6胡明轩15分
在空调房里呆久了头晕怎么办?医生给出6个实用建议
《马说》告诉人们什么道理 文言文原文及翻译
网关、路由与局域网通信原理详解
这11种常见黑咖啡做法,你喝过哪些?
境界的彼方角色介绍
C肽的正常值范围及临床意义