《Graph Representation Learning》【4】——Multi-relational Data and Knowledge Graphs

智慧的旋風發表於2020-11-27

4 Multi-relational Data and Knowledge Graphs

這一部分,我們將介紹多關係圖(multi-relational graph)中的淺層嵌入方法。

Knowledge graph completion
這一章的大多數方法,最初都是為完成知識圖譜任務而設計的。
在多關係圖中,我們一般會定義這樣的三元組(tuple): e = ( u , τ , v ) e=(u,\tau,v) e=(u,τ,v),來表示兩個節點之間存在某種關係。一般來說,知識圖譜任務的目標是預測圖中缺失的邊,即連結預測(link prediction)。
在本章中,我們將簡要概述多關係圖的嵌入方法。

4.1 Reconstructing multi-relational data

與簡單圖一樣,我們可以將多關係圖的嵌入視為重構(reconstruction)任務。給定兩個節點的嵌入,我們的目標是重構這些節點之間的關係,不同之處在於,我們必須處理多種不同型別的關係。

為了能夠適應多關係圖,我們對簡單圖中的解碼器進行了如下改進:
(1)輸入:一對節點的嵌入向量+關係型別。
(2)輸出:邊 ( u , τ , v ) (u,\tau,v) (u,τ,v)存在的概率。
最早的多關係嵌入方法是RESCAL,它的解碼器為:
D E C ( z u , τ , z v ) = z u T R τ z v DEC(z_u,\tau,z_v)=z_u^TR_{\tau} z_v DEC(zu,τ,zv)=zuTRτzv
其中 R τ ∈ R d × d R_{\tau}\in \mathbb R^{d\times d} RτRd×d是關係τ特有的可學習矩陣。
重構損失定義為:
L = ∑ u ∈ V ∑ v ∈ V ∑ τ ∈ R ∣ ∣   D E C ( z u , τ , z v ) − A [ u , τ , v ]   ∣ ∣ 2 \mathcal L=\sum_{u\in V}\sum_{v\in V}\sum_{\tau \in \mathcal R}||\ DEC(z_u,\tau,z_v)-\mathcal A[u,\tau,v]\ ||^2 L=uVvVτR DEC(zu,τ,zv)A[u,τ,v] 2
其中 A ∈ R ∣ V ∣ × ∣ R ∣ × ∣ V ∣ \mathcal A\in \mathbb R^{|V|\times|\mathcal R|\times|V|} ARV×R×V為多關係圖的鄰接張量(adjacent tensor)。

Loss functions, decoders, and similarity functions
正如我們前面所提到的,編解碼器模型有3個非常重要的概念。
譯碼器在一對節點嵌入之間給出一個分數;相似性函式定義了我們要編碼的節點相似度的型別;損失函式告訴我們,如何評估解碼器輸出與真實近似值之間的差異。
有一點需要注意:在多關係圖解碼器中,相似性度量(similarity measure)一般直接定義為鄰接張量(adjacent tensor)。換言之,本章中的所有方法都假設我們只重構一階鄰居。這個因為,在多關係圖中定義高階鄰域關係是困難的,並且大多數多關係嵌入方法都是專門為關係預測而設計的。
因此,不同的解碼器和損失函式,衍生出了不同的嵌入方法。

4.2 Loss functions

上面提到的重構損失中的損失函式,主要有2個問題:
(1)計算代價昂貴。可以看到從裡到外有3層求和操作,時間複雜度很高。但實際情況是,我們的圖一般都是稀疏的,圖中存在的邊的數量遠小於求和操作的計算量,這就說明了很多運算都是沒必要的。
(2)鄰接張量是「0,1」二值化的,更接近於分類任務,均方誤差適用於迴歸任務,但卻不適合進行二值比較。

