咱們首先給出本文中使用的符號,而後形式化要解決的二分網絡嵌入問題。算法
符號:設G = (U, V, E)
爲二分網絡,其中U
和V
分別表示兩種頂點的集合,E ⊆ U × V
定義集合間的邊。 如圖 2 所示,u[i]
和v[j]
分別表示U
和V
中的第i
和第j
個頂點,其中i = 1,2, ..., |U|
和j = 1, 2, ..., |V|
。 每一個邊帶有一個非負權重w[ij]
,描述頂點u[i]
和v[j]
之間的鏈接強度;若是u[i]
和v[j]
斷開鏈接,則邊權重w[ij]
設置爲零。 所以,咱們可使用|U|×|V|
矩陣W = (w[ij])
表示二分網絡中的全部權重。數組
問題定義:二分網絡嵌入的任務,旨在將網絡中的全部頂點映射到低維嵌入空間,其中每一個頂點表示爲密集嵌入向量。 在嵌入空間中,應保留相同類型的頂點之間的隱式關係,和不一樣類型的頂點之間的顯式關係。形式上,問題能夠定義爲:網絡
G = (U, V, E)
和權重矩陣W
f: U ∪ V -> R^d
,它將G
中每一個節點映射爲d
維嵌入向量爲了使符號簡單,咱們使用(帶箭頭的)u[i]
和v[j]
分別表示頂點u[i]
和v[j]
的嵌入向量。 所以,咱們能夠將二分網絡中全部頂點的嵌入向量表示爲兩個矩陣U = (u[i])
和V = (v[j])
。框架
良好的網絡嵌入應該可以很好地重建原始網絡。 爲了對二分網絡實現這一目標,咱們考慮從兩個角度重構二分網絡 - 由觀察到的邊證實的顯式關係和由未觀察但傳遞的連接隱含的隱含關係。 而後,咱們經過聯合優化這兩個任務來學習頂點嵌入。本節介紹了咱們的 BiNE 方法。dom
在二分網絡中,邊存在於兩種不一樣類型的頂點之間,在構建二分網絡時提供顯式信號。 相似於 LINE [20] 中的一階鄰近度建模,咱們經過考慮兩個鏈接頂點之間的局部鄰近度來建模顯式關係。 頂點u[i]
和v[j]
之間的聯合機率定義爲:函數
(1)學習
其中w[ij]
是邊e[ij]
的權重。顯然,若是兩個頂點以較大權重緊密相連,則它們共同出現的機率較高。優化
如今咱們考慮如何估計嵌入空間中兩個頂點之間的局部鄰近度。 word2vec 的有效性和普及性激發了許多工做 [4,8,20],使用內積來模擬兩個實體之間的相互做用。 咱們遵循這個設置,並使用 sigmoid 函數將交互值轉換爲機率空間:編碼
(2)spa
其中u[i] ∈ R^d
和v[j] ∈ R^d
分別是頂點u[i]
和v[j]
的嵌入向量。
利用頂點間共現機率的經驗分佈和重建分佈,咱們能夠經過最小化它們的差別來學習嵌入向量。 咱們選擇 KL 散度做爲分佈之間的差別度量,能夠定義爲:
(3)
直觀上,最小化該目標函數將使得在原始網絡中強鏈接的兩個頂點在嵌入空間中也彼此靠近,這保留了所需的局部鄰近度。
現有的推薦工做 [12,15] 所示,顯性和隱性關係都有助於揭示二分網絡中的不一樣語義。爲了全面,一樣重要的是還要考慮相同類型的兩個頂點之間的隱式關係,即便它們沒有顯式鏈接。直觀上,對於相同類型的兩個頂點,若是它們之間存在路徑,則它們之間應該存在某種隱式關係;路徑的數量及其長度表示隱式關係的強度。不幸的是,計算兩個頂點之間的路徑具備指數階的至關高的複雜度,這對於大型網絡是不可行的。爲了在二分網絡中的頂點之間編碼這種高階隱式關係,咱們求助於 DeepWalk 的解決方案。具體地,首先經過執行隨機遊走將二分網絡轉換爲頂點序列的兩個語料庫;而後從語料庫中學習嵌入,語料庫編碼頂點之間的高階關係。在下文中,咱們首先詳細說明如何爲二分網絡生成兩個高質量的語料庫。
這是一種經常使用方法,經過在網絡上執行隨機遊走將網絡轉換爲頂點序列語料庫,已經在一些同構網絡嵌入方法中使用 [4,8]。 然而,直接在二分網絡上執行隨機遊走可能會失敗,由於因爲週期性問題,二分網絡上沒有隨機遊走的固定分佈 [34]。 爲了解決這個問題,咱們考慮在兩個同構網絡上進行隨機漫遊,這兩個網絡包含相同類型頂點之間的二階鄰近度。 按照 Co-HITS [1] 的思想,咱們將兩個頂點之間的二階鄰近度定義爲:
其中w[ij]
是邊e[ij]
的權重。 所以,咱們可使用|U|×|U|
矩陣W^U = (w^U[ij])
和|V|×|V|
矩陣W^V = (w^V[ij])
分別表示兩個所得同質網絡。
如今咱們能夠在兩個同構網絡上執行截斷隨機遊走,來生成兩個語料庫來學習高階隱式關係。 如圖 1 所示,DeepWalk 生成的語料庫可能沒法捕獲真實網絡的特徵。 爲了生成具備高保真度的語料庫,咱們提出了一種偏置且自適應的隨機遊走生成器,其能夠保持二分網絡中的頂點分佈。 咱們將其核心設計以下重點介紹:
通常來講,上述生成過程遵循「富人更富」的原則,這是一種存在於許多真實網絡中的物理現象,即頂點連通性遵循無標度冪律分佈 [35]。
咱們的隨機遊走生成器的工做流程總結在算法 1 中,其中maxT
和minT
分別是從每一個頂點開始的隨機遊走的最大和最小數量。 算法 1 輸出的D^U
(或D^V
)是從頂點集U
(或V
)生成的語料庫。 頂點中心性能夠經過許多度量來衡量,例如度中心性,PageRank 和 HITS [29] 等,咱們在實驗中使用 HITS。
Algorithm 1: WalkGenerator(W, R, maxT, minT, p) ----------------------------------------------- Input: weight matrix of the bipartite network W, vertex set R (can be U or V ), maximal walks per vertex maxT, minimal walks per vertex minT, walk stopping probability p Output: a set of vertex sequences D^R 1 Calculate vertices’ centrality: H = CentralityMeasure(W); 2 Calculate W^R w.r.t. Equation (4); 3 foreach vertex vi ∈ R do 4 l = max(H(vi) × maxT, minT); 5 for i = 0 to l do 6 D[v[i]] = BiasedRamdomWalk(W^R, v[i], p); 7 Add D[v[i]] into D^R; 8 return D^R;
在分別對兩個同構網絡進行誤差隨機遊走後,咱們獲得頂點序列的兩個語料庫。 接下來,咱們在兩個語料庫上使用 Skipgram 模型 [11] 來學習頂點嵌入。
目的是捕獲高階鄰近度,其假定常常在序列的相同上下文中共同出現的頂點,應被分配給相似的嵌入。 給定頂點序列S
和頂點u[i]
,上下文被定義爲u[i]
以前和以後u[i]
中的ws
頂點;每一個頂點與上下文向量相關聯,來將其表示爲上下文的角色。 因爲二分網絡中有兩種類型的頂點,咱們分別保留高階鄰近度。 具體而言,對於語料庫D^U
,最大化的條件機率是:
(5)
其中C[S](u[i])
表示序列S
中頂點u[i]
的上下文頂點。相似地,咱們能夠獲得語料庫D^V
的目標函數:
(6)
按照現有的神經嵌入方法 [4,8,20],咱們爲輸出使用帶有 softmax 的內積核,參數化條件機率P(u[c] | u[i])
和P(v[c] | v[j])
:
其中P(u[c] | u[i])
表示在u[i]
的上下文中觀察u[c]
的可能性;相似的含義適用於P(v[c] | v[j])
。 經過該定義,實現公式(5)和(6)中定義的目標,將迫使具備類似上下文的頂點在嵌入空間中接近。 然而,優化目標並不是易事,由於 softmax 函數的每次評估都須要遍歷一側的全部頂點,這是很是耗費時間的。 爲了下降學習的複雜性,咱們採用了負採樣的概念 [11]。
負採樣的想法是用一些抽樣的負實例逼近 softmax 的昂貴分母項 [36]。 而後,能夠經過優化逐元素分類損失來執行學習。 對於中心頂點u[i]
,高質量負樣本應該是與u[i]
不一樣的頂點。 爲了實現這一目標,已經應用了一些啓發式方法,例如從誤差爲受歡迎程度的非均勻分佈中抽樣 [11]。 在這裏,咱們提出了一種更落地的採樣方法,來知足網絡數據。
首先,咱們相對於輸入二分網絡中的拓撲結構,將每一個頂點與其ws
跳的鄰居重疊,以後使用局部敏感散列(LSH)[37] 來封住頂點。 而後給定一箇中心頂點,咱們從與包含中心頂點的桶不一樣的桶中,隨機選擇負樣本。 經過這種方式,咱們能夠得到高質量和多樣化的負樣本,由於 LSH 能夠保證不一樣的頂點以機率方式位於不一樣的桶中 [37]。
令N^{ns}[S](u[i])
表示序列S ∈ D^U
中的中心頂點u[i]
的ns
負樣本,而後咱們能夠將公式(7)中定義的條件機率p(u[c] | u[i])
近似爲:
其中P(z|u[j])
定義爲:
其中σ
表示 S 形函數1 / (1 + exp(-x))
。 經過將公式(5)中的p(u[c] | u[i])
替換爲p(u[c], N^{ns}[S](u[i])| u[i])
的定義,咱們能夠獲得近似的目標函數來優化。 語義是中心頂點與其上下文頂點之間的鄰近度應該最大化,而中心頂點和負樣本之間的鄰近度應該最小化。
按照相似的公式,咱們能夠獲得條件機率`p(v[c] | v[j])的對應物,因爲空間限制,這裏省略了其細節。
爲了經過同時保留顯式和隱式關係來嵌入二分網絡,咱們將它們的目標函數組合起來造成一個聯合優化框架。
其中參數α
,β
和γ
是要指定的超參數,用於組合聯合優化框架中的不一樣組件。
爲了優化聯合模型,咱們使用隨機梯度上升算法(SGA)。 注意,公式(9)的三個份量具備不一樣的訓練實例定義。 爲了解決這個問題,咱們經過執行以下的梯度步驟來調整 SGA 算法:
第一步:對於隨機顯式關係,即邊e[ij] ∈ E
,咱們首先經過利用 SGA 更新嵌入向量u[i]
和v[j]
以最大化最後的份量L[1] = -γO[1]
。 咱們爲u[i]
和v[j]
提供 SGA 更新規則,以下所示:
其中λ
表示學習率。
第二步:而後咱們將頂點u[i]
和v[j]
視爲中心頂點; 經過使用 SGA 最大化目標函數L[2] = α logO[2]
和L[3] = β logO[3]
,咱們能夠保留隱式關係。 具體來講,給定中心頂點u[i]
(或v[j]
)及其上下文頂點u[c]
(或v[c]
),咱們更新它們的嵌入向量u[i]
(或v[j]
),以下所示:
其中I(z, u[i])
是一個指標函數,用於肯定頂點z
是否在u[i]
的上下文中;相似的含義適用於I(z, v[j])
。 此外,正和負實例的上下文向量更新爲:
咱們在算法 2 中總結了學習過程。具體來講,第 1-2 行初始化全部嵌入向量和上下文向量;第 3-4 行產生頂點序列的語料庫;第8和第12行進行負採樣; 第 9-10 行和第 13-14 行使用 SGA 來學習嵌入。
Algorithm 2: Training algorithm of BiNE --------------------------------------- Input: bipartite network G = (U, V, E), weight matrix of the bipartite network W, window size ws, number of negative samples ns, embedding size d, maximal walks per vertex maxT, minimal walks per vertex minT, walk stopping probability p Output: vertex embeding matrices U and V 1 Initialize embedding vectors u[i] and v[j]; 2 Initialize context vectors θ[i] and ϑ[j]; 3 D^U = WalkGenerator(W,U,maxT,minT,p); 4 D^V = WalkGenerator(W,V,maxT,minT,p); 5 foreach edge (u[i], v[j]) ∈ E do 6 Update u[i] and v[j] using Equations (10) and (11); 7 foreach (u[i], u[c]) in the sequence S ∈ D^U do 8 Negative sampling to generate N^{ns}[S](u[i]); 9 Update u[i] using Equation (12); 10 Update θ[z] using Equation (14) where z ∈ {u[c]} ∪ N^{ns}[S](u[i]); 11 foreach (v[j], v[c]) in the sequence S ∈ D^V do 12 Negative sampling to generate N^{ns}[S](v[j]); 13 Update v[j] using Equation (13); 14 Update ϑ[z] using Equation (15) where z ∈ {v[c]} ∪ N^{ns}[S](v[j]); 15 return Vertex embeding matrices U and V
預訓練:BiNE 在公式(9)中的聯合目標函數是非凸的,所以初始化對於找到一個好的解決方案起着重要的做用。咱們預訓練公式(3)來得到初始頂點嵌入。
計算複雜性分析:語料庫生成和聯合模型優化是 BiNE 的兩個關鍵過程。 然而,若是W^U
或W^V
變得密集,則生成語料庫的複雜性將增長。 爲了不處理密集矩陣,另外一種方法是在原始的二分網絡中走兩步。 假設v[c]
是生成的語料庫中頂點v
的訪問計數。 所以上下文大小爲v[c]·2ws
。 對於高度的頂點,它多是一個大值,但咱們只是隨機選擇一小部分上下文頂點,例如bs (bs « vc)
。 所以,算法的複雜度爲O(2|E|·bs·2ws·(ns + 1))
,其中ns
是負樣本的數量。 在某種程度上,經過設置適當的bs
,能夠在每次迭代中訓練中心頂點的全部上下文頂點,由於在遍歷全部邊時將屢次訪問中心頂點。