如何用大语言模型自动构建知识图谱

如果你对如何利用AI和大型语言模型(LLM)来构建知识图谱感兴趣,Johannes Jolkkonen[1] 制作了一份极佳的教程。这份教程展示了如何使用Python来创建一个具有必要数据的环境,并设置访问OpenAI API和Neo4j数据库的凭证。

想象一下,如果你能将海量的信息整合在一起,并在一个知识网络中相互连接,每个数据点都与另一个相关联,从而形成一张助你理解复杂关系并提取有意义见解的地图,那该有多好。这正是知识图谱的力量所在,通过结合图数据库高级语言模型,你就能实现这一目标。让我们来探索这两种技术如何联手,改变我们处理和分析数据的方式。

Neo4j这样的图数据库擅长处理关于相互链接的数据。它们将信息存储为实体以及它们之间的链接,使得所有事物之间的关系变得更加容易理解。要构建知识图谱,首先,你需要设置一个Neo4j数据库,它将成为你项目的支柱。你将会使用Cypher查询语言来添加、修改和查询复杂的网络数据。Cypher非常适合处理复杂的数据结构,和图数据库非常匹配。

以下是一些关于大型语言模型的其他文章,你可能会感兴趣:

  • GPT-LLM-Trainer 让你轻松训练大型语言模型[2]

  • 什么是大语言模型 LLM? [3]

  • OWASP前10大语言模型(LLM)安全风险 [4]

  • 如何构建大型语言模型(LLM)和RAG流水线 [5]

  • 什么是Stable Beluga AI微调的大型语言模型?[6]

  • 了解AI大型语言模型的工作原理 [7]

现在,我们来讨论一下高级语言模型的作用,例如OpenAI开发的GPT系列。这些模型在理解文本方面开创了新局面。它们能够浏览大量的非结构化文本,如文档和电子邮件,并识别出关键实体及其关系。这一步骤对于为你的知识图谱增添丰富的上下文信息至关重要。

当你准备好构建你的知识图谱时,需要从数据源中提取实体和关系,这就是Python大显身手的地方。利用Python连接到OpenAI API,你就能访问GPT模型的强大功能,从而提取有意义的数据。这个过程对于将纯文本转化为适合图数据库的结构化格式是必不可少的。

知识图谱的基础在于准确识别实体及其链接。运用自然语言处理(NLP)技术来分析数据。这不仅仅是识别名称和术语;更重要的是理解它们的使用背景。这种理解是准确绘制数据网络的关键。

构建时需要考虑的因素

在构建知识图谱时,需要考虑以下几点:

  • 数据质量和一致性:确保数据的准确性和一致性对于知识图谱的可靠性至关重要。

  • 可扩展性:随着数据量的增长,知识图谱必须能够有效地扩展,同时保持性能。

  • 融合多样化的数据源:知识图谱通常结合来自各种来源的数据,因此需要有效的融合技术。

  • 持续更新和维护:定期更新和维护是保持知识图谱时效性和相关性的必要条件。

  • 隐私和安全:安全地处理敏感信息,并遵守隐私法律是一个重要的考虑因素。

添加用户界面

一个用户友好的聊天界面可以使你的知识图谱更易于访问。加入一个聊天机器人,让用户能够用自然语言提问,从而更轻松地找到所需信息。这种方法使得具有不同技术水平的用户都能够洞察你的数据。

在这个过程中,对于API(特别是OpenAI API)的使用至关重要。你需要顺畅地处理API请求,并妥善应对速率限制,以确保数据的持续流动。在这里,Python库大有用武之地,它们提供了工具来自动化这些交互,保持数据流水线的平稳运行。

数据提取开始你的数据流水线。编写Python脚本,从各种来源提取数据,然后通过GPT模型进行处理,以识别出实体和关系。提取数据后,将其转化为Cypher命令,并在Neo4j数据库中执行。这样子你的知识图谱便得以丰富。

知识图谱的好处

  • 增强数据互联性:知识图谱通过连接相关数据点,揭示出传统数据库中不易察觉的关系和依赖。

  • 改进数据检索和分析:通过以更具上下文意义的方式构建数据,知识图谱促进了更复杂的查询和分析。

  • 更好的决策支持:知识图谱的互联网状结构提供了全面的视角,有助于更明智的决策制定。

  • 促进AI和机器学习应用:知识图谱为AI和机器学习模型提供了结构化、关联性强的数据,大大增强了其功能。

  • 个性化和推荐系统:知识图谱在推动推荐引擎和个性化用户体验方面表现突出,因为它们能够理解用户的偏好和行为模式。

  • 语义搜索增强:知识图谱通过理解术语和概念间的上下文和关系,增强了搜索功能。

  • 数据可视化:知识图谱使更为复杂和信息丰富的数据可视化成为可能,展示数据点之间的联系。

API速率限制和成本

处理API速率限制可能有些棘手。你需要制定策略,以确保在这些限制内工作,从而确保你的数据提取和处理顺利进行。编写能够有效管理这些限制的代码时,你将发挥出Python技能的作用。

