日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习中不得不学的Graph Embedding方法

發布時間:2024/7/5 pytorch 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习中不得不学的Graph Embedding方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接:https://zhuanlan.zhihu.com/p/64200072

深度學習中不得不學的Graph Embedding方法

王喆?數據挖掘等 3 個話題下的優秀答主?關注他1,290 人贊同了該文章

這里是「王喆的機器學習筆記」的第十四篇文章,之前已經有無數同學讓我介紹一下Graph Embedding,我想主要有兩個原因:

  • 一是因為Graph Embedding是推薦系統、計算廣告領域最近非常流行的做法,是從word2vec等一路發展而來的Embedding技術的最新延伸;
  • 二是因為已經有很多大廠將Graph Embedding應用于實踐后取得了非常不錯的線上效果。

那我們今天就一起討論一下Graph Embedding的主要做法和前沿應用。

word2vec和由其衍生出的item2vec是embedding技術的基礎性方法(我在之前的文章中也詳細介紹了二者的技術原理,王喆:萬物皆Embedding,從經典的word2vec到深度學習基本操作item2vec),但二者都是建立在“序列”樣本(比如句子、推薦列表)的基礎上的。而在互聯網場景下,數據對象之間更多呈現的是圖結構。典型的場景是由用戶行為數據生成的和物品全局關系圖(圖1),以及加入更多屬性的物品組成的知識圖譜(圖2)。

<img src="https://pic2.zhimg.com/v2-aef010269ddfef8db052fa65479ba9dd_b.jpg" data-size="normal" data-rawwidth="1074" data-rawheight="630" class="origin_image zh-lightbox-thumb" width="1074" data-original="https://pic2.zhimg.com/v2-aef010269ddfef8db052fa65479ba9dd_r.jpg"/>圖1 由用戶行為序列生成的物品全局關系圖 (引自阿里論文)<img src="https://pic3.zhimg.com/v2-ad4da5b234e34bf4cf19aa1ea511d496_b.jpg" data-size="normal" data-rawwidth="1000" data-rawheight="500" class="origin_image zh-lightbox-thumb" width="1000" data-original="https://pic3.zhimg.com/v2-ad4da5b234e34bf4cf19aa1ea511d496_r.jpg"/>圖2 由屬性、實體、各類知識組成的知識圖譜

在面對圖結構的時候,傳統的序列embedding方法就顯得力不從心了。在這樣的背景下,對圖結構中間的節點進行表達的graph embedding成為了新的研究方向,并逐漸在深度學習推薦系統領域流行起來。

經典的Graph Embedding方法——DeepWalk

早期影響力較大的graph embedding方法是2014年提出的DeepWalk,它的主要思想是在由物品組成的圖結構上進行隨機游走,產生大量物品序列,然后將這些物品序列作為訓練樣本輸入word2vec進行訓練,得到物品的embedding。圖3用圖示的方法展現了DeepWalk的過程。

<img src="https://pic3.zhimg.com/v2-6c548cc39af4400988d04ed1104bb3c2_b.jpg" data-size="normal" data-rawwidth="1800" data-rawheight="526" class="origin_image zh-lightbox-thumb" width="1800" data-original="https://pic3.zhimg.com/v2-6c548cc39af4400988d04ed1104bb3c2_r.jpg"/>圖3 DeepWalk的算法流程(引自阿里論文)

