Neo4J的知識圖譜管理系統的分析思考

前言:尋找寫作靈感?中文期刊網用心挑選的Neo4J的知識圖譜管理系統的分析思考,希望能為您的閱讀和創作帶來靈感,歡迎大家閱讀并分享。

Neo4J的知識圖譜管理系統的分析思考

摘要:本文梳理了知識圖譜的發展現狀和neo4j數據庫的功能特點;分析知識圖譜的構建流程及Neo4J圖形數據庫構建知識圖譜的方法。通過結合Neo4J圖形數據庫和關系型數據MySQL的各自功能特點,分析并設計面向行業領域的知識圖譜管理系統,滿足行業領域專家快速構建并分享知識圖譜的應用需求。該系統能創建并管理知識圖譜的實體、屬性和關系信息,不僅可對實體內容信息進行關鍵詞查詢,也可以調用Neo4J數據庫的查詢命令對復雜關系或隱藏關系進行查詢,對查詢的結果通過Echarts圖表進行可視化展示。

關鍵詞:知識圖譜;管理系統;系統分析;系統設計

0引言

隨著互聯網和信息技術的發展,越來越多的數據需存儲和處理。對于結構化的數據,使用傳統的關系型數據庫管理系統(比如:MySQL或Oracle)可以較好地滿足數據的存儲和查詢任務;但對非結構化的數據,尤其當數據間存在復雜的關聯關系時,傳統的關系型數據庫就只能通過定義表與表之間的連接來實現數據查詢,當數據之間的關聯關系比較復雜時,表與表的連接查詢效率就會顯著下降,造成查詢時間緩慢的問題;另外,關系型數據庫在查詢時也很難發現數據間隱藏的深層次關系。而基于Neo4J技術的圖形數據庫可有效解決上述問題。Neo4J以三元組的形式存儲節點與節點之間的關系,多個三元組構成了復雜的關系網絡圖,通過Neo4J自帶的Cypher查詢語言可很方便地實現復雜數據關系的查詢及存儲。但在Neo4J中支持的節點和屬性的數據類型較為單一,不適合存儲內容豐富的數據,也不支持對具體節點或屬性的全文檢索??梢钥闯觯P系型數據庫和Neo4J圖形數據庫各具特點。知識圖譜是對知識之間關系的映射,既有管理知識之間復雜關系的需求,也有管理知識內容的需求。因此,結合Neo4J圖形數據庫和關系型數據庫的各自特點,分析并設計一套能對知識圖譜的知識內容和知識關系進行有效管理的信息系統就十分必要。

1知識圖譜技術概述