同时,别忘了考虑使用GPT模型的成本。进行成本分析以理解使用这些强大AI工具在数据处理中财务因素的影响。这将帮助你在扩展知识图谱项目时做出明智的选择。

通过将图形数据库和高级语言模型结合在一起,你创建的系统不仅可以组织和可视化数据,还可以通过对话界面访问数据。请继续关注我们的下一篇文章,我们将深入开发用户界面并改进图形数据库的聊天交互。这只是你进入知识图谱互联世界之旅的开始。

下面就来具体讲讲怎么构建知识图谱吧!!

小百科:什么是知识图谱?

知识图谱是一种语义网络,它不仅表达和相互连接现实世界中的实体,如人物、组织、物体、事件和概念,还描述这些实体的具体属性及其属性值。这些实体通过以下两种形式的三元组相互关联,构成了知识图谱的基础:

head → relation → tail

实体 → 关系 → 实体(例如,“爱因斯坦 → 出生于 → 德国”)

实体 → 属性 → 属性值(例如,“埃菲尔铁塔 → 高度 → 300米”)

这种网络表示形式使我们能够提取和分析这些实体之间的复杂关系,以及实体自身的详细描述。

任务描述

本文将使用 OpenAI 的 gpt-3.5-turbo 模型,针对kaggle上的亚马逊产品数据集中的标题数据,创建一个知识图谱。

图片

可以看到,数据集包含若干产品的相关字段,但这次我们只用到里面的title字段,如果你手头有其他数据集,包含更完善的信息,也可以同时使用多个字段(如果你打算使用多个字段,那就直接把多个字段拼接为一个新的字段"text",比如标题_描述_规格),然后我们将使用 ChatGPT 从中提取构建知识图谱所需要的实体和关系信息。

具体实现

1. Python依赖包安装并读取数据

首先,我们要在终端执行下面命令,安装依赖的Python包,或者在IDE中安装也可以。

  • pandas:一个强大的 Python 数据分析工具库,用于数据清洗、转换、分析和可视化,特别擅长处理表格数据。

  • openai:OpenAI 提供的库,主要用于访问和使用 OpenAI 开发的各种人工智能模型,包括语言、图像生成和游戏AI等。

  • sentence-transformers:一款基于 PyTorch 的库,专门用于句子和文本嵌入的计算,可用于各种自然语言处理任务,如句子相似度计算和聚类。

  • networkx:一个用于创建、操作和研究复杂网络结构和动态网络的 Python 库,支持多种类型的图,如无向、有向和多重图。

2. 导入库并读取数据

然后,我们把安装好的包导入,并将把亚马逊产品数据集作为 pandas 数据帧读取。

在这里插入图片描述

3. 信息提取

接下来,我们使用 ChatGPT 来从产品数据中挖掘出实体和它们之间的关系,并把这些信息以 JSON 格式的对象数组返回。

为了引导 ChatGPT 正确进行实体关系提取,我们会提供一系列特定的实体类型和关系类型。这些类型将与 Schema.org 中的对应实体和关系相映射。映射时,我们用的键是提供给 ChatGPT 的实体和关系类型,而值则是 Schema.org 中相关对象和属性的 URL。

因此,返回的 JSON 对象需要包含以下几个关键部分:

  • head键,从我们提供的数据中提取出来的实体;
  • head_type键,提取的head实体的类型;
  • tail键,同样是从数据中提取出的实体文本;
  • tail_type键,tail实体的类型;
  • relation键,“head”和“tail”之间的关系类型;

在这里插入图片描述

然后我们创建一个 OpenAI 客户端,默认模型选择为 gpt-3.5-turbo,因为它的性能足以进行这个简单的演示,没有必要使用更贵的 gpt-4(土豪可以忽略)。

在这里插入图片描述

4. 提示工程

  • system_prompt ,用来指导 ChatGPT 从原始文本中提取实体和关系,并以 JSON 对象数组的形式返回结果,每个对象都有键:“head”、“head_type”、“relation”、“tail”和“tail_type”。

在这里插入图片描述

  • user_prompt,定义数据集中单个规范所需输出的单个示例,并提示 ChatGPT 以相同的方式从提供的规范中提取实体和关系。
