使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink
前言
本文由 Nebula Graph 实习生@王杰贡献。
最近 @Yener 开源了史上最大规模的中文知识图谱——OwnThink(链接:https://github.com/ownthink/KnowledgeGraphData ),数据量为 1.4 亿条。
本文介绍如何将这份数据快速导入图数据库 Nebula Graph,全过程大约需要 30 分钟。
中文知识图谱 OwnThink 简介
思知(OwnThink)
知识图谱是由 Google 在 2012 年提出来的一个概念。主要是用来描述真实世界中存在的各种实体和概念,以及他们之间的关系。在搜索引擎、问答机器人、知识抽取等多个领域有着诸多应用。
最近 Yener 开源了史上最大规模的中文知识图谱—— OwnThink(链接:https://github.com/ownthink/KnowledgeGraphData),数据量为 1.4 亿条。数据以 (实体, 属性, 值)
和 (实体, 关系, 实体)
混合的三元组形式存储,数据格式为 csv。
可以点击这里下载:https://nebula-graph.oss-accelerate.aliyuncs.com/ownthink/kg_v2.tar.gz
查看原始文件
由于 ownthink_v2.csv 数据过多,摘录部分数据为例:
红色食品,描述,红色食品是指食品为红色、橙红色或棕红色的食品。
红色食品,是否含防腐剂,否
红色食品,主要食用功效,预防感冒,缓解疲劳
红色食品,用途,增强表皮细胞再生和防止皮肤衰老
大龙湫,描述,雁荡山景区分散,东起羊角洞,西至锯板岭;南起筋竹溪,北至六坪山。
大龙湫,中文名称,大龙湫
大龙湫,外文名称,big dragon autrum
大龙湫,门票价格,50元
大龙湫,著名景点,芙蓉峰
姚明[中国篮球协会主席、中职联公司董事长],妻子,叶莉
这里的 (红色食品,是否含防腐剂,否)
就是典型的 (实体, 属性, 值)
形式的三元组数据; 而 (姚明[中国篮球协会主席、中职联公司董事长],妻子,叶莉)
是典型的 (实体, 关系, 实体)
形式的三元组数据。
Step 1. 数据建模与清洗准备
建模
Nebula Graph 是一个开源的分布式图数据库(链接:https://github.com/vesoft-inc/nebula),相比 Neo4j 来说,它的主要特点是完全的分布式,因此图数据库 Nebula Graph 适合处理数据量超过单机的场景。
可以看到:本次查询返回 51 条数据,耗时 3 ms 左右;
- 例2:查询姚明和其妻子叶莉在三跳之内的所有路径
(user@127.0.0.1) [test]> FIND ALL PATH FROM hash("姚明[中国篮球协会主席、中职联公司董事长]") TO hash("叶莉") OVER relation UPTO 3 STEPS;
执行结果如下:
当数据量较大时,查找全路径/最短经之类的操作会比较耗时。可以看到:本次查询返回 8 条数据,说明姚明和其妻子叶莉在三跳之内共有 8 条直接或间接的关系。
总结
本篇文章涉及到的一些概念和链接:
- OwnThink 的中文知识图谱数据:https://github.com/ownthink/KnowledgeGraphData。它的数据以三元组形式保存为 csv
- Nebula Graph 是一个开源的图数据库,GitHub 地址:https://github.com/vesoft-inc/nebula,和 Neo4j 相比,它是分布式的
- 数据清洗工具,GitHub 地址:https://github.com/jievince/rdf-converter。因为原始的图谱 ownthink_v2.csv 数据以三元组形式保存,并和一般图数据库的属性图模型略微有些不同,所以写了一个 Go 语言工具将原始 ownthink_v2.csv 变成 vertex.csv 和 edge.csv
- 数据导入工具,GitHub 地址:https://github.com/vesoft-inc/nebula-importer。将清洗完的 vertex.csv 和 edge.csv 批量写入到 Nebula Graph。
后面的工作
- 调整 Nebula 的参数。似乎默认的日志级别和内存都不是很好,可以用下面这个命令关闭日志,这样导入性能可以好很多。
curl "http://127.0.0.1:12000/set_flags?flag=minloglevel&value=4"
- 写个对应的 Python 版本示例
附录
Nebula Graph GitHub 地址:https://github.com/vesoft-inc/nebula ,加入 Nebula Graph 交流群,请联系 Nebula Graph 官方小助手微信号:NebulaGraphbot
Nebula Graph:一个开源的分布式图数据库。
GitHub:https://github.com/vesoft-inc/nebula