張偉娟,韓 斌
(江蘇科技大學(xué)計算機學(xué)院,江蘇鎮(zhèn)江 212003)
大數(shù)據(jù)的爆發(fā)式增長導(dǎo)致知識圖譜的數(shù)據(jù)規(guī)模不斷增加,由此對知識圖譜進行查詢時載入內(nèi)存的存儲空間也消耗過大。針對以上問題,目前廣泛采取的解決措施有:分布式或者并行處理、使用便宜且空間大的硬盤以及使用壓縮技術(shù)減少空間。分布式并行處理時存在通信開銷大、存取結(jié)構(gòu)復(fù)雜以及數(shù)據(jù)安全難以保障的問題,而空間大的硬盤價格又相對較高。為了實現(xiàn)高效查詢,本文在圖數(shù)據(jù)存儲形式上采取圖壓縮技術(shù)[1]以減小知識圖譜規(guī)模。
對知識圖譜的壓縮是為了更好地進行查詢,獲取用戶所需要的信息??蛇_性查詢[2]是圖查詢方向的一個重要內(nèi)容。隨著知識圖譜的不斷發(fā)展,如何在知識圖譜上進行可達性查詢具有非常重要的現(xiàn)實意義。本文在圖壓縮的基礎(chǔ)上對知識圖譜[3]進行可達性查詢,通過查詢結(jié)果判斷壓縮后的圖數(shù)據(jù)是否會影響查詢效率。
很多研究針對不同的圖數(shù)據(jù)結(jié)構(gòu)進行壓縮。當(dāng)數(shù)據(jù)結(jié)構(gòu)為鄰接表時,Alexandre 等[4]通過聚類和適當(dāng)?shù)捻旤c重排以放大鄰接表的復(fù)制特性,實現(xiàn)更好的壓縮比。這種方法適用于圖分析任務(wù)的核心,如計算PageRank 值,可以很好地節(jié)省一部分存儲空間。數(shù)據(jù)結(jié)構(gòu)為矩陣時,Yu 等[5]在GOFMM 算法基礎(chǔ)上通過消息傳遞接口將其拓展到分布式內(nèi)存設(shè)置上,并且提出一種異步式算法,因此可以從分布式方向上實現(xiàn)分層壓縮思想。針對圖數(shù)據(jù)的分布式壓縮方向,Payam 等[6]通過Slepian-Wolf 定理導(dǎo)出分布式無損壓縮的速率區(qū)域,而分布式壓縮數(shù)據(jù)使用還需要考慮耦合性等方面的影響。
傳統(tǒng)的圖壓縮技術(shù)已經(jīng)非常成熟,但是針對知識圖譜而言的圖壓縮技術(shù)還有待研究。一般圖數(shù)據(jù)分為有向圖、無向圖,而知識圖譜是帶有語義信息的有向圖形式的知識庫。現(xiàn)有的圖數(shù)據(jù)壓縮方法不會考慮到知識圖譜中的語義關(guān)系,因而要針對知識圖譜設(shè)計符合其特性的圖壓縮方法。Katsuhiko 等[7]基于知識圖向量嵌入模型方面提出一種二值化的B-CP 分解算法,這種算法通過二進制值替換實值參數(shù)以減小模型規(guī)模,雖然減少了知識圖的嵌入模型規(guī)模,但不適用于圖數(shù)據(jù)結(jié)構(gòu)方向的壓縮。李高超等[8]提出的GComIdx 算法就是利用有序的鍵值存儲節(jié)點和邊,為查詢提出二級索引和節(jié)點索引,并采用傳統(tǒng)壓縮算法降低磁盤空間,這種壓縮方式只是單純利用壓縮完的數(shù)據(jù)塊載入時間和解壓縮時間小于整體直接載入的時間。這種方式不僅要將圖數(shù)據(jù)轉(zhuǎn)化為數(shù)據(jù)集,還要劃分歸類,并不適用于知識圖譜的存儲模式,反而適用于關(guān)系數(shù)據(jù)庫。而適用于知識圖譜存儲模式的結(jié)構(gòu)概要模型的圖壓縮技術(shù)ASSG 算法[9]就是根據(jù)節(jié)點的標(biāo)簽及其rank 值劃分節(jié)點,這種方法比較粗糙,因為rank 值只是用來衡量節(jié)點和出度等于0 的節(jié)點的最大距離值。再如OBSQ 壓縮方法[10]也是計算節(jié)點語義相似度,將計算好的閾值節(jié)點劃分到一起,然后在原本圖結(jié)構(gòu)的基礎(chǔ)上構(gòu)建邊,不斷調(diào)整得到最終壓縮圖。這兩種方法只是單純考慮了節(jié)點和框架,并沒有考慮到邊標(biāo)簽的語義信息,因此這兩種方法并不適合語義豐富的知識圖譜。Wahyudi 等[11]提出一種圖屬性模型的壓縮方式-GPC 算法,這種壓縮方法雖然適合語義豐富的知識圖譜,但為了進一步消除節(jié)點以及對節(jié)點無關(guān)的邊,使得圖的規(guī)模進一步縮小,不能完整地保存圖譜的結(jié)構(gòu)信息。
針對圖數(shù)據(jù)結(jié)構(gòu)的查詢有多種方式,如可達性查詢和子圖匹配查詢,不同查詢方法采用針對不同查詢的圖壓縮設(shè)計。本文提出的壓縮算法將節(jié)點合并、邊壓縮,在查詢過程中若采用子圖匹配查詢,則已經(jīng)壓縮的圖數(shù)據(jù)還需要將其還原并進行子圖匹配,會極大延長查詢時間,若采用可達性查詢,無須還原壓縮后的圖數(shù)據(jù),只需判斷兩點之間是否可達,即實體之間是否存在關(guān)系,用來檢驗壓縮之后的查詢效率十分方便。因此,本文采用可達性查詢檢驗壓縮后的查詢效率。該方法主要用來判斷兩個節(jié)點之間是否可達。早期的可達性查詢研究方法可以分為3 類:Hop 類標(biāo)簽[12]、傳遞閉包和在線索引類。針對Hop 類查詢算法而言,不需對原圖進行遍歷并且不需要傳遞閉包,從時間和空間復(fù)雜度上取得了較好的均衡。其典型算法除傳統(tǒng)的2 跳標(biāo)簽[13]、3 跳標(biāo)簽[14],在2 跳標(biāo)簽的基礎(chǔ)上又提出了PLL 算法[15]、PPL 算法[16]以及分布式算法[17]。本文采用效果較優(yōu)的PLL 算法檢驗壓縮后圖的查詢效率。
本文涉及的一些基本概念如下:
定義1資源描述框架(Resource Description Framework,RDF)[18]是一種用于表述萬維網(wǎng)資源的標(biāo)記語言。通過RDF 以節(jié)點—邊—節(jié)點的形式展現(xiàn)對資源的描述,其中第一個節(jié)點可看作主語(Subject,S)、邊看作謂語(Predicate,P),第二個節(jié)點可看成賓語(Object,O),SPO 就是一條三元組記錄。用“小李子的英文名是Leonardo DiCaprio”表示的三元組如圖1 所示,其中“www.kg.com/person/8”是國際資源標(biāo)識符(Internationalized Resource Identifier,IRI),用來唯一標(biāo)識“小李子”這個實體,“Kg:EnglishName”用來表示實體和實體之間的關(guān)系。
Fig.1 Example of triples圖1 三元組示例
定義2資源描述框架模式(Resource Description Framework Schema,RDFs)[19]是在RDF 的基礎(chǔ)上,提供了一個以“http://www.w3.org/2000/01/rdf-schema#”為命名空間的詞匯表,作為用戶描述特定領(lǐng)域中類和屬性的標(biāo)準(zhǔn)。其本質(zhì)是在RDF 的基礎(chǔ)之上描述RDF 數(shù)據(jù),使之具象化。比如人和動物、工具這3 個類之間的關(guān)系,3 個類分別可以有具體的多個屬性,3 個類之間的關(guān)系也可以建立多個屬性值。因此,知識圖譜的數(shù)據(jù)可以用RDF 數(shù)據(jù)進行存儲,也可以以有向圖的形式進行存儲。
如表1 所示,這組三元組表述了spinach3 為一種蔬菜,spinach1 是一種綠葉蔬菜,蔬菜類是綠葉蔬菜類的父類,farmer 管理蔬菜,farmer1 管理著spinach2 等。以RDF 圖的形式呈現(xiàn)如圖2 所示,其中“rdf:type”“rdfs:range”“rdf:sub-ClassOf”均是RDFs 用來描述數(shù)據(jù),依次代表資源與類之間的實例關(guān)系、值域、類與類之間的繼承關(guān)系。
Table 1 RDF graph example表1 RDF圖實例
Fig.2 RDFs in directed graph form圖2 有向圖形式的RDFs
定義3 原圖數(shù)據(jù)結(jié)構(gòu)可用G=(V,E,T,L)表示,其中G為有向圖,V為所有頂點的集合,記V={vi|vi∈V,0 ≤i≤|V|},E為所有邊的集合,記為E={ei|ei=(s,t) ∈E,s,t∈V},T為所有屬性值的集合函數(shù),L為邊標(biāo)簽集合函數(shù)。
定義4 等價關(guān)系標(biāo)簽是在對原圖進行壓縮時提出,即不同邊的屬性值相同,記為T(E1)=T(E2)。
定義5 簡圖是原圖基礎(chǔ)上壓縮過后的圖,用G1(V1,E1,T1,L1)表示,其中V1 為簡圖中頂點的集合,E為簡圖中邊的集合,T為簡圖中屬性值的集合函數(shù),L為簡圖中邊標(biāo)簽集合函數(shù)。
查詢過程中所用符號說明如表2所示。
Table 2 Description of symbols used表2 所用符號說明
針對ASSG 算法存在的壓縮粗糙問題,本文在此基礎(chǔ)上進行改進優(yōu)化,提出一種適用于知識圖譜的等價關(guān)系的壓縮算法CER(Compression based on Equivalence Relation)。在劃分節(jié)點時不再采用具有相同標(biāo)簽和rank 值的等價節(jié)點進行劃分,而是采用具有語義關(guān)系的等價關(guān)系標(biāo)簽劃分節(jié)點。等價關(guān)系標(biāo)簽可能導(dǎo)致的結(jié)果有兩種:一種是實體的屬性值一致,另一種是實體屬性值不一致。當(dāng)多條相同關(guān)系(等價邊)的兩個實體(節(jié)點)具有相同的屬性值(節(jié)點等價),則這多條邊可壓縮為同一條邊;當(dāng)多條相同關(guān)系(等價邊)的多個實體(節(jié)點)具有不相同的屬性值(節(jié)點不等價),則將這多個實體(節(jié)點)劃分為一類并排序。這種保存不會像ASSG 算法模糊邊及邊標(biāo)簽信息。通過這種壓縮劃分,n個節(jié)點會劃分為一個新的節(jié)點,而邊則不會再冗余,從而構(gòu)建出一個全新簡潔的知識圖譜,方便載入內(nèi)存及查詢。
以上文的RDF 實例圖為例,基于等價關(guān)系的壓縮算法主要分為兩個步驟:①遍歷知識圖譜上所有邊標(biāo)簽信息,若邊標(biāo)簽相同且一端存在度為1 的節(jié)點,則將具有相同屬性值的邊劃分為一類,得到知識圖譜中的關(guān)系集合S={S1,S2,S3,...Sn},其中Si為具體相同屬性值的邊標(biāo)簽集合;②判斷Si 一端的節(jié)點屬性值是否相同。若其中一對節(jié)點屬性值不相同但另一對節(jié)點屬性值相同且度為1,則將已經(jīng)劃分在邊集合的邊分裂開來,將具有相同屬性值的節(jié)點劃分為一類并在內(nèi)部進行編碼排序;若兩對節(jié)點的屬性值均相同且其中一對度為1,則將邊標(biāo)簽進行壓縮,并將具有相同屬性值的節(jié)點劃分為一類,即得到知識圖譜中相同屬性值的節(jié)點集合。若不滿足上述兩個條件,比如兩對節(jié)點的屬性值均不相同,或者一對節(jié)點屬性值不相同但另一對節(jié)點屬性值相同且度不為1等一系列情況,則將邊分裂開來。
該算法從知識圖譜的邊標(biāo)簽上進行劃分,并不會影響知識圖譜的結(jié)構(gòu)。等價關(guān)系的知識圖譜壓縮方法具體示例如圖3所示。
Fig.3 Compressed graph based on equivalence relation圖3 基于等價關(guān)系的壓縮圖
在圖3 中,按照CER 壓縮算法順序,首先找到具有相同屬性值且一端存在度為1 的節(jié)點的邊標(biāo)簽為“rdf:type”、“far:host”;然后判斷邊集合內(nèi)兩端節(jié)點的屬性值,以邊標(biāo)簽“rdf:type”為例,經(jīng)判斷其一端屬性值相同,為根圓錐狀、鮮綠色等屬性,而另一端蔬菜和綠葉蔬菜的具體屬性值并不相同,因此將其邊標(biāo)簽“rdf:type”從邊集合中分裂出來,將“en:spinach1”、”en:spinach3”度為1 且相同屬性值合并到同一個節(jié)點集;而以邊標(biāo)簽“far:host”為例,度數(shù)為1 的節(jié)點為“en:farmer1”和“en:farmer2”,經(jīng)判斷其屬性值相同,均為勞作、勤勞等屬性;另一端的節(jié)點屬性值相同,則對邊標(biāo)簽“far:host”進行壓縮,并將節(jié)點“en:farmer1”和“en:farmer2”放在一個頂點集合中。經(jīng)過以上壓縮,得到最終壓縮圖。CER 壓縮算法思路如算法1所示。
算法1等價關(guān)系的壓縮算法(CER)
本文算法中,第1 行對壓縮圖進行初始化,第2 行遍歷邊標(biāo)簽;第3 行到第4 行是找到相同的邊標(biāo)簽,并將其存放入S集合。第5 行到第8 行是判斷邊標(biāo)簽兩端節(jié)點的屬性值,若只有一對節(jié)點屬性值相同且度數(shù)均為1,則對壓縮進S集合的邊(s,t)進行分裂,同時將屬性值相同的節(jié)點存放進節(jié)點集合Pi。第9 行同理可得,當(dāng)節(jié)點u和節(jié)點s的屬性值相同且度數(shù)值均為1 而節(jié)點v和節(jié)點t的屬性值不同時,分裂(s,t),Pi集合存放v、t。第10 行到第13 行是針對兩對節(jié)點的屬性值均相同且其中一對度為1 的情況,壓縮邊標(biāo)簽,劃分頂點集。第14 行描述了第3 種情況,即不滿足上述條件的剩余情況下,將存放進S集合的邊標(biāo)簽分裂出來。等價關(guān)系的壓縮算法主要是對邊標(biāo)簽進行操作,劃分節(jié)點集合,時間復(fù)雜度為O(|E|log|V|)。此壓縮算法壓縮力度不大,但是可完整保存圖的結(jié)構(gòu)信息,并保全知識圖譜的語義信息。
本文通過PLL 算法檢驗CER 壓縮算法之后是否可提高查詢效率。PLL 算法是在2-hop 的基礎(chǔ)上改進而來,通過剪枝減少遍歷節(jié)點數(shù)目。傳統(tǒng)的2-hop label 只是通過出、入節(jié)點的標(biāo)簽判斷是否可達,而PLL 算法是在判斷出、入標(biāo)簽時若已經(jīng)滿足可達條件,則無需進行BFS 遍歷后續(xù)節(jié)點。計算步驟為:首先計算各節(jié)點的(|outG(u)|+1) ×(|inG(u)|+1),按照結(jié)果進行降序排列,然后進行廣度優(yōu)先遍歷,在入標(biāo)簽Lin中加入遍歷得到的節(jié)點;同理反向廣度優(yōu)先遍歷得到出標(biāo)簽Lout的值。若在構(gòu)建標(biāo)簽的過程中發(fā)現(xiàn)出標(biāo)簽和入標(biāo)簽中已經(jīng)存在相同的節(jié)點值,即可達,則中斷遍歷,對下一個節(jié)點進行遍歷。遍歷結(jié)束,得到出入標(biāo)簽之后,查詢是否可達只需要判斷Lout和Lin中是否存在交集。經(jīng)過預(yù)處理將知識圖譜轉(zhuǎn)化為簡化有向圖,其中節(jié)點1和2的屬性值、5和6的屬性值相同,如圖4所示。
在圖4 中,右圖為壓縮后的有向圖,其中A={a1,a2,a3,...,ai}代表邊標(biāo)簽相同且節(jié)點類型不相同的頂點集合,B={b1,b2,b3,...,bi}代表邊標(biāo)簽相同且節(jié)點類型相同的頂點集合。對于右圖使用PLL 算法構(gòu)建索引如表3所示,按照計算結(jié)果排序為3、4、a1、b1、6。以節(jié)點3 為例,對節(jié)點3 進行正向廣度優(yōu)先搜索,得到節(jié)點b1、4,則在b1、4 的入標(biāo)簽中加入節(jié)點3;反向廣度優(yōu)先搜索得到節(jié)點a1,則在a1 的出標(biāo)簽中加入節(jié)點3。在反向遍歷節(jié)點4 這一步時,得到節(jié)點3、a1;由于節(jié)點a1 到節(jié)點4 已經(jīng)通過節(jié)點3可達,則無需將節(jié)點4放入節(jié)點a1的入標(biāo)簽中。
Fig.4 Simplified directed graph圖4 簡化的有向圖
可達性查詢,比如Query(a1 →6)=1,這是因為存在相同節(jié)點3。
Table 3 PLL labels of vertices in compressed graph表3 壓縮圖中頂點的PLL標(biāo)簽
本文實驗所用的機器CPU 配置為Inte(lR)Core(TM)i5-8250U CPU @ 1.60GHz 1.80GHz,內(nèi)存為8.00G,硬盤為500GB,操作系統(tǒng)為Ubuntu16.04 LTS,算法使用C++語言編寫完成。
本文所采用的3 個知識圖譜來自各領(lǐng)域的公開泛用數(shù)據(jù)集,用來評估所提出算法的壓縮率、壓縮時間和查詢時間。其包括Yago 的部分?jǐn)?shù)據(jù)集、CN-DBpedia 數(shù)據(jù)集和XLore 數(shù)據(jù)集。其中,Yago 的部分?jǐn)?shù)據(jù)集包含Wikipedia、WordNet 和GeoNames 3 個來源;CN-pedia 是來源中文百科網(wǎng)站的結(jié)構(gòu)化數(shù)據(jù)集,其層級為8,有110 萬+個屬性值;XLore 是來源于清華大學(xué)的多語言知識圖譜,包含44 萬+個屬性和豐富的語義關(guān)系。這些數(shù)據(jù)需要預(yù)處理對實體進行編碼,整理為有向圖的形式,數(shù)據(jù)集中的頂點集和邊集的信息如表4 所示,其中|V|代表節(jié)點的數(shù)量,|E|代表邊的數(shù)量。
本文主要比較ASSG 壓縮算法、OBSQ 壓縮算法、GPC壓縮算法和CER 壓縮算法在3 個數(shù)據(jù)集上的壓縮率、壓縮時間等性能度量,具體如表5所示。
Table 4 Data sets information表4 數(shù)據(jù)集信息
Table 5 Description of the performance metrics used表5 所用性能度量說明
通過節(jié)點和邊兩個方面比較整體壓縮效率,壓縮率越低壓縮效果越好。節(jié)點壓縮效率為壓縮后節(jié)點個數(shù)和壓縮前節(jié)點個數(shù)之比;邊的壓縮效率為壓縮后邊的個數(shù)和壓縮前邊的個數(shù)之比。
如圖5 所示,CER 算法在節(jié)點壓縮效率上優(yōu)于OBSQ算法和ASSG 算法,稍遜色于GPC 算法,CER 壓縮算法在壓縮完成后的節(jié)點壓縮率均值為39%。這4種算法都是節(jié)點壓縮的算法,但是OBSQ 算法和ASSG 算法僅通過圖的結(jié)構(gòu)特征進行劃分壓縮,GPC 算法通過消除節(jié)點的方式極大降低了節(jié)點壓縮率,卻使圖結(jié)構(gòu)變得粗糙。而CER 考慮了邊標(biāo)簽信息以及節(jié)點之間的屬性值,同時保留了圖結(jié)構(gòu)。針對同一個類型的實體可以全部吸收兼并,極大減少了重復(fù)的邊標(biāo)簽,比如針對屬性值均為植物類節(jié)點所在的同一邊標(biāo)簽均可進行壓縮,實現(xiàn)壓縮效率最大化。
Fig.5 Node compression ratio圖5 節(jié)點壓縮率之比
從圖6 可以看出,CER 算法的邊壓縮率比OBSQ 算法和ASSG 算法及GPC 算法低,節(jié)點壓縮率的均值為45%??梢钥闯觯叺膲嚎s效率不如節(jié)點的壓縮效率,這是因為OBSQ 算法和ASSG 算法都是考慮節(jié)點和前驅(qū)后繼節(jié)點之間的關(guān)系以壓縮邊,而不考慮邊標(biāo)簽信息。GPC 算法是消除節(jié)點和邊以達到壓縮目的,類似剪枝,邊壓縮率相對前兩者有所提高,但是并沒有考慮壓縮過后的圖結(jié)構(gòu);而CER 算法更大程度地考慮了圖結(jié)構(gòu),并非只要邊標(biāo)簽相同就進行壓縮,提高了壓縮精度。綜上,從節(jié)點壓縮率和邊壓縮率而言,CER 壓縮效率優(yōu)于其他3種算法。
Fig.6 Edge compression ratio圖6 邊壓縮率之比
表6 展示了在3 種數(shù)據(jù)集上度為1 的實體數(shù)量。度為1 的節(jié)點不一定都會被壓縮,因此節(jié)點壓縮率之比大于等于度不為1 的頂點數(shù)占比。表6 驗證了圖5 的節(jié)點壓縮率之比的合理性。
Table 6 Number of entities with degree 1表6 度為1的實體數(shù)量
從表7 的壓縮時間看,本文CER 算法的壓縮時間小于OBSQ 算法和ASSG 算法,略接近于GPC 算法。OBSQ 算法由于在遍歷圖譜時需計算各節(jié)點間的語義相似度,還要劃分到給定閾值,因而計算所需的時間遠大于壓縮時間;ASSG 算法由于需要計算rank 值,計算也耗時過長。GPC算法和CER 算法需遍歷整個圖并直接進行壓縮,壓縮不深入,相比其他兩種算法,這兩種算法壓縮時間較少。GPC算法從節(jié)點和邊同時入手,而CER 算法從先找出相同屬性值的邊標(biāo)簽集合入手,所需時間與GPC 算法基本持平。
Table 7 Compression time(1 000×s)表7 壓縮時間(1 000×s)
表8 描述了PLL 算法在原圖和壓縮圖上針對100 000節(jié)點對的隨機查詢時間。在壓縮圖上的隨機查詢時間均小于在原圖上的查詢時間。這是因為CER 算法在原圖基礎(chǔ)上進行壓縮之后邊標(biāo)簽的壓縮極大減小了原圖規(guī)模,節(jié)點合并縮短了構(gòu)建出入標(biāo)簽的時間,即構(gòu)建索引的時間減少,從而使得查詢時間也隨之減少,在一定程度上提高了查詢效率,降低了查詢難度。
Table 8 Random query time(ms)表8 隨機查詢時間(ms)
圖7 展示了基于4 種壓縮算法的隨機查詢時間之比。其中,CER 算法的隨機查詢時間相對較快,這是因為GPC算法和CER 算法的節(jié)點壓縮率和邊壓縮率高于其他兩種壓縮算法,而GPC 壓縮算法是將消除的點和邊均保留在實體節(jié)點中,從而在構(gòu)建PLL 出入標(biāo)簽時由于索引空間過大而導(dǎo)致查詢時間也相應(yīng)增加。
Fig.7 Random query time ratio圖7 隨機查詢時間之比
本文提出了面向知識圖譜的等價關(guān)系壓縮算法CER,通過該壓縮算法上的PLL 查詢算法檢驗壓縮后的查詢效果。實驗結(jié)果表明,相對于其他壓縮算法,該算法在邊壓縮效率和查詢時間上有較大提升,且適用于大規(guī)模的知識圖譜。這種方法保證了原圖譜的結(jié)構(gòu)和語義信息,也從一定程度上減少了原始圖譜的空間規(guī)模。該方法考慮的是邊標(biāo)簽方向的壓縮,節(jié)點壓縮方向也是后續(xù)可以研究的問題。該方法只針對度為1 的節(jié)點的壓縮,在未來工作中可嘗試在此基礎(chǔ)上進行再次壓縮;或者不僅僅局限于度為1的節(jié)點,而是對其他節(jié)點壓縮方法也進行更為深入的研究。