賀宗平 范少芬 賀曦冉
摘? 要:隨著知識(shí)圖譜技術(shù)及應(yīng)用的不斷發(fā)展,形成了一系列獨(dú)立的開(kāi)發(fā)組件庫(kù),這些組件庫(kù)在知識(shí)圖譜的某些環(huán)節(jié)和領(lǐng)域中具有廣泛的應(yīng)用,但是其中大多數(shù)組件庫(kù)之間相互獨(dú)立、缺少統(tǒng)一標(biāo)準(zhǔn),難以聚合形成體系開(kāi)放能力。由于需要掌握多個(gè)獨(dú)立組件的開(kāi)發(fā)規(guī)范標(biāo)準(zhǔn),這給相關(guān)研究和應(yīng)用造成一定的難度和阻礙,因此利用Python的集成設(shè)計(jì)模式和語(yǔ)言黏合優(yōu)勢(shì),對(duì)成熟的組件庫(kù)進(jìn)行分層分類(lèi)整合,具有重要的實(shí)用價(jià)值。
關(guān)鍵詞:知識(shí)圖譜;圖譜數(shù)據(jù)庫(kù);設(shè)計(jì)模式;集成構(gòu)建
中圖分類(lèi)號(hào):TP311? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2021)05-0023-03
Research on the Design of Fusion Framework for Knowledge Graph
HE Zongping,F(xiàn)AN Shaofen,HE Xiran
(Information Office,Nanjing Audit University,Nanjing? 211815,China)
Abstract:With the continuous development of knowledge graph technology and its application,a series of independent development component libraries have been formed. These component libraries have a wide range of applications in some links and fields of knowledge graph. However,most of them are independent and lack of unified standards,which makes it difficult to aggregate and form the systematic open ability. Because there is a need to master the development specifications and standards of multiple independent components,which causes a certain difficulties and obstacles to the related research and application. Therefore,it has important practical value to use Python's integrated design pattern and language bonding advantages to integrate the mature component libraries in classified and hierarchical way.
Keywords:knowledge graph;graph database;design pattern;integration build
0? 引? 言
知識(shí)圖譜在相關(guān)的研究和開(kāi)發(fā)領(lǐng)域具有一系列成熟的開(kāi)發(fā)組件庫(kù),這些組件庫(kù)在知識(shí)圖譜的某些環(huán)節(jié)和領(lǐng)域中具有較為廣泛的運(yùn)用,如自然語(yǔ)言處理模塊spaCy、圖分析算法包NetworkX。但是其中的大多數(shù)組件庫(kù)之間相互獨(dú)立、缺少統(tǒng)一標(biāo)準(zhǔn)和規(guī)范約束,無(wú)法提供體系化的功能。知識(shí)圖譜的研究開(kāi)發(fā)需要掌握多個(gè)獨(dú)立組件的標(biāo)準(zhǔn)規(guī)范,給相關(guān)問(wèn)題的研究開(kāi)發(fā)造成了困難和阻礙。同時(shí),由于jupyter、colab等數(shù)據(jù)工程和科學(xué)領(lǐng)域的平臺(tái)工具,對(duì)編寫(xiě)Python Notebook程序的簡(jiǎn)潔性、可復(fù)現(xiàn)性提出了更高的要求。因此,構(gòu)建統(tǒng)一簡(jiǎn)潔、全面完善的知識(shí)圖譜集成框架,對(duì)于這個(gè)領(lǐng)域的研究發(fā)展有著重要的現(xiàn)實(shí)意義。
1? 知識(shí)圖譜構(gòu)建
知識(shí)圖譜的運(yùn)用覆蓋了從互聯(lián)網(wǎng)搜索到聊天機(jī)器人、推薦系統(tǒng)、金融風(fēng)控、物聯(lián)網(wǎng)、醫(yī)療教育等多個(gè)熱門(mén)領(lǐng)域,對(duì)知識(shí)圖譜相關(guān)技術(shù)領(lǐng)域研究開(kāi)發(fā)的熱度不斷攀升。例如傳統(tǒng)的搜索是一種淺層次的關(guān)聯(lián)搜索,通過(guò)對(duì)網(wǎng)頁(yè)關(guān)鍵內(nèi)容的過(guò)濾分析實(shí)現(xiàn),而基于知識(shí)圖譜的搜索將在進(jìn)行知識(shí)語(yǔ)義理解的基礎(chǔ)上進(jìn)行深層次關(guān)聯(lián)搜索,綜合檢索數(shù)據(jù)信息的來(lái)龍去脈,并提供對(duì)搜索事物的分類(lèi)、屬性和關(guān)系的描述。
知識(shí)圖譜本質(zhì)上是基于語(yǔ)義網(wǎng)絡(luò)的知識(shí)庫(kù),由Google公司于2012年提出。實(shí)際應(yīng)用中可以把知識(shí)圖譜理解成由節(jié)點(diǎn)(Vertex)和邊(Edge)構(gòu)成的一種特殊的多關(guān)系圖,通常多關(guān)系圖一般包含多種類(lèi)型的節(jié)點(diǎn)和邊,而知識(shí)圖譜一般只包含一種類(lèi)型的節(jié)點(diǎn)和邊。
1.1? 數(shù)據(jù)處理
在Python語(yǔ)言中,可以通過(guò)pandas讀取excel中的數(shù)據(jù),并以圖譜“三元組”形式存儲(chǔ)到Neo4j圖譜數(shù)據(jù)庫(kù),以構(gòu)建相關(guān)的知識(shí)圖譜?;贜eo4j圖譜數(shù)據(jù)庫(kù)能夠很容易地構(gòu)建知識(shí)圖譜,除了用Neo4j自帶的cypher語(yǔ)言導(dǎo)入,也可以通過(guò)py2neo組件創(chuàng)建節(jié)點(diǎn)和關(guān)系從而構(gòu)建知識(shí)圖譜。pandas組件包通常用于數(shù)據(jù)分析與處理,可以將excel格式文件轉(zhuǎn)換成dataframe格式,這種格式類(lèi)似于Spark中的Dataframe結(jié)構(gòu),支持類(lèi)似SQL的形式對(duì)數(shù)據(jù)進(jìn)行處理。
1.2? 實(shí)體抽取
知識(shí)圖譜構(gòu)建流程主要就是抽取實(shí)體,通過(guò)抽取算法獲取知識(shí)圖譜上的“節(jié)點(diǎn)”。對(duì)于文本數(shù)據(jù)處理的方式,基于詞性標(biāo)注的方法從句子中提取單詞,例如名詞和專(zhuān)有名詞就是需要的實(shí)體。此外,當(dāng)一個(gè)實(shí)體關(guān)聯(lián)多個(gè)單詞時(shí),還需要解析文本的依賴(lài)樹(shù)。
1.3? 圖譜數(shù)據(jù)庫(kù)
圖數(shù)據(jù)庫(kù)不同于一般的關(guān)系型數(shù)據(jù)庫(kù),是一種非結(jié)構(gòu)化的圖形數(shù)據(jù)庫(kù),與MySQL、Oracle等傳統(tǒng)數(shù)據(jù)庫(kù)存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)相對(duì)比,圖數(shù)據(jù)庫(kù)主要用來(lái)持久化存儲(chǔ)圖譜數(shù)據(jù)。目前主流的圖數(shù)據(jù)庫(kù)包括Neo4j、TigerGraph、JanusGraph等:
(1)Neo4j是典型的圖數(shù)據(jù)庫(kù),也是圖計(jì)算引擎,具備嵌入式、高性能、輕量級(jí)等優(yōu)勢(shì)。
(2)TigerGraph是為高性能存儲(chǔ)和計(jì)算而設(shè)計(jì)的分布式圖數(shù)據(jù)庫(kù)。每個(gè)實(shí)體和連接實(shí)體的每個(gè)邊都是計(jì)算單元,支持自動(dòng)劃分多個(gè)節(jié)點(diǎn)。
(3)JanusGraph是開(kāi)源的圖數(shù)據(jù)庫(kù),遵循Apache協(xié)議,具有良好的開(kāi)放性。
2? 架構(gòu)需求
本文研究的主要內(nèi)容是通過(guò)增加適配層方式進(jìn)行多組件的集成,提供抽象層接口,統(tǒng)一SDK或API標(biāo)準(zhǔn),以構(gòu)建符合當(dāng)前數(shù)據(jù)科學(xué)研究和知識(shí)圖譜開(kāi)發(fā)應(yīng)用的需求。圖1為融合多個(gè)技術(shù)組件的集成架構(gòu)圖。
2.1? 層級(jí)區(qū)分
框架的體系架構(gòu)垂直劃分為三個(gè)層次,即圖數(shù)據(jù)存儲(chǔ)層、引擎處理層、功能集成層:
(1)圖數(shù)據(jù)存儲(chǔ)層:存儲(chǔ)層主要由各種圖數(shù)據(jù)庫(kù)組成,支持分布式存儲(chǔ),實(shí)現(xiàn)圖數(shù)據(jù)的持久化存儲(chǔ)。在數(shù)據(jù)存儲(chǔ)量上能夠支持達(dá)到億級(jí)以上點(diǎn)邊總數(shù),吞吐量數(shù)萬(wàn)QPS,查詢(xún)響應(yīng)在秒級(jí)以?xún)?nèi)。
(2)引擎處理層:引擎處理層是負(fù)責(zé)對(duì)圖數(shù)據(jù)進(jìn)行讀取轉(zhuǎn)換和序列化的處理,包括一些并行處理引擎、大數(shù)據(jù)內(nèi)存處理引擎等。
(3)功能集成層:集成層主要是牽涉到圖數(shù)據(jù)相關(guān)的建模、分析和計(jì)算等功能庫(kù),是知識(shí)圖譜應(yīng)用分析的主要功能集合。
2.2? 集成與接口
集成框架的核心是為Python中的知識(shí)圖譜相關(guān)組件構(gòu)建統(tǒng)一抽象層。本文研究基于外觀模式(Facade Pattern)進(jìn)行封裝設(shè)計(jì),架構(gòu)如圖2所示。
在面向?qū)ο蠓椒ǖ某绦蛟O(shè)計(jì)中,外觀模式又被稱(chēng)為門(mén)面模式,外觀模式定義了一個(gè)高層接口,通過(guò)引入一個(gè)類(lèi)對(duì)子系統(tǒng)進(jìn)行封裝,讓外部通過(guò)統(tǒng)一的外觀對(duì)象進(jìn)行調(diào)用,為子系統(tǒng)中的接口提供一致的訪問(wèn)標(biāo)準(zhǔn)。引入封裝的外觀可有效降低原有系統(tǒng)的復(fù)雜度,同時(shí)減少客戶(hù)端與子系統(tǒng)類(lèi)之間的耦合度。
外觀設(shè)計(jì)模式通過(guò)一個(gè)統(tǒng)一的外觀對(duì)象實(shí)現(xiàn)子系統(tǒng)外部與其內(nèi)部的通信,屏蔽了客戶(hù)端訪問(wèn)子系統(tǒng)的復(fù)雜性,客戶(hù)端只需與外觀對(duì)象通信,無(wú)需要調(diào)用子系統(tǒng)內(nèi)部的多個(gè)復(fù)雜對(duì)象的功能。外觀模式的目的在于降低系統(tǒng)的復(fù)雜程度,極大程度上提高了聚合功能包開(kāi)發(fā)的便捷性,使得客戶(hù)端無(wú)須關(guān)心子系統(tǒng)的實(shí)現(xiàn)細(xì)節(jié),通過(guò)外觀接口類(lèi)即可完成所有功能調(diào)用。
3? 構(gòu)建方法
Python有著多種豐富成熟的圖數(shù)據(jù)組件包,提供了包括語(yǔ)義技術(shù)、圖數(shù)據(jù)查詢(xún)、交互可視化、圖數(shù)據(jù)結(jié)構(gòu)算法、概率圖推斷,以及和機(jī)器學(xué)習(xí)等方面集成的工具包。這些工具包各自獨(dú)立向外提供編程功能接口,工具包之間在數(shù)據(jù)處理、接口規(guī)范、功能種類(lèi)等方面都存在一定的差異性。此外,這些開(kāi)發(fā)包與主流的數(shù)據(jù)科學(xué)基礎(chǔ)平臺(tái)和工具包(例如Apache Spark、Ray、RAPIDS、Apache Parquet、pandas、scikit-learn、PyTorch、spaCy等)相比,也同樣缺少有效集成。
3.1? 組件構(gòu)成
組件集成了RDFlib、OWL-RL、pySHACL、NetworkX、iGraph、PyVis、node2vec等開(kāi)源項(xiàng)目工具包,集成各種圖計(jì)算分析、可視化分析相關(guān)的功能方法,有助于知識(shí)圖譜開(kāi)發(fā)融入數(shù)據(jù)科學(xué),并推動(dòng)與數(shù)據(jù)工程實(shí)踐更加緊密關(guān)聯(lián)。
3.2? 功能要素
構(gòu)建的功能要素包括6個(gè)方面的內(nèi)容:
(1)RDFlib中的知識(shí)圖譜構(gòu)建功能。RDFlib主要功能就是將基于語(yǔ)法的文件轉(zhuǎn)換成RDF格式的知識(shí)表達(dá),需將原始數(shù)據(jù)按照相應(yīng)語(yǔ)法進(jìn)行預(yù)處理,如TTL、JSON-LD、Parquet等數(shù)據(jù)格式序列化。
(3)基于SPARQL的查詢(xún)能力,并將查詢(xún)結(jié)果輸出轉(zhuǎn)換為pandas格式數(shù)據(jù)。SPARQL是針對(duì)RDF存儲(chǔ)的查詢(xún)語(yǔ)言,SPARQL與SQL類(lèi)似,通過(guò)查詢(xún)可以返回一條或多條圖存儲(chǔ)內(nèi)容結(jié)果。
(4)基于SHACL約束規(guī)則的圖計(jì)算驗(yàn)證。SHACL是一種標(biāo)準(zhǔn)化的依據(jù)一組條件來(lái)驗(yàn)證RDF圖的語(yǔ)言,可以在預(yù)定義圖譜形狀構(gòu)建的數(shù)據(jù)圖上,強(qiáng)制執(zhí)行標(biāo)準(zhǔn)結(jié)構(gòu)。
(5)NetworkX和iGraph的圖分析算法。NetworkX和iGraph是Python中創(chuàng)建、操作和研究網(wǎng)絡(luò)圖譜的工具包,尤其在分析網(wǎng)絡(luò)結(jié)構(gòu)的方面具有十分完備的支持。
(6)基于RDFS、OWL知識(shí)推理功能。RDFS是對(duì)RDF的擴(kuò)充,用來(lái)描述RDF數(shù)據(jù),增加更多的關(guān)系表示方法,OWL則提供高效靈活的數(shù)據(jù)建模和自動(dòng)推理能力。
3.3? 接口構(gòu)建
集成框架基于Facade設(shè)計(jì)模式,將各類(lèi)復(fù)雜的知識(shí)圖譜功能庫(kù)封裝,提供外界統(tǒng)一訪問(wèn)的模塊接口,內(nèi)部中各個(gè)功能庫(kù)仍然相對(duì)獨(dú)立,降低系統(tǒng)耦合度并相互減少依賴(lài)。外觀接口類(lèi)構(gòu)建的代碼示例:
class? SpecialGraphFacade():
igraphObj = None
rdfObj = None
visObj = None
def __init__(self):
self. igraphObj = IGraph()
self.rdfObj = RDF()
self.visObj = PyVisual()
def createSpecialGraph(self,data):
self.rdfObj.readGraph(data)
return self.igraphObj.createSpecialPath(self.rdfObj)
def visualSpecialGraph(self):
return self.visObj.visual(self.igraphObj)
4? 結(jié)? 論
開(kāi)源社區(qū)在知識(shí)圖譜相關(guān)的存儲(chǔ)處理和計(jì)算分析層面提供了多種成熟的組件功能包,為避免在知識(shí)圖譜應(yīng)用開(kāi)發(fā)和研究中帶來(lái)的版本、接口和集成等問(wèn)題,可充分發(fā)揮Python語(yǔ)言高效粘合式集成開(kāi)發(fā)能力,基于Facade設(shè)計(jì)模式為一系列知識(shí)圖譜組件功能包提供一致的高層接口層,隱藏多組件開(kāi)發(fā)帶來(lái)的復(fù)雜性,并承接版本控制的統(tǒng)一性、功能的一致性等內(nèi)容,為知識(shí)圖譜相關(guān)研究提供便利。
參考文獻(xiàn):
[1] 張?jiān)浦校H?面向知識(shí)問(wèn)答系統(tǒng)的圖情學(xué)術(shù)領(lǐng)域知識(shí)圖譜構(gòu)建:多源數(shù)據(jù)整合視角 [J].情報(bào)科學(xué),2021,39(5):115-123.
[2] 張思龍,王蘭成,婁國(guó)哲.基于知識(shí)圖譜的網(wǎng)絡(luò)輿情研判系統(tǒng)研究 [J].現(xiàn)代情報(bào),2021,41(4):10-16.
[3] 劉寶珠,王鑫,柳鵬凱,等.KGDB:統(tǒng)一模型和語(yǔ)言的知識(shí)圖譜數(shù)據(jù)庫(kù)管理系統(tǒng) [J].軟件學(xué)報(bào),2021,32(3):781-804.
[4] 于升峰.面向科技智庫(kù)的知識(shí)圖譜系統(tǒng)構(gòu)建 [J].智庫(kù)理論與實(shí)踐,2021,6(1):56-64.
[5] 賀宗平,張曉東,劉玉.基于Jupyter交互式分析平臺(tái)的微服務(wù)架構(gòu) [J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2019,28(8):63-70.
[6] 魏澤林,張帥,王建超.基于知識(shí)圖譜問(wèn)答系統(tǒng)的技術(shù)實(shí)現(xiàn) [J].軟件工程,2021,24(2):38-44.
[7] 趙捷,宮政,李晟飛.基于知識(shí)圖譜的機(jī)構(gòu)大數(shù)據(jù)集成系統(tǒng)研究 [J].標(biāo)準(zhǔn)科學(xué),2020(9):74-78.
作者簡(jiǎn)介:賀宗平(1982.09—),男,漢族,江蘇南京人,工程師,碩士,研究方向:軟件體系架構(gòu)、數(shù)據(jù)平臺(tái)。