利用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以及提取和可视化知识图谱等步骤,我们可以轻松地构建出结构清晰、内容丰富的知识图谱。这些图谱不仅有助于我们更好地理解和分析文本数据中的信息,还可以为各种应用场景提供有力的支持。
热门推荐
《我的世界》1.20版本钻石挖矿完全攻略
郭帆新作《流浪地球3》定档2027:不熬鸡汤,探索人类存在意义
亮剑精神助你成为企业管理高手!
亮剑精神:从李云龙到新时代
亮剑精神如何助力企业逆风翻盘?
岳飞亮剑精神:从古战场到现代人的精神指引
《封神演义》里的“民脂民膏”:权力腐败的历史镜像
康熙年间“民脂民膏”的真实写照:从税收政策到官僚腐败
巴西债务人财产追查与债权人利益保护
中国古代盲人乐队:从历史记载到现代启示
左丘明:盲史家如何影响中国历史?
古代名人如何为残疾人发声?
优化生活方式,高血压糖尿病患者的日常管理策略
西安市中医医院挂号全攻略:线上预约、现场挂号等多种方式详解
国家体育总局推荐:老年人运动后这样补充营养最科学
广州日报提醒:老年人运动禁忌大揭秘!
俄罗斯和白俄罗斯一年制硕士项目全解析:土木工程和工程造价专业留学指南
圣彼得堡国立大学:一年制硕士的职业黄金跳板
莫斯科国立大学:2025年最新留学费用揭秘!
俄罗斯留学攻略:一年制硕士项目详解
冬季冰柜温控器故障大揭秘!
春节包饺子:从张仲景的“娇耳”到现代餐桌上的百变美食
胸腺五肽的服用方法
从小牛胸腺提取的免疫调节药——胸腺肽肠溶片,该如何正确服用?
减肥也能吃!黑全麦鸡肉水饺
如何挑选新鲜的猪肉和虾仁做饺子馅?
饺子包法大揭秘:从基础到创意,总有一款适合你!
瑞舒伐他汀的副作用,你了解多少?
孟鲁司特钠:小儿哮喘的新希望?
秋冬季节如何正确使用孟鲁司特钠?