知識圖譜是通過圖模型來描述現實世界中各種人或物之間的關系。在知識圖譜的圖模型中一般使用節點來描述人或物,用節點之間的邊來描述人或物之間的關系;每個節點和關系都可設置不同的屬性進行區分。在知識圖譜中節點和節點之間的關系構成了一個主、謂、賓的三元組。知識圖譜技術最早起源于20世紀60年代提出的語義網絡(SemanticNetworks),然后經歷了20世紀80年代本體論和語義Web的發展,直到2012年谷歌公司第一次將知識圖譜(KnowledgeGraph)的概念應用于谷歌搜索引擎的查詢結果中,這才促使知識圖譜的應用進入快速發展的階段[3]。目前,知識圖譜的應用可分為兩種類型,即:通用領域知識圖譜和垂直領域知識圖譜[2]。其中,通用領域知識圖譜在構建過程中傾向于應用的廣泛性,一般采用自底向上的構建方式并需廣泛的采集數據,需較長的建設周期和較復雜的數據處理工作。此類型的知識圖譜比較知名的有普林斯頓大學的WordNet詞典知識庫、接近人類自然語言表述的常識知識庫ConceptNet以及具備多語言可編輯特性的大規模鏈接知識庫WikiData等;垂直領域知識圖譜是針對具體行業構建的應用于特定領域的知識圖譜,垂直領域知識圖譜一般采用自頂向下的構建方式;目前,此類型的知識圖譜在國內各行、各業都有大量的應用案例,比如,在電子商務領域阿里巴巴公司構建以網絡零售商品數據為主的知識圖譜,在醫療衛生領域有中醫藥知識圖譜和中醫養生知識圖譜等,在農林科技領域有中國農科院構建的水稻知識圖譜。知識圖譜的構建步驟主要包括知識的表示、數據的采集、知識的抽取和知識挖掘[2]。知識表示可用資源描述框架(ResourceDescriptionFramework,簡稱RDF)來描述,RDF通過一個主、謂、賓三元組來描述知識,方便轉化為自然語言。知識表示也可通過本體建模語言OWL(OntologyWebLanguage)來描述,相對于RDF,OWL具有更豐富的關系詞匯和推理。數據資源的采集可從傳統的關系型數據庫中獲取結構化數據,也可通過網絡爬蟲技術從互聯網中獲取大量的非結構化數據。知識的抽取包括對抓取的數據進行分詞、詞性標注、實體識別和實體關系抽取等步驟;其中,實體識別是從數據資源中識別出人物或事件等能夠知識圖譜中呈現的節點,可采用基于規則和詞典的方法,也可采用統計學習方法,統計學習方法包括隱馬爾可夫模型和條件隨機場模型?;谝巹t和詞典的方法對實體的識別較為精確,但可擴展性差、難以發現新詞匯;而基于統計學習的方法能發現新詞匯,但模型訓練周期長、收斂速度較慢。知識挖掘階段包括實體對齊和實體鏈接,實體對齊是將來自于不同數據源的相同實體合并,統一命名;實體鏈接是要將抽取的實體與知識圖譜中要描述的實體進行對應。

2基于Neo4J的圖形數據庫介紹

Neo4J是一種開源無模式并支持事務管理的圖形數據庫。不同于傳統的關系型數據庫,Neo4J使用圖數據結構來存儲實體和實體間關系數據,而不是使用表來存儲。這種存儲方式極大地提升多層次關系查詢的效率。Neo4J的圖模型由實體(Entity)、屬性(Property)和關系(Relationship)構成。圖模型中的實體和關系都具有唯一的ID標識,也可自定義標簽(Label)來相互區別。數據庫管理員可通過Neo4J提供的Cypher查詢語言對圖模型進行管理操作。Cypher查詢語言類似于傳統關系型數據庫的結構化查詢語言SQL,它通過Create和Match命令對實體和關系的創建、修改、刪除和查詢。Neo4J為高級程序設計語言提供兩種訪問圖數據的方式。一種是以API接口的方式嵌入程序中,此種方式適合于Java語言,Neo4J具有專門的Java類庫可以高效的操作圖數據庫;另外一種方式是通過REST接口的方式執行Cypher查詢命令,高級語言程序將Cypher查詢命令包裝發送給Neo4J數據庫引擎執行,并對返回的結果進行分析處理。REST接口的訪問方式適合于PHP或Python程序語言,其執行的流程如下圖1所示:以PHP程序設計語言為例,通過REST接口訪問Neo4J數據庫的流程如下:

2.1下載Neo4J驅動程序

通過PHP語言專門的包管理工具Composer下載Neo4J數據庫的驅動程序包neo4j-php-client。

2.2建立與Neo4J數據庫的連接

使用驅動包中ClientBuilder類的create方法生成Neo4J客戶端,并使用客戶端的addConnection方法連接Neo4J數據庫的7474端口。2.3使用REST接口方式執行Cypher命令

在步驟2中生成的客戶端連接client具有run方法,該方法接受一個字符串類型的參數,將要執行的Cypher命令作為字符串傳遞給run方法,就會得到返回結果。如果要在圖數據庫中增加一個Person類型的實體p1,執行方法如下:$client->run('create(p1:person)returnp1');如果建立將類型為Person的兩個實體p1和p2建立聯系,執行方法如下:$client->run('MATCH(p1:person)MATCH(p2:person)CREATE(p1)-[r:link]->(p2)');上述方法通過Match命令查詢出p1和p2,然后通過Create命令建立實體p1和p2的連接。