Cross-entropy with negative sampling
一種比較合適的損失函式是負取樣下的交叉熵損失,它和之前在node2vec中提到的損失函式十分相似,惟一的區別在於這裡使用的是多關係解碼器(考慮了關係的型別)。
L = ∑ ( u , τ , v ) ∈ E − log ⁡ ( σ ( D E C ( z u , τ , z v ) ) ) − γ E v n ∼ P n , u ( V ) [ log ⁡ ( σ ( − D E C ( z u , τ , z v n ) ) ) ] \mathcal L=\sum_{(u,\tau,v)\in E}-\log(\sigma(DEC(z_u,\tau,z_v)))-\gamma \mathbb E_{v_n\sim P_{n,u}(V)}[\log(\sigma(-DEC(z_u,\tau,z_{v_n})))] L=(u,τ,v)Elog(σ(DEC(zu,τ,zv)))γEvnPn,u(V)[log(σ(DEC(zu,τ,zvn)))]
通過觀察上述式子,為了使損失儘可能的小,我們希望正樣本的得分儘可能高,即 D E C ( z u , τ , z v ) DEC(z_u,\tau,z_v) DEC(zu,τ,zv)的值儘可能的大;負樣本的得分儘可能的低,即 D E C ( z u , τ , z v n ) DEC(z_u,\tau,z_{v_n}) DEC(zu,τ,zvn)的值儘可能的低。
其中 P n , u ( V ) P_{n,u}(V) Pn,u(V)代表負樣本節點在所有節點中的分佈。解碼器的輸出之所以送入 σ ( ⋅ ) \sigma(\cdot) σ(),是想得到一個[0,1]之間的標準化分數,作為節點之間存在邊的概率。
在實際操作中,後一項負取樣的期望值一般使用蒙特卡洛近似,改動如下:
L = ∑ ( u , τ , v ) ∈ E ( − log ⁡ ( σ ( D E C ( z u , τ , z v ) ) ) − ∑ v n ∈ P n , u [ log ⁡ ( σ ( − D E C ( z u , τ , z v n ) ) ) ] ) \mathcal L=\sum_{(u,\tau,v)\in E}\left(-\log(\sigma(DEC(z_u,\tau,z_v)))-\sum_{v_n\in P_{n,u}}[\log(\sigma(-DEC(z_u,\tau,z_{v_n})))]\right) L=(u,τ,v)Elog(σ(DEC(zu,τ,zv)))vnPn,u[log(σ(DEC(zu,τ,zvn)))]
其中 P n , u P_{n,u} Pn,u負取樣得到的一組節點集。關於如何進行負取樣,有一種方法是,隨機替換正樣本中的頭節點或尾節點來生成負樣本,在此不過多贅述。

Max-margin loss
另一種損失函式就是margin loss(我也不知道中文應該怎麼翻譯?maybe最大邊緣損失?),也被稱為hinge loss,使用的是一種對正負樣本進行對比估計的方法。
L = ∑ ( u , τ , v ) ∈ E ∑ v n ∈ P n , u max ⁡ ( 0 , − D E C ( z u , τ , z v ) + D E C ( z u , τ , z v n ) + Δ ) \mathcal L=\sum_{(u,\tau,v)\in E}\sum_{v_n\in P_{n,u}}\max(0,-DEC(z_u,\tau,z_v)+DEC(z_u,\tau,z_{v_n})+\Delta) L=(u,τ,v)EvnPn,umax(0,DEC(zu,τ,zv)+DEC(zu,τ,zvn)+Δ)
其中 Δ \Delta Δ是margin,如果正樣本的分數比負樣本的分數大,那麼我們就得到了一個比較小的損失。

4.3 Multi-relational decoders

之前提到過的RESCAL模型,它的解碼器中可學習的引數數量級為 O ( d 2 ) O(d^2) O(d2)。由此可見,它的引數數量還是太多了,我們想進一步減少引數的數量到 O ( d ) O(d) O(d)。下面會介紹一些知識圖譜中經典模型。

在這裡插入圖片描述

