知識圖譜入門 (六) 知識融合

知識融合簡介
知識融合,即合併兩個知識圖譜(本體),基本的問題都是研究怎樣將來自多個來源的關於同一個實體或概念的描述信息融合起來。需要確認的是:

等價實例
等價類/子類
等價屬性/子屬性


一個例子如上圖所示,圖中不同顏色的圓圈代表不同的知識圖譜來源,其中在dbpedia.org中的Rome 和geoname.org的roma是同一實體,通過兩個sameAs鏈接。不同知識圖譜間的實體對齊是KG融合的主要工作。

除了實體對齊外,還有概念層的知識融合、跨語言的知識融合等工作。

這裏值得一提的是,在不同文獻中,知識融合有不同的叫法,如本體對齊、本體匹配、Record Linkage、Entity Resolution、實體對齊等叫法,但它們的本質工作是一樣的。

知識融合的主要技術挑戰爲兩點:

數據質量的挑戰: 如命名模糊,數據輸入錯誤、數據丟失、數據格式不一致、縮寫等。
數據規模的挑戰: 數據量大(並行計算)、數據種類多樣性、不再僅僅通過名字匹配、多種關係、更多鏈接等。
知識融合的基本技術流程
知識融合一般分爲兩步,本體對齊和實體匹配兩種的基本流程相似,如下:

數據預處理
數據預處理階段,原始數據的質量會直接影響到最終鏈接的結果,不同的數據集對同一實體的描述方式往往是不相同的,對這些數據進行歸一化是提高後續鏈接精確度的重要步驟。

常用的數據預處理有:

語法正規化: 
語法匹配: 如聯繫電話的表示方法
綜合屬性: 如家庭地址的表達方式
數據正規化: 
移除空格、《》、“”、-等符號
輸入錯誤類的拓撲錯誤
用正式名字替換暱稱和縮寫等
記錄連接
假設兩個實體的記錄x 和y, x和y在第i個屬性上的值是xi,yixi,yi, 那麼通過如下兩步進行記錄連接:

屬性相似度: 綜合單個屬性相似度得到屬性相似度向量: 
[sim(x1,y1),sim(x2,y2),…,sim(xN,yN)]
[sim(x1,y1),sim(x2,y2),…,sim(xN,yN)]
實體相似度: 根據屬性相似度向量得到一個實體的相似度。
屬性相似度的計算
屬性相似度的計算有多種方法,常用的有編輯距離、集合相似度計算、基於向量的相似度計算等。

編輯距離: Levenstein、 Wagner and Fisher、 Edit Distance with Afine Gaps
集合相似度計算: Jaccard係數, Dice
基於向量的相似度計算: Cosine相似度、TFIDF相似度
……
編輯距離計算屬性相似度
Levenshtein Distance
Levenshtein 距離,即最小編輯距離,目的是用最少的編輯操作將一個字符串轉換成另一個.舉個例子,計算Lvensshtain 與 Levenshtein 間的編輯距離:

Lvensshtain→insert"e"→Levensshtain
Lvensshtain→insert"e"→Levensshtain

Levenshtain→delete"s"→Levenshtain
Levenshtain→delete"s"→Levenshtain

Levenshtain→sub"a"to"e"→Levenshtein
Levenshtain→sub"a"to"e"→Levenshtein
上述講 Lvensshtain轉換爲Levenshtein ,總共操作3次,編輯距離也就是3。

Levenstein Distance 是典型的動態規劃問題,可以通過動態規劃算法計算,具體公式如下:

⎧⎩⎨⎪⎪D(0,0)D(i,0)D(0,j)===0D(i−1,0)+1D(0,j−1)+1   1<i≤N   1<j≤M
{D(0,0)=0D(i,0)=D(i−1,0)+1   1<i≤ND(0,j)=D(0,j−1)+1   1<j≤M
D(i,j)=min⎧⎩⎨⎪⎪D(i−1,j)+1D(i,j−1)+1D(i−1.j−1)+1
D(i,j)=min{D(i−1,j)+1D(i,j−1)+1D(i−1.j−1)+1
其中, +1 表示的是插入,刪除和替換操作的代價。

Wagner and Fisher Distance
它是Levenshtein距離的一個擴展,將這個模型中的編輯操作的代價賦予了不同的權重,如下:

⎧⎩⎨⎪⎪D(0,0)D(i,0)D(0,j)===0D(i−1,0)+del[x(i)]D(0,j−1)+del[y(j)]   1<i≤N   1<j≤M
{D(0,0)=0D(i,0)=D(i−1,0)+del[x(i)]   1<i≤ND(0,j)=D(0,j−1)+del[y(j)]   1<j≤M
D(i,j)=min⎧⎩⎨⎪⎪D(i−1,j)+del[x(i)]D(i,j−1)+ins[y(j)]D(i−1.j−1)+sun[x(i),y(j)]
D(i,j)=min{D(i−1,j)+del[x(i)]D(i,j−1)+ins[y(j)]D(i−1.j−1)+sun[x(i),y(j)]
其中del、ins和sub分別是刪除、插入和替換的代價。

Edit Distance with affine gaps
在上面的兩種算法基礎上,引入了gap的概念,將上述的插入、刪除和替換操作用gap opening 和gap extension代替,編輯操作的代價也就表示爲:

Cost(g)=s+e∗l
Cost(g)=s+e∗l
其中s 是open extension的代價, e是extend gap的代價,l是gap的長度。如計算 Lvensshtain 與 Levenshtein間的距離,首先將兩個單詞首尾對齊,將對應缺少的部分視爲gap,如下圖中上面和下面單詞相比少了第一個e和倒數第三個的e,這是兩個gap。下面的單詞與上面的比則少了一個s和a,這又是兩個gap。加一起一共4個gap,每個長度爲1.因此編輯距離爲:

(s+e∗1)∗4
(s+e∗1)∗4
集合相似度計算屬性相似度
Dice係數
Dice係數用於度量兩個集合的相似性,因爲可以把字符串理解爲一種集合,因此Dice距離也會用於度量字符串的相似性,Dice係數定義如下:

simDice(s,t)=2|S capT||S|+|T|
simDice(s,t)=2|S capT||S|+|T|
以Lvensshtain 和 Levenshtein爲例,兩者的相似度爲 2 * 9 / (11+11) = 0.82。

Jaccard係數
Jaccard 係數適合處理短文本的相似度,定義如下:

simJaccard(s,t)=|S∩T||S∪T|
simJaccard(s,t)=|S∩T||S∪T|
可以看出與Dice係數的定義比較相似。兩種方法,將文本轉換爲集合,除了可以用符號分格單詞外,還可以考慮用n-gram分割單詞,用n-gram分割句子等來構建集合,計算相似度。

TF-IDF 基於向量的相似度
TF-IDF主要用來評估某個字或者用某個詞對一個文檔的重要程度。其中:

tfi,j=ni,jΣknk,j
tfi,j=ni,jΣknk,j
idfi=log|D|1+|j:ti∈dj|
idfi=log⁡|D|1+|j:ti∈dj|
舉個例子,比如某個語料庫中有5萬篇文章,含有“健康”的有2萬篇,現有一篇文章,共1000個詞,‘健康’出現30次,則sim TF-IDF = 30/1000 * log(50000/(20000+1)) = 0.012。

實體相似度的計算
計算實體相似度可從三大方面入手,即聚合、聚類和表示學習。其中:

聚合:加權平均、手動制定規則、分類器 
聚類:層次聚類、相關性聚類、Canopy + K-means
表示學習
下面對其進行一一詳解。

聚合
加權平均方法,即對相似度得分向量的各個分量進行加權求和,得到最終的實體相似度:

w1∗sim(x1,y1)+…+wN∗sim(xN,yN)
w1∗sim(x1,y1)+…+wN∗sim(xN,yN)
手動制定規則就是給每一個相似度向量的分量設置一個閾值,若超過該閾值則將兩實體相連:

sim(x1,y1)>T1and(or)…sim(xN,yN)>Ti
sim(x1,y1)>T1and(or)…sim(xN,yN)>Ti
對於分類器等機器學習方法,最大的問題是如何生成訓練集合,對於此可採用無監督/半監督訓練,如EM、生成模型等。或主動學習如衆包等方案。

聚類
聚類又可分爲層次聚類、相關性聚類、Canopy + K-means等。

層次聚類
層次聚類 (Hierarchical Clustering) 通過計算不同類別數據點之間的相似度對在不同的層次的數據進行劃分,最終形成樹狀的聚類結構。

底層的原始數據可以通過相似度函數計算,類之間的相似度有如下三種算法:

SL(Single Linkage)算法: SL算法又稱爲最鄰近算法 (nearest-neighbor),是用兩個類數據點中距離最近的兩個數據點間的相似度作爲這兩個類的距離。
CL (Complete Linkage)算法: 與SL不同的是取兩個類中距離最遠的兩個點的相似度作爲兩個類的相似度。
AL (Average Linkage) 算法: 用兩個類中所有點之間相似度的均值作爲類間相似度。
舉個例子, 有下圖的數據,用歐氏距離和SL進行層次聚類。

這樣結果就變成:

如此往復就得到最終的分類表:

相關性聚類
rxyrxy 表示x,y被分配在同一類中, pxypxy 代表x,y是同一類的概率 (x,y之間的相似度),w+xy(=pxy)wxy+(=pxy)和w−xy(=1−pxy)wxy−(=1−pxy) 分別是切斷x,y之間的邊的代價和保留邊的代價。相關性聚類的目標就是使用最小的代價找到一個聚類方案。

minΣrxyw−xy+(1−rxy)w+xy
minΣrxywxy−+(1−rxy)wxy+
是一個NP-Hard問題,可用貪婪算法近似求解。

Canopy + K-means
與K-means不同,Canopy聚類最大的特點是不需要事先指定k值 (即clustering的個數),因此具有很大的實際應用價值,經常將Canopy和K-means配合使用。

用圖形表達流程如下圖所示:

文字表述爲:初始時有一個大的list,其中list中每個點都是一個canopy,設置閾值T1,T2。隨機玄奇List中的點P,並計算list中其他的點到點P的距離d,把所有距離d小於T1的點生成Canopy,去除list中d小於T2的點。如此往復這個過程就得到了聚類結果。生成Canopy的過程就像以T2爲中心扣下來一塊,然後剩下的環就是Canopy。這樣一塊一塊的扣就知道最終list爲空。

知識表示學習–知識嵌入
將知識圖譜中的實體和關係都映射低維空間向量,直接用數學表達式來計算各個實體之間相似度。這類方法不依賴任何的文本信息,獲取到的都是數據的深度特徵。

將兩個知識圖譜映射到同一空間的方法有很多種,它們的橋樑是預連接實體對(訓練數據),具體可以看詳細論文。

完成映射後如何進行實體鏈接呢?KG向量訓練達到穩定狀態之後,對於KG1每一個沒有找到鏈接的實體,在KG2中找到與之距離最近的實體向量進行鏈接,距離計算方法可採用任何向量之間的距離計算,例如歐式距離或Cosine距離。

分塊
分塊 (Blocking)是從給定的知識庫中的所有實體對中,選出潛在匹配的記錄對作爲候選項,並將候選項的大小儘可能的縮小。這麼做的原因很簡單,因爲數據太多了。。。我們不可能去一一連接。

常用的分塊方法有基於Hash函數的分塊、鄰近分塊等。

首先介紹基於Hash函數的分塊。對於記錄x,有hash(x)=hihash(x)=hi ,則x映射到與關鍵字hihi綁定的塊CiCi 上。常見的Hash函數有:

字符串的前n個字
n-grams
結合多個簡單的hash函數等
鄰近分塊算法包含Canopy聚類、排序鄰居算法、Red-Blue Set Cover等。

負載均衡
負載均衡 (Load Balance)來保證所有塊中的實體數目相當,從而保證分塊對性能的提升程度。最簡單的方法是多次Map-Reduce操作。

典型知識融合工具簡介
本體對齊-Falcon-AO
Falcon-AO是一個自動的本體匹配系統,已經成爲RDF(S)和OWL所表達的Web本體相匹配的一種實用和流行的選擇。編程語言爲Java。其結構如下圖所示:

此處主要介紹它的匹配算法庫,其餘部分可查看官方文檔。

匹配算法庫包含V-Doc、I-sub、GMO、PBM四個算法。其中V-Doc即基於虛擬文檔的語言學匹配,它是將實體及其周圍的實體、名詞、文本等信息作一個集合形成虛擬文檔的形式。這樣我們就可以用TD-IDF等算法進行操作。I-Sub是基於編輯距離的字符串匹配,這個前面我們有詳細介紹。可以看出,I-Sub和V-Doc都是基於字符串或文本級別的處理。更進一步的就有了GMO,它是對RDF本體的圖結構上做的匹配。PBM則基於分而治之的思想做。

計算相似度的組合策略如下圖所示:

首先經由PBM進行分而治之,後進入到V-Doc和 I-Sub ,GMO接收兩者的輸出做進一步處理,GMO的輸出連同V-Doc和I-Sub的輸出經由最終的貪心算法進行選取。

Limes 實體匹配
Limes是一個基於度量空間的實體匹配發現框架,適合於大規模數據鏈接,編程語言是Java。其整體框架如下圖所示:

該整體流程用文字表述爲:

給定源數據集S,目標數據集T,閾值 θθ;
樣本選取: 從T中選取樣本點E來代表T中數據,所謂樣本點,也就是能代表距離空間的點。應該在距離空間上均勻分佈,各個樣本之間距離儘可能大。;
過濾: 計算s∈Ss∈S與e∈Ee∈E之間的距離m(s, e),利用三角不等式進行過濾;
相似度計算: 同上;
序列化: 存儲爲用戶指定格式;
三角不等式過濾
給定 (A,m),m是度量標準,相當於相似性函數,A中的點x,y和z相當於三條記錄,根據三角不等式有:

m(x,y)≤m(x,z)+m(z,y)
m(x,y)≤m(x,z)+m(z,y)
上式通過推理可以得到:

m(x,y)−m(y,z)>θ→m(x,z)>θ
m(x,y)−m(y,z)>θ→m(x,z)>θ
上式中y相當於樣本點。因爲樣本點E的數量是遠小於目標數據集T的數量,所以過濾這一步會急劇減少後續相似性比較的次數,因而對大規模的web數據,這是非常高效的算法。

Cite
王昊奮知識圖譜教程
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章