如圖3,整個DeepWalk的算法流程可以分為四步:

  • 圖a展示了原始的用戶行為序列
  • 圖b基于這些用戶行為序列構建了物品相關圖,可以看出,物品A,B之間的邊產生的原因就是因為用戶U1先后購買了物品A和物品B,所以產生了一條由A到B的有向邊。如果后續產生了多條相同的有向邊,則有向邊的權重被加強。在將所有用戶行為序列都轉換成物品相關圖中的邊之后,全局的物品相關圖就建立起來了。
  • 圖c采用隨機游走的方式隨機選擇起始點,重新產生物品序列。
  • 圖d最終將這些物品序列輸入word2vec模型,生成最終的物品Embedding向量。
  • 在上述DeepWalk的算法流程中,核心是第三步,其中唯一需要形式化定義的是隨機游走的跳轉概率,也就是到達節點vi后,下一步遍歷vi的臨接點vj的概率。如果物品的相關圖是有向有權圖,那么從節點vi跳轉到節點vj的概率定義如下:

    <img src="https://pic3.zhimg.com/v2-c659f8c1dd22e4e646f4e454813cf9a2_b.jpg" data-caption="" data-size="normal" data-rawwidth="1002" data-rawheight="296" class="origin_image zh-lightbox-thumb" width="1002" data-original="https://pic3.zhimg.com/v2-c659f8c1dd22e4e646f4e454813cf9a2_r.jpg"/>

    其中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的表達也應該近似,這是“結構性”的體現。

    <img src="https://pic3.zhimg.com/v2-147bb9aa6cb646c83680e93bcf016c4e_b.jpg" data-size="normal" data-rawwidth="1544" data-rawheight="552" class="origin_image zh-lightbox-thumb" width="1544" data-original="https://pic3.zhimg.com/v2-147bb9aa6cb646c83680e93bcf016c4e_r.jpg"/>圖4 寬度優先搜索(BFS)和 深度優先搜索(DFS)示意圖

    為了使Graph Embedding的結果能夠表達網絡的同質性,在隨機游走的過程中,需要讓游走的過程更傾向于寬度優先搜索(BFS),因為BFS更喜歡游走到跟當前節點有直接連接的節點上,因此就會有更多同質性信息包含到生成的樣本序列中,從而被embedding表達;另一方面,為了抓住網絡的結構性,就需要隨機游走更傾向于深度優先搜索(DFS),因為DFS會更傾向于通過多次跳轉,游走到遠方的節點上,使得生成的樣本序列包含更多網絡的整體結構信息。(通過

    @張備 同學的提醒,這里其實是寫反了,BFS應該反映了結構性,DFS反而反應了同質性,大家可以深度思考一下這是為什么,歡迎在評論區討論)

    那么在node2vec算法中,是怎樣控制BFS和DFS的傾向性的呢?主要是通過節點間的跳轉概率。圖5顯示了node2vec算法從節點t跳轉到節點v后,下一步從節點v跳轉到周圍各點的跳轉概率。

    <img src="https://pic2.zhimg.com/v2-20a6b345cfe45706b43db91a78ee5b69_b.jpg" data-size="normal" data-rawwidth="1026" data-rawheight="670" class="origin_image zh-lightbox-thumb" width="1026" data-original="https://pic2.zhimg.com/v2-20a6b345cfe45706b43db91a78ee5b69_r.jpg"/>圖5 node2vec的跳轉概率

    形式化來講,從節點v跳轉到下一個節點x的概率為

    <img src="https://pic2.zhimg.com/v2-61287731efe14d38a7084fa2f77ec3c1_b.jpg" data-caption="" data-size="normal" data-rawwidth="426" data-rawheight="78" class="origin_image zh-lightbox-thumb" width="426" data-original="https://pic2.zhimg.com/v2-61287731efe14d38a7084fa2f77ec3c1_r.jpg"/>

    其中 是邊vx的權重, 的定義如下:

    <img src="https://pic2.zhimg.com/v2-481056c49b3619ff679fe10ee38c24c1_b.jpg" data-caption="" data-size="normal" data-rawwidth="604" data-rawheight="242" class="origin_image zh-lightbox-thumb" width="604" data-original="https://pic2.zhimg.com/v2-481056c49b3619ff679fe10ee38c24c1_r.jpg"/>

    其中,dtx指的是節點t到節點x的距離,參數p和q共同控制著隨機游走的傾向性。參數p被稱為返回參數(return parameter),p越小,隨機游走回節點t的可能性越大,node2vec就更注重表達網絡的同質性,參數q被稱為進出參數(in-out parameter),q越小,則隨機游走到遠方節點的可能性越大,node2vec更注重表達網絡的結構性,反之,當前節點更可能在附近節點游走。

    node2vec這種靈活表達同質性和結構性的特點也得到了實驗的證實。圖6的上圖就是node2vec更注重同質性的體現,可以看到距離相近的節點顏色更為接近,而圖6下圖則是結構特點相近的節點的顏色更為接近。

    <img src="https://pic1.zhimg.com/v2-d3b6b9ee7c3f3bbc1661ecf0bb678a18_b.jpg" data-size="normal" data-rawwidth="1008" data-rawheight="1052" class="origin_image zh-lightbox-thumb" width="1008" data-original="https://pic1.zhimg.com/v2-d3b6b9ee7c3f3bbc1661ecf0bb678a18_r.jpg"/>圖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)。

    <img src="https://pic2.zhimg.com/v2-740642a04298d289d19cd4225d062b5d_b.jpg" data-size="normal" data-rawwidth="1078" data-rawheight="794" class="origin_image zh-lightbox-thumb" width="1078" data-original="https://pic2.zhimg.com/v2-740642a04298d289d19cd4225d062b5d_r.jpg"/>圖7 阿里的EGES Graph Embedding模型

    在實際的模型中,阿里采用了 而不是aj作為相應embedding的權重,一是避免權重為0,二是因為 在梯度下降過程中有良好的數學性質。

    阿里的EGES并沒有過于復雜的理論創新,但給出一個工程性的結合多種Embedding的方法,降低了某類Embedding缺失造成的冷啟動問題,是實用性極強的Embedding方法。

    時至今日,Graph Embedding仍然是工程和學術領域研究和實踐的熱點,除了本節介紹的DeepWalk,Node2vec,EGES等主流的方法,還有LINE,SDNE等方法也很流行,感興趣的同學可以參考我之前的綜述性文章 王喆:Embedding從入門到專家必讀的十篇論文 或者直接閱讀論文。

    按照慣例留一個討論題,希望大家踴躍發表意見,讓我們所有人都從討論中受益:

    在使用Graph Embedding生成物品的Embedding之后,應該如何生成用戶的Embedding?除了Average Pooling有更好的方法嗎?

    最后歡迎大家關注我的微信公眾號:王喆的機器學習筆記(wangzhenotes),

    weixin.qq.com/r/Ny707Ov (二維碼自動識別)

    跟蹤計算廣告、推薦系統等機器學習領域前沿。想進一步交流的同學也可以通過公眾號加我的微信一同探討技術問題,謝謝!

    參考資料:

    • 王喆:萬物皆Embedding,從經典的word2vec到深度學習基本操作item2vec
    • 王喆:Embedding從入門到專家必讀的十篇論文
    • [Graph Embedding] DeepWalk- Online Learning of Social Representations (SBU 2014)
    • [Node2vec] Node2vec - Scalable Feature Learning for Networks (Stanford 2016)
    • [Alibaba Embedding] Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba (Alibaba 2018)
    • 王喆的推薦系統論文列表

    本文亦收錄在我的新書「深度學習推薦系統」中,這本書系統性地整理、介紹了專欄中所有的重點內容,如果您曾在「王喆的機器學習筆記」中受益,歡迎訂閱,謝謝知友們的支持!

    深度學習推薦系統京東¥ 54.00去購買?

    編輯于 2020-03-24「真誠贊賞,手留余香」贊賞

    2 人已贊賞

    深度學習(Deep Learning)機器學習推薦系統?贊同 1290??152 條評論?分享?喜歡?收藏?申請轉載?

    總結

    以上是生活随笔為你收集整理的深度学习中不得不学的Graph Embedding方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。