2.4處理Cypher命令的查詢結果

執行步驟3的run方法會返回結果對象$result,通過該對象的getRecords方法返回查詢結果列表。結果列表中的每個列表項都包含查詢實體或關系的標簽label、類型type和值value屬性。通過上述四個步驟就可用高級程序設計語言對Neo4J進行的數據操縱和查詢。對查詢到的結果還可結合開源的Echarts圖表庫,在瀏覽器端以關系圖的形式可視化顯示。因此,可用服務器端的程序設計語言將Neo4J數據庫和關系型數據庫MySQL進行優化整合,充分發揮兩種類型數據庫各自的優勢,形成基于Web的知識圖譜管理信息系統。

3基于Neo4J的知識圖譜管理系統分析

隨著知識圖譜技術的普及和發展,越來越多的行業和企業具有構建知識圖譜的需求。垂直領域知識圖譜一般采用自頂向下的方式,根據行業專家的經驗知識進行構建。但知識圖譜的構建技術相對較為復雜,非計算機領域的專家并不熟悉知識圖譜的構建工具,也無法在短時間內掌握Neo4J圖形數據庫技術,更不會使用圖形數據庫的Cypher查詢語言,這為知識圖譜技術的推廣和應用帶來阻礙。因此,有必要設計一款能為各個行業領域專家使用的知識圖譜管理系統。為便于知識圖譜技術的普及和推廣,該系統應基于Web技術,采用B/S體系結構來實現。知識圖譜的管理者和使用者通過瀏覽器即可登錄訪問并創建、管理和分析知識圖譜,避免學習復雜的Cypher查詢命令。

3.1基礎功能方面

基于Web的知識圖譜管理系統應具有知識圖譜的創建、刪除、修改和查詢及可視化展示功能。其中,知識圖譜的創建功能應包括實體的創建、屬性創建及關系的創建。知識圖譜的管理功能應包括該知識圖譜中所有節點和關系的刪除和修改功能。知識圖譜的查詢功能不僅要支持對單個知識圖譜的關系查詢,也應支持多個知識圖譜的聯合查詢。對查詢結果的展示功能應同時支持傳統的文字列表展示和可視化圖形展示。這里的可視化圖形展示可借助Echarts圖形庫中的關系圖來渲染。圖2是系統分析中的用例圖,展示系統基礎功能之間的相互關系;

3.2訪問權限方面

基于Web的知識圖譜管理系統是多用戶管理的信息系統,需提供用戶權限管理功能。因此需對訪問用戶提進行角色劃分,將系統的訪問者分為構建者和使用者。兩者具有不通的訪問權限,構建者用戶具有知識圖譜的創建功能和決定知識圖譜是否公開的功能。使用者用戶具有對公開知識圖譜的查詢功能。當需聯合多個知識圖譜的查詢時,使用者必須獲取知識圖譜的權限并導入多個公開的知識圖譜;

3.3技術功能方面

需充分結合傳統關系型數據庫和圖形數據庫的優勢,關系型數據庫具有信息存儲規范化的優勢,而圖形數據庫具有高效查詢復雜關系的優勢。因此對知識圖譜中的用戶信息、圖譜信息、實體及關系的信息均采用關系型數據庫MySQL存儲,而對實體關系網絡則存儲在Neo4J數據庫中。采用服務器端程序設計語言PHP來維護兩種數據庫中信息的一致性。

4基于Neo4J的知識圖譜管理系統設計

