化工产业链知识图谱设计与实现
2021-08-25王石磊上海利柏特工程技术有限公司上海201101
王石磊(上海利柏特工程技术有限公司,上海 201101)
0 引言
化工产业涉及到的产品众多,具有一定销售规模的化工品至少上千种,而且化工品上下游关系极为复杂,同一种化工品往往有多种合成方式,下游化工品的制备往往需要多种上游化工品,甚至还会有不同化工品的应用场景具有相互替代的关系。常规方法对化工产业链表示和分析存在着很多弊端,可视化能力不强,使用、检索不便,缺乏科学的分析算法。知识图谱技术通过构建知识节点及节点联系,利用其强大的可视化能力和科学的图算法,能可视化技术描述化工产业链,挖掘、构建、绘制和显示知识及它们之间的相互联系,并利用相关图算法帮助理解和分析主要化工产业链各环节的主要发展逻辑[1]。
1 相关概念
1.1 知识图谱
知识图谱是由谷歌公司在 2012 年提出来概念,从学术的角度,“知识图谱本质上是语义网络(semantic network)的知识库”,可以对现实世界的事物及其相互关系进行形式化地描述。从实际应用的角度可以简单地把知识图谱理解成多关系图(multi-relational graph),泛指各种大规模的知识库。图(graph)是由节点(vertex)和边(edge)来构成,实体(节点)指的是现实世界中的事物比如人、地名、化学品、公司等,关系(边)则用来表达不同实体之间的某种联系,比如人“居住在”北京、张三和李四是“朋友”、逻辑回归是深度学习的“先导知识”等。“知识图谱”结构示意图如图1所示。
图1 “知识图谱”结构示意图
1.2 图数据库
知识图谱由于其数据包含实体、属性、关系等,常见的关系型数据库诸如SQL Server之类不能很好的体现数据的这些特点,因此知识图谱数据的存储一般采用图数据库(graph databases)。图数据库包含节点和关系,节点和关系均具有属性,其中,关系可命名,具有方向性,必须有起点和终点。
Neo4j是其中常用的图数据库管理系统,基于图结构完成数据的建模,将结构化数据存储在图中,展示数据及其之间的逻辑关系,以相同的数据遍历节点与边,算法非常快捷和高效,能处理数十亿节点、属性和关系。本研究采用Neo4j 4.2社区版。
1.3 Cypher语言
Cypher是面向Neo4j的特定查询语言,保留了许多SQL语言风格,符合常规表达习惯,用户不必关心如何对图数据库进行遍历,不用编写复杂的代码即可实现对图数据库的操作。
2 知识图谱设计
化工产业链是相关化工产品生产企业根据化学品合成或生产属性组成的一个产业链条,通过上游原原材料、中间化学品和下游行业完成化工产业链的组织。
2.1 上游原材料节点
绝大部分的化学品主要是来源于石油、天然气(包括石油气、页岩气等)、煤炭以及各种无机矿物(包括原盐)。石油、天然气和煤炭因为主要含碳原子和氢原子,可以通过蒸馏、裂解、气化等方式得到大量有机化工品。无机矿物则主要有石英砂、磷矿石、硫铁矿、钛铁矿、钾矿、萤石矿、原盐等,通常用来得到各种无机化工品(部分有机化工品同样需要无机矿物作为原材料)。
节点属性定义:唯一标识符(rawmaterial Id);名称(ramaterial Name)。
2.2 中间化学品节点
中间化学品通常被认为是基础化工品,是介于上游原材料与下游行业中间的化工品,中间环节与下游环节之间并没有明确的划分,不少处于中间环节的化工品同样被当作最终制品对外销售,这主要取决于最终应用场景。
节点属性定义:唯一标识符(chemical Id);名称(chemical Name)。
2.3 下游行业节点
直接与终端应用相关联的节点划分到下游行业组,化工品应用领域广泛,基本上已经渗透到工业生产和日常生活的各个方面,涉及到的行业也林林总总。如衣(纺织服装)、食(农业、食物)、住(建筑装饰)、行(交通运输)以及科技(TMT、新能源、航空航天)等领域[2]。
节点属性定义:唯一标识符(indutryId);名称(indutryName)。
2.4 关系(Relationship)
化工产业链上的各种化学品之间的关系有很多,为简化应用,在本研究中,我们仅提取出对分析最有用的关系:“生产”,同时大多数化工产品的反应/合成都是单向的,在不同的条件下可逆。在本研究中,为简化分析,我们忽略关系的双向性。化学品节点与下游行业之间的关系用单向的“应用”表示;化学品节点与上游原材料之间的关系用单向的“制备”表示。
本次研究暂不加入关系属性。
3 知识图谱实现
3.1 新建图数据库
新建图数据库,清空数据,确保在一个空白的环境进行操作:
这里,MATCH是匹配操作,而小括号()代表一个节点node (可理解为括号类似一个圆形),括号里面的n为标识符。
3.2 建立节点(Node)
创建化学品节点:
其中CREATE是创建操作,Chemical是标签,代表节点的类型。花括号{}代表节点的属性,属性类似Python的字典。为提高节点录入效率,将收集整理的各节点编制成csv文件,利用如下Cypher语句批量导入中间化学品节点,最终完成所有节点的建立[3]:
3.3 建立关系(Relationship)
根据化工产业链上下游的关系建立节点间关系,如下为建立乙烯产业链的示例:
MERGE (a) - [:制备] -> (b) - [:生产] -> (c) - [:生产] ->(d)- [:应用] -> (e)
用同样的方法将所有关系添加完成,在Neo4J的界面上可以看到创建成功的节点及其关系,分别用不同颜色表示,如图2所示。
图2 化工产业链知识图谱(局部)
3.4 应用
初步化工产业链图数据库建立后,其应用包括节点之间的路径查询,节点关系辐射分析等等,本次研究以查找两个节点间的关系路径来做一个示范,如下Cyper语句表示了“原油”这个上游原材料与“化纤”行业之间关系数量在5以内的所有路径,经过运算后显示如图3所示。
图3 化工产业链知识图谱路径分析
4 结语
文章设计了一种化工产业链的知识图谱,并利用图数据库Neo4j实现了基础的化工产业链知识图谱的建立和维护管理,对于图算法中路径分析做了尝试。
下一步将进一步完善该化工产业链知识图谱,引入生产企业节点及其属性,包括(产能,地理位置等),扩充知识图谱的范围和功能,并利用路径搜索算法、中心性算法及社群发现算法进行基础分析。最终进行深度分析,用于行业投资决策,化工产业规划等。