利用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以及提取和可视化知识图谱等步骤,我们可以轻松地构建出结构清晰、内容丰富的知识图谱。这些图谱不仅有助于我们更好地理解和分析文本数据中的信息,还可以为各种应用场景提供有力的支持。
热门推荐
慢阻肺患者的肺功能养护指南
慢阻肺患者的肺功能养护指南
慢阻肺患者的肺功能养护指南
五花肉烧豆腐制作详解:焯水煎豆腐等关键步骤全解析
职场敬酒有讲究:4大场景敬酒词+5大礼仪要点
博物馆环保文创的理念与实践——以故宫“零废弃”项目为例
软件开发团队成功的6个关键原则
混动车型两大痛点:故障率高企,维修费用惊人
Excel表格数据转换全攻略:从基础到实战
受美元升值影响 亚洲多国货币贬值经济承压
34岁,人生的转折点,你准备好了吗?
宏观经济政策对个人投资的影响:政策变化下的投资策略
苏轼教你做东坡肉:肥而不腻的秘密
北京医生用硬化治疗成功治愈儿童舌部淋巴管畸形
谷胱甘肽片:科学使用指南
三亚免税城元旦攻略:200元优惠券+10万免税额度详解
适合办公室吃的零食有哪些?十大办公室必备零食 哪一款是你最爱
为啥工作越努力,越容易胖?
每晚少于6小时睡眠会升高血压,专家建议从这四方面改善
神医华佗对医学的贡献真的了不起吗?为何死于曹操之手?
华佗、张仲景与董奉——三国时期的医学巨匠
低利率时代来临,如何调整投资策略?
4天玩转云南:昆明到香格里拉4条精选线路
贵州5天4夜深度游:从青岩古镇到梵净山,深入领略黔地风光
离婚后监护权:如何保障孩子权益?
离婚诉讼中如何争取孩子抚养权:法律依据与实战指南
海棠湾免税城退税新政:持有效证件60天内出境即享优惠
官渡之战中的青州风云
无线充电宝发热详解:技术原因、解决方法与选购指南
16岁差龄、跨国婚姻、试管婴儿:张晨光一家的幸福密码