LIine 演算法與deepwalk的對比 和個人理解
使用者的關注關係本身就是一個圖結構,要從使用者關注關係生成使用者的embedding表示,其實就是做graph的emebding表示。
deepwalk+word2vec 比較簡單,效果也還可以。這種方法再此不再介紹。
接下里記下我對line演算法的一些理解。
先說line演算法要解決的問題。
1、需要能夠表示有向圖。
2、能夠體現節點的權重,邊的權重。節點的權重論文中使用了節點的出度作為節點的權重。
3、能夠體現節點的結構相似性,其實就是有相似的上下文。這個line演算法分別提出了一階相似和二階相似。
接下來詳細說說一階和二階相似性。
其中一階相似是指直接有邊相連的節點i,j 。用i節點的向量推出j節點向量的概率有多大。如果i和j沒有邊相連線,則一階相似性為0。如果對應於使用者的關注關係組成的圖的話,這個其實就是好友間的相似。還需要指出的是一階對於邊直接認為是無向圖的邊,不考慮方向性。對於使用者間一階相似性的邊權重可以通過使用者間互動行為,統計出來一個親密度。
二階相似性,為了解決一階相似沒有考慮朋友的朋友間的相似性,而提出的。這種朋友的朋友之間的相似性是通過給每個頂點增加一個上下文向量來實現的。一個頂點有兩個向量分別是上下文向量和本身的節點向量。上下文向量是說一個節點可以作為其相鄰節點的上下文。兩個不直接相連的節點越相似,也就是說他們的共同上下文節點越多,也就是他們的共同好友越多。
二階相似性,會考慮邊的權重,和節點的權重。論文中節點的權重使用節點的出度。
line演算法與deepwalk的對比:
line考慮了邊的權重,二階相似還會考慮有向圖的情況,類似單向的關注關係。
line演算法在實現和訓練過程中優化:
line演算法定義了一階和二階相似的經驗概率,就是從i節點推出j節點的經驗概率,如何算。然後對於一階的話是直接i節點向量和j節點向量來算,但是對於二階需要計算softmax,softmax分母需要計算所有節點的上下文向量與節點i向量的點乘概率,直接算複雜度高。
line演算法的代價函式是經驗概率與計算的概率之間的KL散度,KL散度的優化其實等價於交叉熵。這一步存在的問題是代價函式會乘以權重。如果權重的方差比較大,那麼這個訓練就很成問題了。
對於計算softmax的問題,當然還是和訓練word2vec時候一樣通過選一些負樣本,對負樣本做取樣來解決。在取樣的時候使用alias演算法減少時間複雜度。
解決權重係數對梯度傳到的影響(乘係數之後會導致梯度特別大或者梯度特別小),通過對邊按照權重進行取樣來解決。取樣之後就不需要乘權重了。
其實負取樣和過取樣的取樣比例其實也等同於對這種型別的樣本乘以係數。不過我的疑問就是這樣取樣之後有些邊就不參與訓練了吧。
存在的問題:
line的一階和二階向量是分開訓練的,一階向量和二階向量如何結合。論文給出的方法是直接拼接起來,然後給一階和二階不同的權重。
line雖然考慮了一階和二階。但是也只是到鄰居的鄰居。對於有些節點邊比較少,這種如何更好的訓練。論文中提出了一個增加邊的方式,構造些鄰居的鄰居之間的邊,以及設定邊權重的方式。
演算法效果:
在稀疏資料上 line的一階比二階要好,增加鄰居到鄰居的邊之後對效果有所提升。邊比較多的話,一階和二階結合比單獨使用一階和二階效果要更好。