hin2vec的思想其實挺簡單的
它學習兩種embedding,一種是對於節點的嵌入,一種是對於元路徑(meta path)的嵌入
(ps 作者在文中說如果要強調路徑的有向性,強調路徑開始節點和終止節點的不同,那麼可以擴展到三種embedding,對於路徑起始節點的嵌入,對於路徑終止節點的嵌入,對於元路徑的嵌入)
訓練流程如上。這是一個二分類網絡,輸出對於一定的x,y存在關係r的概率
x,y,r 分別代表路徑起始節點、路徑終止節點、元路徑的one-hot向量,𝑊_x′x 就是x對應節點的嵌入向量
這個模型的輸出是 o= 𝑠𝑖𝑔𝑚𝑜𝑖𝑑( ∑ 𝑊_𝑥′𝑥⊙𝑊_𝑦′𝑦⊙𝑓01(𝑊_𝑟′𝑟) )
從外到內
sigmoid是sigmoid函數
∑是求和
⊙是hadmard函數,也就是對向量的逐項相乘
f01是01標準化函數
損失函數就是一般的交叉熵損失
其實會讓人聯想到注意力機制(我不懂注意力),訓練過程中的r相當於一個query
另外用起來的話覺得比較不順手的一點就是對於不同的metapath在訓練時沒有權重分配。也就是說對於不同的特定任務hin2vec訓練得到的嵌入其實是有提升空間的