王石磊(上海利柏特工程技術有限公司,上海 201101)
化工產業涉及到的產品眾多,具有一定銷售規模的化工品至少上千種,而且化工品上下游關系極為復雜,同一種化工品往往有多種合成方式,下游化工品的制備往往需要多種上游化工品,甚至還會有不同化工品的應用場景具有相互替代的關系。常規方法對化工產業鏈表示和分析存在著很多弊端,可視化能力不強,使用、檢索不便,缺乏科學的分析算法。知識圖譜技術通過構建知識節點及節點聯系,利用其強大的可視化能力和科學的圖算法,能可視化技術描述化工產業鏈,挖掘、構建、繪制和顯示知識及它們之間的相互聯系,并利用相關圖算法幫助理解和分析主要化工產業鏈各環節的主要發展邏輯[1]。
知識圖譜是由谷歌公司在 2012 年提出來概念,從學術的角度,“知識圖譜本質上是語義網絡(semantic network)的知識庫”,可以對現實世界的事物及其相互關系進行形式化地描述。從實際應用的角度可以簡單地把知識圖譜理解成多關系圖(multi-relational graph),泛指各種大規模的知識庫。圖(graph)是由節點(vertex)和邊(edge)來構成,實體(節點)指的是現實世界中的事物比如人、地名、化學品、公司等,關系(邊)則用來表達不同實體之間的某種聯系,比如人“居住在”北京、張三和李四是“朋友”、邏輯回歸是深度學習的“先導知識”等。“知識圖譜”結構示意圖如圖1所示。
圖1 “知識圖譜”結構示意圖
知識圖譜由于其數據包含實體、屬性、關系等,常見的關系型數據庫諸如SQL Server之類不能很好的體現數據的這些特點,因此知識圖譜數據的存儲一般采用圖數據庫(graph databases)。圖數據庫包含節點和關系,節點和關系均具有屬性,其中,關系可命名,具有方向性,必須有起點和終點。
Neo4j是其中常用的圖數據庫管理系統,基于圖結構完成數據的建模,將結構化數據存儲在圖中,展示數據及其之間的邏輯關系,以相同的數據遍歷節點與邊,算法非常快捷和高效,能處理數十億節點、屬性和關系。本研究采用Neo4j 4.2社區版。
Cypher是面向Neo4j的特定查詢語言,保留了許多SQL語言風格,符合常規表達習慣,用戶不必關心如何對圖數據庫進行遍歷,不用編寫復雜的代碼即可實現對圖數據庫的操作。
化工產業鏈是相關化工產品生產企業根據化學品合成或生產屬性組成的一個產業鏈條,通過上游原原材料、中間化學品和下游行業完成化工產業鏈的組織。
絕大部分的化學品主要是來源于石油、天然氣(包括石油氣、頁巖氣等)、煤炭以及各種無機礦物(包括原鹽)。石油、天然氣和煤炭因為主要含碳原子和氫原子,可以通過蒸餾、裂解、氣化等方式得到大量有機化工品。無機礦物則主要有石英砂、磷礦石、硫鐵礦、鈦鐵礦、鉀礦、螢石礦、原鹽等,通常用來得到各種無機化工品(部分有機化工品同樣需要無機礦物作為原材料)。
節點屬性定義:唯一標識符(rawmaterial Id);名稱(ramaterial Name)。
中間化學品通常被認為是基礎化工品,是介于上游原材料與下游行業中間的化工品,中間環節與下游環節之間并沒有明確的劃分,不少處于中間環節的化工品同樣被當作最終制品對外銷售,這主要取決于最終應用場景。
節點屬性定義:唯一標識符(chemical Id);名稱(chemical Name)。
直接與終端應用相關聯的節點劃分到下游行業組,化工品應用領域廣泛,基本上已經滲透到工業生產和日常生活的各個方面,涉及到的行業也林林總總。如衣(紡織服裝)、食(農業、食物)、住(建筑裝飾)、行(交通運輸)以及科技(TMT、新能源、航空航天)等領域[2]。
節點屬性定義:唯一標識符(indutryId);名稱(indutryName)。
化工產業鏈上的各種化學品之間的關系有很多,為簡化應用,在本研究中,我們僅提取出對分析最有用的關系:“生產”,同時大多數化工產品的反應/合成都是單向的,在不同的條件下可逆。在本研究中,為簡化分析,我們忽略關系的雙向性。化學品節點與下游行業之間的關系用單向的“應用”表示;化學品節點與上游原材料之間的關系用單向的“制備”表示。
本次研究暫不加入關系屬性。
新建圖數據庫,清空數據,確保在一個空白的環境進行操作:
這里,MATCH是匹配操作,而小括號()代表一個節點node (可理解為括號類似一個圓形),括號里面的n為標識符。
創建化學品節點:
其中CREATE是創建操作,Chemical是標簽,代表節點的類型。花括號{}代表節點的屬性,屬性類似Python的字典。為提高節點錄入效率,將收集整理的各節點編制成csv文件,利用如下Cypher語句批量導入中間化學品節點,最終完成所有節點的建立[3]:
根據化工產業鏈上下游的關系建立節點間關系,如下為建立乙烯產業鏈的示例:
MERGE (a) - [:制備] -> (b) - [:生產] -> (c) - [:生產] ->(d)- [:應用] -> (e)
用同樣的方法將所有關系添加完成,在Neo4J的界面上可以看到創建成功的節點及其關系,分別用不同顏色表示,如圖2所示。
圖2 化工產業鏈知識圖譜(局部)
初步化工產業鏈圖數據庫建立后,其應用包括節點之間的路徑查詢,節點關系輻射分析等等,本次研究以查找兩個節點間的關系路徑來做一個示范,如下Cyper語句表示了“原油”這個上游原材料與“化纖”行業之間關系數量在5以內的所有路徑,經過運算后顯示如圖3所示。
圖3 化工產業鏈知識圖譜路徑分析
文章設計了一種化工產業鏈的知識圖譜,并利用圖數據庫Neo4j實現了基礎的化工產業鏈知識圖譜的建立和維護管理,對于圖算法中路徑分析做了嘗試。
下一步將進一步完善該化工產業鏈知識圖譜,引入生產企業節點及其屬性,包括(產能,地理位置等),擴充知識圖譜的范圍和功能,并利用路徑搜索算法、中心性算法及社群發現算法進行基礎分析。最終進行深度分析,用于行業投資決策,化工產業規劃等。