這裡是「王喆的機器學習筆記」的第十四篇文章,之前已經有無數同學讓我介紹一下Graph Embedding,我想主要有兩個原因:
- 一是因為Graph Embedding是推薦系統、計算廣告領域最近非常流行的做法,是從word2vec等一路發展而來的Embedding技術的最新延伸;二是因為已經有很多大廠將Graph Embedding應用於實踐後取得了非常不錯的線上效果。
那我們今天就一起討論一下Graph Embedding的主要做法和前沿應用。
word2vec和由其衍生出的item2vec是embedding技術的基礎性方法(我在之前的文章中也詳細介紹了二者的技術原理,王喆:萬物皆Embedding,從經典的word2vec到深度學習基本操作item2vec),但二者都是建立在“序列”樣本(比如句子、推薦列表)的基礎上的。而在網際網路場景下,資料物件之間更多呈現的是圖結構。典型的場景是由使用者行為資料生成的和物品全域性關係圖(圖1),以及加入更多屬性的物品組成的知識圖譜(圖2)。
圖1 由使用者行為序列生成的物品全域性關係圖 (引自阿里論文)
圖2 由屬性、實體、各類知識組成的知識圖譜
在面對圖結構的時候,傳統的序列embedding方法就顯得力不從心了。在這樣的背景下,對圖結構中間的節點進行表達的graph embedding成為了新的研究方向,並逐漸在深度學習推薦系統領域流行起來。
經典的Graph Embedding方法——DeepWalk
早期影響力較大的graph embedding方法是2014年提出的DeepWalk,它的主要思想是在由物品組成的圖結構上進行隨機遊走,產生大量物品序列,然後將這些物品序列作為訓練樣本輸入word2vec進行訓練,得到物品的embedding。圖3用圖示的方法展現了DeepWalk的過程。
圖3 DeepWalk的演算法流程(引自阿里論文)
如圖3,整個DeepWalk的演算法流程可以分為四步:
- 圖a展示了原始的使用者行為序列圖b基於這些使用者行為序列構建了物品相關圖,可以看出,物品A,B之間的邊產生的原因就是因為使用者U1先後購買了物品A和物品B,所以產生了一條由A到B的有向邊。如果後續產生了多條相同的有向邊,則有向邊的權重被加強。在將所有使用者行為序列都轉換成物品相關圖中的邊之後,全域性的物品相關圖就建立起來了。圖c採用隨機遊走的方式隨機選擇起始點,重新產生物品序列。圖d最終將這些物品序列輸入word2vec模型,生成最終的物品Embedding向量。
在上述DeepWalk的演算法流程中,核心是第三步,其中唯一需要形式化定義的是隨機遊走的跳轉概率,也就是到達節點vi後,下一步遍歷vi的臨接點vj的概率。如果物品的相關圖是有向有權圖,那麼從節點vi跳轉到節點vj的概率定義如下:
其中N+(vi)是節點vi所有的出邊集合,Mij是節點vi到節點vj邊的權重。
如果物品相關圖是無相無權重圖,那麼跳轉概率將是上面公式的一個特例,即權重Mij將為常數1,且N+(vi)應是節點vi所有“邊”的集合,而不是所有“出邊”的集合。
DeepWalk的進一步改進——Node2vec
2016年,史丹佛大學在DeepWalk的基礎上更進一步,通過調整隨機遊走權重的方法使graph embedding的結果在網路的同質性(homophily)和結構性(structural equivalence)中進行權衡權衡。
具體來講,網路的“同質性”指的是距離相近節點的embedding應該儘量近似,如圖4,節點u與其相連的節點s1、s2、s3、s4的embedding表達應該是接近的,這就是“同質性“的體現。
“結構性”指的是結構上相似的節點的embedding應該儘量接近,圖4中節點u和節點s6都是各自區域網路的中心節點,結構上相似,其embedding的表達也應該近似,這是“結構性”的體現。
圖4 寬度優先搜尋(BFS)和 深度優先搜尋(DFS)示意圖
為了使Graph Embedding的結果能夠表達網路的同質性,在隨機遊走的過程中,需要讓遊走的過程更傾向於寬度優先搜尋(BFS),因為BFS更喜歡遊走到跟當前節點有直接連線的節點上,因此就會有更多同質性資訊包含到生成的樣本序列中,從而被embedding表達;另一方面,為了抓住網路的結構性,就需要隨機遊走更傾向於深度優先搜尋(DFS),因為DFS會更傾向於通過多次跳轉,遊走到遠方的節點上,使得生成的樣本序列包含更多網路的整體結構資訊。(通過
@張備
同學的提醒,這裡其實是寫反了,BFS應該反映了結構性,DFS反而反應了同質性,大家可以深度思考一下這是為什麼,歡迎在評論區討論)那麼在node2vec演算法中,是怎樣控制BFS和DFS的傾向性的呢?主要是通過節點間的跳轉概率。圖5顯示了node2vec演算法從節點t跳轉到節點v後,下一步從節點v跳轉到周圍各點的跳轉概率。
圖5 node2vec的跳轉概率
形式化來講,從節點v跳轉到下一個節點x的概率為
其中 Wvx 是邊vx的權重, apq(t,x) 的定義如下:
其中,dtx指的是節點t到節點x的距離,引數p和q共同控制著隨機遊走的傾向性。引數p被稱為返回引數(return parameter),p越小,隨機遊走回節點t的可能性越大,node2vec就更注重表達網路的同質性,引數q被稱為進出引數(in-out parameter),q越小,則隨機遊走到遠方節點的可能性越大,node2vec更注重表達網路的結構性,反之,當前節點更可能在附近節點遊走。
node2vec這種靈活表達同質性和結構性的特點也得到了實驗的證實。圖6的上圖就是node2vec更注重同質性的體現,可以看到距離相近的節點顏色更為接近,而圖6下圖則是結構特點相近的節點的顏色更為接近。
圖6 node2vec實驗結果
node2vec所體現的網路的同質性和結構性在推薦系統中也是可以被很直觀的解釋的。同質性相同的物品很可能是同品類、同屬性、或者經常被一同購買的物品,而結構性相同的物品則是各品類的爆款、各品類的最佳湊單商品等擁有類似趨勢或者結構性屬性的物品。毫無疑問,二者在推薦系統中都是非常重要的特徵表達。由於node2vec的這種靈活性,以及發掘不同特徵的能力,甚至可以把不同node2vec生成的embedding融合共同輸入後續深度學習網路,以保留物品的不同特徵資訊。
阿里的Graph Embedding方法EGES
2018年阿里公佈了其在淘寶應用的Embedding方法EGES(Enhanced Graph Embedding with Side Information),其基本思想是在DeepWalk生成的graph embedding基礎上引入補充資訊。
如果單純使用使用者行為生成的物品相關圖,固然可以生成物品的embedding,但是如果遇到新加入的物品,或者沒有過多互動資訊的長尾物品,推薦系統將出現嚴重的冷啟動問題。為了使“冷啟動”的商品獲得“合理”的初始Embedding,阿里團隊通過引入了更多補充資訊來豐富Embedding資訊的來源,從而使沒有歷史行為記錄的商品獲得Embedding。
生成Graph embedding的第一步是生成物品關係圖,通過使用者行為序列可以生成物品相關圖,利用相同屬性、相同類別等資訊,也可以通過這些相似性建立物品之間的邊,從而生成基於內容的knowledge graph。而基於knowledge graph生成的物品向量可以被稱為補充資訊(side information)embedding向量,當然,根據補充資訊類別的不同,可以有多個side information embedding向量。
那麼如何融合一個物品的多個embedding向量,使之形成物品最後的embedding呢?最簡單的方法是在深度神經網路中加入average pooling層將不同embedding平均起來,阿里在此基礎上進行了加強,對每個embedding加上了權重,如圖7所示,對每類特徵對應的Embedding向量,分別賦予了權重a0,a1…an。圖中的Hidden Representation層就是對不同Embedding進行加權平均操作的層,得到加權平均後的Embedding向量後,再直接輸入softmax層,這樣通過梯度反向傳播,就可以求的每個embedding的權重ai(i=0…n)。
圖7 阿里的EGES Graph Embedding模型
在實際的模型中,阿里採用了 e^aj, 而不是aj作為相應embedding的權重,一是避免權重為0,二是因為 e^aj在梯度下降過程中有良好的數學性質。
阿里的EGES並沒有過於複雜的理論創新,但給出一個工程性的結合多種Embedding的方法,降低了某類Embedding缺失造成的冷啟動問題,是實用性極強的Embedding方法。
時至今日,Graph Embedding仍然是工程和學術領域研究和實踐的熱點,除了本節介紹的DeepWalk,Node2vec,EGES等主流的方法,還有LINE,SDNE等方法也很流行,感興趣的同學可以參考我之前的綜述性文章 王喆:Embedding從入門到專家必讀的十篇論文 或者直接閱讀論文。
按照慣例留一個討論題,希望大家踴躍發表意見,讓我們所有人都從討論中受益:
在使用Graph Embedding生成物品的Embedding之後,應該如何生成使用者的Embedding?除了Average Pooling有更好的方法嗎?