Translational decoders
最最經典的翻譯模型啊啊!我還專門用pytorch復現過TransE模型。
TransE模型的解碼器定義為:
D E C ( z u , τ , z v ) =   − ∣ z u + r τ − z v ∣ ,      ( z u , r τ , z v ∈ R d ) DEC(z_u,\tau,z_v)=\ -|z_u+r_{\tau}-z_v|,\ \ \ \ (z_u,r_{\tau},z_v\in \mathbb R^d) DEC(zu,τ,zv)= zu+rτzv,    (zu,rτ,zvRd)
翻譯,說白了就是利用了平移不變現象,希望 z u + r τ ≈ z v z_u+r_{\tau}\approx z_v zu+rτzv,也就是邊存在的概率和翻譯後的頭結點與尾節點之間的距離成正比,它是一個很強大的baseline。
但是TransE模型的侷限性在於它的簡單性,因此有一些模型對其進行了改進和擴充套件,統稱為TransX系列模型,多了一個對於節點嵌入向量的可訓練變換 g i , τ ( ⋅ ) g_{i,\tau}(\cdot) gi,τ()
D E C ( z u , τ , z v ) =   − ∣ g 1 , τ ( z u ) + r τ − g 2 , τ ( z v ) ∣ DEC(z_u,\tau,z_v)=\ -|g_{1,\tau}(z_u)+r_{\tau}-g_{2,\tau}(z_v)| DEC(zu,τ,zv)= g1,τ(zu)+rτg2,τ(zv)

Multi-linear dot products
使用了點積編碼器的模型是DistMult,它主要對簡單圖上的點積編碼器進行了推廣和泛化。
D E C ( z u , τ , z v ) = < z u , r τ , z v > = ∑ i = 1 d z u [ i ] × r τ [ i ] × z v [ i ] DEC(z_u,\tau,z_v)=<z_u,r_\tau,z_v>=\sum_{i=1}^dz_u[i]\times r_\tau[i]\times z_v[i] DEC(zu,τ,zv)=<zu,rτ,zv>=i=1dzu[i]×rτ[i]×zv[i]
簡單粗暴的後果就是隻能表示對稱關係,無法表示有向或非對稱關係。

Complex decoders
針對DistMult模型的缺點,ComplEx模型引入了複數值嵌入。
D E C ( z u , τ , z v ) = R e ( < z u , r τ , z ‾ v > ) = R e ( ∑ i = 1 d z u [ i ] × r τ [ i ] × z ‾ v [ j ] ) DEC(z_u,\tau,z_v)=Re(<z_u,r_\tau,\overline z_v>)=Re\left(\sum_{i=1}^dz_u[i]\times r_\tau[i]\times \overline z_v[j]\right) DEC(zu,τ,zv)=Re(<zu,rτ,zv>)=Re(i=1dzu[i]×rτ[i]×zv[j])
看起來貌似和DistMult沒什麼太大的區別,實際上裡面參與運算的向量都是複數向量,即 z u , r τ , z ‾ v ∈ C d z_u,r_{\tau},\overline z_v\in \mathbb C^d zu,rτ,zvCd。Re代表取實部, z ‾ v \overline z_v zv z v z_v zv的複共軛。

另一個複數模型是RotatE,它將解碼器定義為複平面上的旋轉(rotation)。
D E C ( z u , τ , z v ) =   − ∣ ∣ z u ∘ r τ − z v ∣ ∣ DEC(z_u,\tau,z_v)=\ -||z_u\circ r_{\tau}-z_v|| DEC(zu,τ,zv)= zurτzv
其中 ∘ \circ 為哈達瑪積,所有的向量均為複數向量,且 ∣ r τ [ i ] ∣ = 1 |r_\tau[i]|=1 rτ[i]=1,對應於複平面上的旋轉。

4.3.1 Representational abilities

我們可以根據模型在不同的關係邏輯模式上的表達能力,來評價各種多關係解碼器。

在這裡插入圖片描述

Symmetry and anti-symmetry
一個重要的問題是,不同的解碼器是否能夠同時建模對稱和反對稱關係。

Inversion
與對稱相關的是逆(反轉)的概念,其中的一個關係指示了另一個關係的存在,它們的方向相反。

Compositonality
我們還可以考慮,解碼器是否可以編碼關係表示之間的組合性。

一般來說,考慮這些關係模式有助於比較不同的多關係解碼器的表達能力。在實踐中,我們可能不寄希望於這些模式一直成立,但可能有許多關係在某種程度上表現出這些模式。

相關文章