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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Graph Embedding】图嵌入的最佳实践—EGES(Enhanced Graph Embedding with Side Information)

發布時間:2024/1/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Graph Embedding】图嵌入的最佳实践—EGES(Enhanced Graph Embedding with Side Information) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • EGES背景—DeepWalk理論與實現
  • DeepWalk引入推薦系統—EGES

在閱讀此文之前建議先學習 word2vec詳解。
2018 年,阿里巴巴公布了其在淘寶應用的Embedding方法EGES(Enhanced Graph Embedding with Side Information)算法,是Graph Embedding最佳實踐。其基本思想是Embedding過程中引入帶權重的補充信息(Side Information),從而解決冷啟動的問題。
在介紹EGES之前,先了解一下DeepWalk理論,EGES是在DeepWalk的基礎上引入帶權重的side information。

EGES背景—DeepWalk理論與實現

圖嵌入是指在圖中隨機游走生成頂點的序列,構成訓練集,然后采用word2vec中的Skip_gram方法為圖中的每個結點學習一個低維向量表示,這是一個無監督訓練生成表示向量的過程。DeepWalk 出自論文:DeepWalk: Online Learning of Social Representations,最初提出是用于社交網絡關系的提取。給定一個關系: G L = ( V , E , X , Y ) , G_L= (V, E, X, Y ), GL?=(V,E,X,Y), 利用圖結構中的依賴關系來獲得重要信息。具體算法:

(1)RandomWalk的輸入是圖 G G G、隨機的節點 v i v_i vi?、生成的序列長度 t t t,返回隨機游走的序列。生成的每一個序列都作為一個句子。

(2)SkipGram的輸入是序列和一些基本參數,返回每個序列中的items的Embedding值。

DeepWalk實現

引入必要的庫

import networkx as nx import random

原始的圖文件Wiki_edgelist.txt:

node1 node2 node1 node3

這個是有向無權圖,以下代碼可以隨機生成權重。

w_f = open('data/wiki/Wiki_edgelist_p.edgelist', 'w') # 新的有向帶權圖 with open('data/wiki/Wiki_edgelist.txt', 'r') as f:for line in f.readlines():new_line = line.strip() +' '+ str(round(random.random(),2)) + '\n'print(new_line)w_f.write(new_line)

讀取有向帶權圖:

G = nx.read_edgelist('data/wiki/Wiki_edgelist.txt', create_using=nx.DiGraph(), data=(('weight',float)))

核心算法:

# 隨機生成長度為walk_length,起點為start_node的序列 def deepwalk_walk(walk_length, start_node):walk = [start_node]while len(walk) < walk_length:cur = walk[-1]cur_nbrs = list(G.neighbors(cur))if len(cur_nbrs) > 0:walk.append(random.choice(cur_nbrs))else:breakreturn walkdef _simulate_walks(nodes, num_walks, walk_length):walks = []for _ in range(num_walks):random.shuffle(nodes)# 為所有的結點生成序列for v in nodes:walks.append(deepwalk_walk(walk_length=walk_length, start_node=v))return walks

核心算法調用

# 獲取所有結點 nodes = list(G.nodes()) # 生成序列 walks = _simulate_walks(nodes, num_walks=80, walk_length=10)

使用 gensim 中的 Word2Vec 來實現節點的 Embedding:

from gensim.models import Word2Vec # 默認嵌入到100維 w2v_model = Word2Vec(walks,sg=1,hs=1) # 打印其中一個節點的嵌入向量 print(w2v_model['1397'])

也可以使用庫實現,github地址:https://github.com/shenweichen/GraphEmbedding
具體使用方式詳見github。

DeepWalk引入推薦系統—EGES

推薦問題通用框架是分成兩個階段,即matching 和 ranking。
(1)在matching階段,我們會生成一個候選集,它的items會與用戶接觸過的每個item具有相似性;

(2)在ranking階段,我們會訓練一個深度神經網絡模型,它會為每個用戶根據他的偏好對候選items進行排序。

論文Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba ,關注的問題在推薦系統的matching階段,也就是從商品池中召回候選商品的階段,核心的任務是計算所有item之間的相似度。論文提出了從用戶行為構建圖,其主要思想是:在物品組成的圖上隨機游走,產生大量的物品序列,然后進行w2v訓練,得到每個物品的Embedding。因此,DeepWalk可以被看作連接序列Embedding和Graph Embedding的過渡方法。大致過程如下圖:

先根據用戶的行為序列構造圖(圖a到圖b),在圖中隨機游走生成序列(圖b到圖c),采用word2vec中的SkipGram(負采樣)算法對序列進行訓練。最終生成物品Embedding向量。

注:每個邊具有權重,在所有的用戶歷史行為中,物品 i i i 轉移為物品 j j j 的概率,這也是隨機游走的跳轉概率。
這篇論文的額基本思想是Embedding過程中引入帶權重的補充信息(Side Information),從而解決冷啟動的問題。
對于一些冷門商品,這樣做并不能得到準確的表達向量。因此論文引入了item的side information(item的類別,商店,價格等),假設side information一共有 n 個,則嵌入過程如下圖 :

圖中的向量 H \mathbf H H有兩種嵌入方法:

(1)GES方法
H v = 1 n + 1 ∑ s = 0 n W v s \mathbf H_v = \frac{1}{n+1} \sum_{s=0}^{n} \mathbf W_v^s Hv?=n+11?s=0n?Wvs?
其中, S I 0 SI \; 0 SI0代表item本身, S I n SI\;n SIn是item v v v的side information, W v 0 \mathbf W_v^0 Wv0? 是item v v v 的嵌入向量, W v s \mathbf W_v^s Wvs?是item v v v的side information的嵌入結果。

(2)EGES

上述的 H v \mathbf H_v Hv?計算方法存在問題,假設不同種類的邊信息對最終嵌入的貢獻是相等的,這并不能反映現實。例如,一個購買了iPhone的用戶,往往會因為“Apple”這個品牌而去看Macbook或者iPad,而一個用戶為了方便和便宜,可能會在淘寶上同一家商店購買不同品牌的衣服。因此,不同種類的邊信息對用戶行為中項目的共現有不同的貢獻。所以,論文提出了一個加權平均層來聚合與項目相關的邊信息的嵌入。
H v = ∑ j = 0 n e a v j W v j ∑ j = 0 n e a v j \mathbf H_v = \frac{\sum_{j=0}^n e^{a_v^j}\mathbf W_v^j}{\sum_{j=0}^n e^{a_v^j}} Hv?=j=0n?eavj?j=0n?eavj?Wvj??
在訓練過程中,對于頂點 v v v和他的上下文 u u u,設 Z u ∈ R d \mathbf Z_u \in R^d Zu?Rd 是其嵌入結果,所以其目標函數如下:
L ( v , u , y ) = ? [ y log ? ( σ ( H v T Z u ) + ( 1 ? y ) log ? ( 1 ? σ ( H v T Z u ) ) ) ] L(v,u,y) = -[y\log(\sigma(\mathbf H_v^T \mathbf Z_u)+(1-y)\log(1-\sigma(\mathbf H_v^T \mathbf Z_u)))] L(v,u,y)=?[ylog(σ(HvT?Zu?)+(1?y)log(1?σ(HvT?Zu?)))]

參考

【圖嵌入】DeepWalk原理與代碼實戰

【Graph Embedding】DeepWalk:算法原理,實現和應用

Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba

總結

以上是生活随笔為你收集整理的【Graph Embedding】图嵌入的最佳实践—EGES(Enhanced Graph Embedding with Side Information)的全部內容,希望文章能夠幫你解決所遇到的問題。

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