user_prompt = """Based on the following example, extract entities and relations from the provided text.
Use the following entity types:

# ENTITY TYPES:
{entity_types}

Use the following relation types:
{relation_types}

--> Beginning of example

# Specification
"YUVORA 3D Brick Wall Stickers | PE Foam Fancy Wallpaper for Walls,
 Waterproof & Self Adhesive, White Color 3D Latest Unique Design Wallpaper for Home (70*70 CMT) -40 Tiles
 [Made of soft PE foam,Anti Children's Collision,take care of your family.Waterproof, moist-proof and sound insulated. Easy clean and maintenance with wet cloth,economic wall covering material.,Self adhesive peel and stick wallpaper,Easy paste And removement .Easy To cut DIY the shape according to your room area,The embossed 3d wall sticker offers stunning visual impact. the tiles are light, water proof, anti-collision, they can be installed in minutes over a clean and sleek surface without any mess or specialized tools, and never crack with time.,Peel and stick 3d wallpaper is also an economic wall covering material, they will remain on your walls for as long as you wish them to be. The tiles can also be easily installed directly over existing panels or smooth surface.,Usage range: Featured walls,Kitchen,bedroom,living room, dinning room,TV walls,sofa background,office wall decoration,etc. Don't use in shower and rugged wall surface]
Provide high quality foam 3D wall panels self adhesive peel and stick wallpaper, made of soft PE foam,children's collision, waterproof, moist-proof and sound insulated,easy cleaning and maintenance with wet cloth,economic wall covering material, the material of 3D foam wallpaper is SAFE, easy to paste and remove . Easy to cut DIY the shape according to your decor area. Offers best quality products. This wallpaper we are is a real wallpaper with factory done self adhesive backing. You would be glad that you it. Product features High-density foaming technology Total Three production processes Can be use of up to 10 years Surface Treatment: 3D Deep Embossing Damask Pattern."

################

# Output
[
  {{
    "head": "YUVORA 3D Brick Wall Stickers",
    "head_type": "product",
    "relation": "isProducedBy",
    "tail": "YUVORA",
    "tail_type": "manufacturer"
  }},
  {{
    "head": "YUVORA 3D Brick Wall Stickers",
    "head_type": "product",
    "relation": "hasCharacteristic",
    "tail": "Waterproof",
    "tail_type": "characteristic"
  }},
  {{
    "head": "YUVORA 3D Brick Wall Stickers",
    "head_type": "product",
    "relation": "hasCharacteristic",
    "tail": "Self Adhesive",
    "tail_type": "characteristic"
  }},
  {{
    "head": "YUVORA 3D Brick Wall Stickers",
    "head_type": "product",
    "relation": "hasColor",
    "tail": "White",
    "tail_type": "color"
  }},
  {{
    "head": "YUVORA 3D Brick Wall Stickers",
    "head_type": "product",
    "relation": "hasMeasurement",
    "tail": "70*70 CMT",
    "tail_type": "measurement"
  }},
  {{
    "head": "YUVORA 3D Brick Wall Stickers",
    "head_type": "product",
    "relation": "hasMeasurement",
    "tail": "40 tiles",
    "tail_type": "measurement"
  }},
  {{
    "head": "YUVORA 3D Brick Wall Stickers",
    "head_type": "product",
    "relation": "hasMeasurement",
    "tail": "40 tiles",
    "tail_type": "measurement"
  }}
]

--> End of example

For the following specification, generate extract entitites and relations as in the provided example.

# Specification
{specification}
################

# Output

"""

5. 图谱构建

现在,我们为数据集中的每个产品调用 extract_information 函数,并创建一个包含所有提取的三元组的列表,这些三元组将代表我们的知识图谱。在本案例中,我们将仅使用 100 个产品的标题数据生成一个知识图谱。

kg = []
for content in data['text'].values[:100]:
  try:
    extracted_relations = extract_information(content)
    extracted_relations = json.loads(extracted_relations)
    kg.extend(extracted_relations)
  except Exception as e:
    logging.error(e)

kg_relations = pd.DataFrame(kg)

得到的数据结果如下图所示——

图片

6. 实体解析

实体解析的作用是将数据集中的实体与现实世界中的概念相匹配,会使用 NLP 技术,对数据集中的头部和尾部实体执行基本的实体解析。

在本案例中,我们将使用“all-MiniLM-L6-v2”这个句子转换器,为每个头部创建embedding,并计算头部实体之间的余弦相似度,并检查相似度是否大于 0.95,超过阈值的实体视为相同的实体,并将它们的文本值规范化为相等。同样的道理也适用于尾部实体。举个例子,如果我们有两个实体,一个值为“微软”,另一个值为“微软公司”,那么这两个实体将合并为一个。

我们按以下方式加载并使用embeddeding模型来计算第一个和第二个头部实体之间的相似度。

heads = kg_relations['head'].values
embedding_model = SentenceTransformer('all-MiniLM-L6-v2')
embeddings = embedding_model.encode(heads)
similarity = util.cos_sim(embeddings[0], embeddings[1])

7. 图谱可视化

最终,我们还可以使用 networkx 这个Python 库,来实现图谱数据的可视化。

G = nx.Graph()
for _, row in kg_relations.iterrows():
  G.add_edge(row['head'], row['tail'], label=row['relation'])

pos = nx.spring_layout(G, seed=47, k=0.9)
labels = nx.get_edge_attributes(G, 'label')
plt.figure(figsize=(15, 15))
nx.draw(G, pos, with_labels=True, font_size=10, node_size=700, node_color='lightblue', edge_color='gray', alpha=0.6)
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels, font_size=8, label_pos=0.3, verticalalignment='baseline')
plt.title('Product Knowledge Graph')
plt.show()

效果如下图所示:

图片

到目前为止,我们已经完成了使用 LLM 从原始文本数据中提取实体和关系的三元组,并自动构建知识图谱,甚至生成可视化图表。

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

自己也整理很多AI大模型资料:AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值