DeepSeek本地RAG知识库(22):数据结构化5 知识图谱制作和使用

B站影视 日本电影 2025-03-22 09:36 3

摘要:数据(Data):原始符号,比如菜谱中的“五花肉500克”“豆瓣酱20克”“小火炖煮30分钟”——这些是未经处理的文字或数字。信息(Information):结构化后的数据,比如提取出“回锅肉”的食材(五花肉、豆瓣酱、青蒜)、烹饪步骤(煮→切片→炒)和口味标签

大家好,我是程序员寒山。

上期我们在RAG本地知识库中引入了知识图谱来增加处理复杂问题的能力,很多粉丝想全面的了解知识图谱。

那么今天我们来讲一下知识图谱,主要内容:

要理解知识图谱,我们要首先了解什么是知识?什么是图谱?很多人可能会说这就是字面意思么!还真不是!

了解知识要从了解DIKW模型开始,看看数据在不同阶段的表现形式,同时也解释和加深大家对RAG的理解。

数据(Data):原始符号,比如菜谱中的“五花肉500克”“豆瓣酱20克”“小火炖煮30分钟”——这些是未经处理的文字或数字。信息(Information):结构化后的数据,比如提取出“回锅肉”的食材(五花肉、豆瓣酱、青蒜)、烹饪步骤(煮→切片→炒)和口味标签(麻辣)。知识(Knowledge):关联后的信息网络,例如将“川菜麻辣口味”与“辣椒、花椒”等调料关联,形成“调味逻辑”;或对比“鲁菜九转大肠”的酸甜口,分析其使用白糖、醋的配比规律。智慧(Wisdom):应用知识解决问题,比如根据用户冰箱里的剩余食材(五花肉、青椒),结合知识图谱推荐“川菜回锅肉”或“鲁菜把子肉”的菜谱。

图谱由两个核心元素构成:

节点(Node):代表实体或对象,如五花肉、豆掰酱等。边(Edge):描述节点间的关系或交互,如回锅肉和五花肉的关系:食材

知识图谱起源于对复杂关系结构化需求。例如:

传统菜谱分类:仅按菜系(川菜、鲁菜)或食材(肉类、蔬菜)划分,缺乏深度关联。现代应用场景:美食推荐用知识图谱关联“冰箱食材”“烹饪技法”“营养需求”,实现智能推荐(比如推荐“鱼香肉丝”给同时拥有猪肉、木耳和豆瓣酱的用户)。

优势

关联性:将“川菜宫保鸡丁”与“鲁菜酱爆鸡丁”对比,分析两者在“鸡丁切法”“酱料配比”“火候控制”上的差异。推理能力:用户输入“鸡肉、花生、干辣椒”,图谱推理出可能菜式是“宫保鸡丁”或“辣子鸡”,并根据用户厨具(有无炒锅)进一步筛选。可视化:图形化展示“川菜调料依赖关系图”(如豆瓣酱→麻辣→回锅肉/麻婆豆腐)。

挑战

构建成本高:需整合多源数据(菜谱文字、教程、用户评价)。口味主观性:如何量化“麻辣度”或“鲜香”等抽象特征?

步骤1:本体设计
定义核心实体和关系:

实体:菜系(川菜、鲁菜)、食材(猪肉、辣椒)、技法(爆炒、炖煮)、口味(麻辣、鲜香)。关系:“属于菜系”“需要食材”“适用技法”“替代方案”。

步骤2:数据抽取

结构化数据:从菜谱网站提取“鱼香肉丝”的食材清单和步骤。非结构化数据:用技术分析用户评论,例如“这道菜偏咸”可抽取“口味→咸度偏高”标签。

步骤3:知识融合

关联不同菜系的共性:如川菜“水煮鱼”和鲁菜“糖醋鲤鱼”都需“去腥步骤”(用料酒、姜片)。整合替代方案:用户缺少“四川泡菜”时,推荐“酸菜”作为替代,并提示调整盐量。

实例

川菜“麻婆豆腐”关联实体:
食材:豆腐、牛肉末、豆瓣酱、花椒
技法:炒→炖→勾芡
口味标签:麻辣、鲜嫩鲁菜“葱烧海参”关联实体:
食材:海参、大葱、高汤
技法:煨烧
口味标签:咸鲜、软糯三、Neo4j 图谱库介绍

Neo4j是一个高性能的图数据库,使用图数据模型,以节点(Nodes)、关系(Relationships)和属性(Properties)来存储数据。节点代表实体,关系表示实体间的关联,属性则是节点和关系的附加信息。这种模型能够自然地表示复杂的关系网络,例如社交网络、知识图谱等。

3.1 查询语言

Neo4j使用Cypher作为查询语言,这是一种声明式的图形查询语言,语法直观且易于理解,类似于SQL,能够方便地进行图数据的查询和操作。比如下面菜谱的食材查询语句:

def query_by_ingredient(ingredient_name): query = """ MATCH (r:Recipe)-[:CONTAINS]->(i:Ingredient) WHERE i.name CONTAINS $ingredient RETURN r.name as name, r.cooking_process as process, r.taste_description as taste """ return graph.run(query, ingredient=ingredient_name).data

3.2 高性能

Neo4j采用了专门的图存储索引结构,使得它在处理图数据时具有出色的性能,尤其是在处理复杂的图查询和遍历操作时。

3.3 扩展性

Neo4j支持水平和垂直扩展,可以通过集群部署来处理大规模的数据和高并发的访问,不过有的功能需要企业版才支持。

3.4 企业级支持

Neo4j提供企业版,包含了高级的安全、备份、监控等功能,适用于企业级应用。

四、Neo4j 图谱库安装

这个安装方式挺多的,这里我以mac为例,使用docker部署安装

docker run --publish=7474:7474 \ --publish=7687:7687 \ --volume=$HOME/neo4j/data:/data \ neo4j

命令运行完后,打开浏览器,访问http://localhost:7474,如果看到Neo4j的登录页面,说明安装成功,默认用户名和密码都是neo4j,第一次登录后需要修改密码。

现在我们就可以开始往图库中插入数据了。

这个过程包括pdf文件解析、内容分析、主体提取、关系提取、内容入库等详细的过程。

要制作图谱,首先我们要选择我们的经过结构化或者简单结构的化的文件。今天我们准备了之前使用过的一个pdf菜谱,这其中的一道的数据。

还要和neo4j数据库建立链接,我们使用的python脚本。

使用python脚本,把pdf文件读取成文本。

使用python脚本程序,自动的对内容进行一个结构化整理拆分。

同样是使用python脚本实现,自动创建。

最后就是图谱数据入库,

我们的数据入库后是否准确,需要通过查询验证。

知识图谱将零散的菜谱数据转化为可推理、可创新的烹饪知识网络,希望这篇用“菜谱语言”写成的指南,能让你轻松理解知识图谱的奥妙!

大家有需要了解或想了解更多的地方,欢迎评论区留言!

来源:半月叨

相关推荐