|
知识图谱作为结构化知识的重要载体,正逐渐成为各领域智能化应用的核心。春节期间,DeepSeek 的横空出世引发了广泛关注。DeepSeek 作为一款强大的语言模型,具备先进的自然语言处理能力,能够从文本中提取关键信息并生成知识图谱的结构。而 NebulaGraph 作为一款高性能的分布式图数据库,能够高效存储和管理大规模图数据。作为一名图爱好者,让人忍不住想试一试 DeepSeek 在构建知识图谱的能力,并通过一系列实验验证其在知识提取、图谱融合以及无中生有构建图谱方面的表现。实验结果表明,DeepSeek 在知识图谱构建和融合方面表现出色,但也存在一些技术细节需要优化。开测之前,我们先对整体思路做一个梳理,我们需要确定以下几个问题:3. 如果不提供文章,只描述所建图谱的大概内容,能否快速构建图谱 在确定了思路之后,开整。 ▌一、顺手牵羊ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;">实验的第一步是通过单篇文章验证 DeepSeek 的知识提取能力。我们选择了一篇关于开源图数据库 NebulaGraph 的文章[1],并要求 DeepSeek 从文章中提取关键要素,生成 nGQL 代码以构建知识图谱。你能帮我生成一个知识图谱吗,等一下我会给你一篇文章,帮我从内容中提取关键要素,然后以 nGQL 代码的形式构建知识图谱
在跟 DeepSeek 打好招呼之后,从网上捞一篇文章,这里用的是:如何评价开源图数据库 Nebula Graph?内容直接往上贴,简单粗暴。 # Schema定义(TAG类型)CREATE TAG IF NOT EXISTS product(name string, description string);CREATE TAG IF NOT EXISTS company(name string);CREATE TAG IF NOT EXISTS feature(name string);CREATE TAG IF NOT EXISTS tool(name string);CREATE TAG IF NOT EXISTS scenario(name string);CREATE TAG IF NOT EXISTS language(name string);CREATE TAG IF NOT EXISTS auth_service(name string);CREATE TAG IF NOT EXISTS ecosystem(name string);
# Schema定义(EDGE类型)CREATE EDGE IF NOT EXISTS has_feature();CREATE EDGE IF NOT EXISTS used_by();CREATE EDGE IF NOT EXISTS provides_tool();CREATE EDGE IF NOT EXISTS supports_language();CREATE EDGE IF NOT EXISTS applicable_scenario();CREATE EDGE IF NOT EXISTS compatible_with();CREATE EDGE IF NOT EXISTS supports_auth();CREATE EDGE IF NOT EXISTS integrates_with();
# 数据插入 - 核心产品INSERT VERTEX product(name, description) VALUES "NebulaGraph" "NebulaGraph", "开源的分布式图数据库,支持千亿点万亿边数据集");
# 数据插入 - 产品特性INSERT VERTEX feature(name) VALUES"high_performance" "高性能"),"open_source" "开源"),"scalability" "易扩展"),"flexible_modeling" "灵活数据建模"),"read_write_balance" "读写平衡"),"compatibility" "查询语言兼容性");
/* ... 此处省略 n多数据 */ 扫了一眼脚本语法上没什么问题,在相同表的写入中,还将多条数据合并到一条语句,效果很好。将得到的脚本执行到数据库中,效果如下: 可以看到以 NebulaGraph 为中心,辐射出了各种紧密相关的事物。▌二、桃园结义ingFang SC", system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;">为了验证 DeepSeek 在知识融合方面的能力,我们提供了另一篇关于 NebulaGraph 的文章,并要求其在现有图谱基础上进行融合。接下来,我会给你另一篇文章。请尽可能使用现有的表结构,对图谱进行融合。如果涉及到表结构变更,请使用 ALTER 进行表结构的修改
只有一篇文章,看起来有些单调。于是从百度百科中,查了下【NebulaGraph】及图中节点【360】的词条,并将概述部分输入,得到以下回应: NebulaGraph 词条-- 结构变更1:为product标签增加版本和时间属性ALTER TAG product ADD (license string, current_version string, release_date string, last_updated string);
-- 结构变更2:新增开发关系类型CREATE EDGE IF NOT EXISTS developed_by();
-- 数据更新 - 补充产品属性INSERT VERTEX product(name, description, license, current_version, release_date, last_updated) VALUES "NebulaGraph" "NebulaGraph", "分布式图数据库", "Apache 2.0", "v3.3.0", "2019-05-15", "2022-11-14");
-- 新增开发公司(复用company标签)INSERT VERTEX company(name) VALUES"Yueshu" "杭州悦数科技有限公司");
-- 新增特性(复用feature标签)INSERT VERTEX feature(name) VALUES"acl_mechanism" "ACL机制"),"linear_scaling":("线性扩容"),"data_recovery":("数据恢复"),"htap":("HTAP混合负载"),"nGQL_language":("nGQL查询语言");
-- 关系建立(复用已有关系类型)INSERT EDGE has_feature() VALUES"NebulaGraph"->"acl_mechanism":(),"NebulaGraph"->"linear_scaling":(),"NebulaGraph"->"data_recovery":(),"NebulaGraph"->"htap":(),"NebulaGraph"->"nGQL_language":();
-- 新增开发关系INSERT EDGE developed_by() VALUES"NebulaGraph"->"Yueshu":();
# 结构变更1:为company标签增加创始人、成立时间和收入属性ALTER TAG company ADD (founder string, founded_date string, revenue double);
# 结构变更2:新增事件类型TAGCREATE TAG IF NOT EXISTS event(type string, date string, amount double, details string);
# 数据更新 - 补充360公司信息INSERT VERTEX company(name, founder, founded_date, revenue) VALUES "360":("奇虎360", "周鸿祎", "2005-09", 116.15);
# 数据插入 - 产品生态(复用product标签)INSERT VERTEX product(name) VALUES"360_Security_Guard":("360安全卫士"),"360_Browser":("360安全浏览器"),"360_Cloud":("360安全云");
# 数据插入 - 重大事件(使用新增event标签)INSERT VERTEX event(type, date, amount, details) VALUES"acquisition_360.com":("域名收购", "2015-02-04", 1700.0, "1.1亿人民币收购360.com"),"privatization":("私有化", "2015-12", 9300.0, "93亿美元私有化交易");
# 关系建立 - 复用developed_by边连接产品INSERT EDGE developed_by() VALUES"360_Security_Guard"->"360":(),"360_Browser"->"360":(),"360_Cloud"->"360":();
# 新增事件关联(复用has_feature边表达事件关联)INSERT EDGE has_feature() VALUES"360"->"acquisition_360.com":(),"360"->"privatization":();
# 复用used_by边表达合作伙伴关系INSERT VERTEX company(name) VALUES"Internet_Society_China":("中国互联网协会");
INSERT EDGE used_by() VALUES"360"->"Internet_Society_China":();
从脚本上看,在当前步骤中,product 表、company 表的字段不够用,DeepSeek 也遵照了我们的指令,在原有基础上做了表结构的修改。有点缺陷的是注释符 -- 不符合语法结构,手动批量替换成 #。 同样执行到数据库中,效果如图: 
在以上两步的试验中,基本上确定了 DeepSeek 在图谱生成及知识融合方面已经能够做到很不错的效果。整体输出效率提高但也有花时间的点:服务太火爆,服务器无法响应的问题;另一个花时间的是,schema 是异步生效,两个层次的脚本执行之间,需要有一段等待。 在没有具体文章的情况下,我们要求 DeepSeek 根据给定的主题(农业)生成知识图谱。此时新开了一个对话,也新开了一个图空间。当前任务主要是空手套白狼,啥文章都不给。生成的代码基本上都差不多就不贴了,一会儿直接看效果。 我想要构建一个农业相关的知识图谱。用的数据库是 NebulaGraph,请帮我生成 nGQL 脚本。表名用大驼峰,属性名用小驼峰。为了规避使用到关键字导致语法错误,schema 的名称需要使用``进行包裹。至少需要生成 3000 个节点。
这边碰到的问题是,一次生成 3000 个节点,他拒绝了我的请求,并丢给了我一段 python 导入 csv 的代码。其中这次依然产生了注释符出错的问题,于是单独把这个问题单独拎出来说, 注释需要使用 #,另外我不希望提供出 python 代码,现在也不要求 3000 个节点了。给我 50 个节点的全部 ngql 脚本
果然有问题不憋着,整个人都神清气爽。 #=======================================# 创建图空间#=======================================CREATE SPACE `Agriculture` (vid_type = FIXED_STRING(32));USE `Agriculture`;
#=======================================# 定义标签 Schema(大驼峰命名)#=======================================CREATE TAG IF NOT EXISTS `Crop` (`cropId` int,`cropName` string,`growthPeriod` int,`suitableTemp` string,`yieldPerMu` float);
/* 此处省略好多脚本 */
请对已经有的数据进行补充,尽可能使得现有数据之间的关联性更强
请帮我将【界门纲目科属种】这些分类组织成图谱
请对现有作物,找出一些轮种的禁忌跟有增益的农作物
请结合图谱中的作物出发组织数据,并按之前的形式,给我一些 nGQL 脚本
聊着聊着,DeepSeek有点串台了,INSERT 语句使用了 MATCH WHERE INSERT 形式的 cypher 语法。 上述插入语句并不符合 nGQL 语法哦,请再改一改,并重新组织。DDL 放前面,DML 放后面
关于轮作的正负向数据再帮我多生成一些,重点罗列常见的经济作物。
关于轮作的正负向数据再帮我多生成一些,这次主要集中在家常菜



通过上述实验,我们验证了 DeepSeek 在知识图谱构建和融合方面的能力。实验结果表明: 1. 知识提取能力: 2. 知识融合能力: 3. 无中生有构建图谱: 4. 技术细节: |