通過對上述知識圖譜管理系統的功能和技術需求分析可看出,該系統主要涉及用戶、知識圖譜、節點、屬性及關系五個實體。為能有效對知識圖譜進行管理,采用關系型數據庫存儲這五個實體的具體信息,同時在用戶構建知識圖譜模型時將這些信息存入Neo4J數據庫中。在數據模型關系中,用戶表中具有“用戶類型”字段用于區分知識圖譜的創建者和使用者。知識圖譜表通過“用戶ID”字段與用戶表建立一對多的關系,從而允許一個用戶同時創建多個知識圖譜,也使得用戶登錄后,可快速管理屬于自己的知識圖譜。節點表通過“節點ID”與屬性表進行一對多的關聯,從而允許一個節點可具有多個屬性。屬性表的“屬性類型”使用字符串格式,存儲Neo4J中支持的基礎數據類型,包括:字符串(String)、整型(Int)、浮點型(Float)、布爾型(Bool)等數據類型。由于Neo4J主要描述的是從起始節點到結束節點間的關系,因此,在關系表中使用“主節點ID”字段代表起始節點,使用“客節點ID”代表結束節點,節點間的關系名稱存儲在“關系名稱”字段中。關系表通過“主節點ID”與節點表中的“節點ID”建立一對多的關聯,表示在知識圖譜中一個節點可對應多個關系。根據上述數據關系模型中五個實體的字段構成可設計相應的類。User類代表用戶表、Graph類代表圖譜表、Nodes類代表節點表,Relations類代表關系表,Properties類代表屬性表。以Nodes節點類為例,該類除包括節點ID、節點標簽、節點名稱和節點描述外,還應包括一個屬性列表,列表中的每一項都關聯到屬性類中,形成節點和屬性間一對多的關聯關系。Nodes節點類還應有創建、刪除和修改方法。其中,在創建方法中,它接收用戶發送的Web表單,從Web表單中提取所需的節點信息,并將提取的節點信息添加到Nodes表中,同時調用Neo4J數據庫的REST接口,在Neo4J數據庫中生成相應的節點。在刪除方法中,它接收Web頁面發送過來的節點ID,先以REST接口方式發送刪除節點的Cypher命令給Neo4J數據庫引擎執行,然后以SQL查詢命令請求MySQL數據庫在Nodes表中刪除節點記錄,同時也要關聯刪除Properties表中的屬性記錄。實體關系Relations類中的創建和刪除方法也需同時在圖形數據庫和關系數據庫中維護信息的一致性。MySQL數據庫和Neo4J數據庫都支持完整的事務管理,因此,可將上述功能的實現放置在事務單元中處理,從而維護兩個數據庫數據的一致性。當系統使用者輸入查詢關鍵詞時,在服務器端設置一個查詢控制器,專門接收用戶提交的查詢表單,分析查詢表單數據。如果用戶的查詢請求是簡單的節點或屬性查詢時,查詢控制器就將查詢關鍵詞轉發給Nodes節點類,由Nodes類查詢MySQL數據中的Nodes表或Properties表,并將查詢結果以文字列表的形式反饋給用戶查詢界面。如果用戶查詢的是實體關系時,查詢控制器就將查詢關鍵詞傳遞給Relations類的查詢方法,由該方法根據查詢關鍵詞構建Cypher查詢語句,然后使用REST接口的方式傳遞Cypher命令給Neo4J數據庫執行。對于關系查詢的結果,可轉換成符合Echarts圖表的JSON數據結構,在瀏覽器端利用Echarts的關系圖渲染知識圖譜。

5結論

知識圖譜尤其是垂直領域的知識圖譜正在被越來越多的行業關注并應用。但知識圖譜的構建技術和查詢技術相對較復雜,在一定程度上阻礙知識圖譜在行業領域的普及。行業領域專家需要的是能將專業知識存儲并分享的知識圖譜構建平臺。通過設計一個基于Web技術的知識圖譜管理系統,可以滿足行業領域專家對知識圖譜創建、分享和查詢的基本需求。本系統有效地結合傳統關系型數據庫和圖形數據庫Neo4J的優勢:利用MySQL數據庫存儲和查詢單一的實體和屬性信息,利用Neo4J數據庫查詢實體關系,滿足復雜關系的查詢需求;對于查詢結果采用文字和Echarts關系圖兩種方式呈現,以便于知識圖譜的展示和分享。

作者:唐勇 單位:常州紡織服裝職業技術學院

亚洲精品一二三区-久久