可以用圖定義一個社交網(wǎng)絡(luò)煌茴,其中是頂點集合,每個頂點代表一個用戶日川,是邊集合景馁。如果用戶和用戶有社交網(wǎng)絡(luò)關(guān)系,就有一條邊連接這兩個用戶逗鸣。用來定義邊的權(quán)重合住。為頂點u指向的頂點集合(也就是用戶u關(guān)注的用戶集合),為指向u的頂點集合撒璧。
此時就可以利用之前的協(xié)同算法透葛,如:
(1)通過u和v的共同關(guān)注好友計算相似度:
(2)同樣的,也可以利用被關(guān)注用戶數(shù)量計算相似度
node2vec
我們希望利用一個坐標(biāo)(向量)描述用戶在社交網(wǎng)絡(luò)中的位置卿樱,線上計算相似度時只需要計算坐標(biāo)的距離或者余弦相似度即可僚害。node2vec,或者是network embedding就是一種圖特征的表示學(xué)習(xí)方法繁调,從輸入的網(wǎng)絡(luò)圖中萨蚕,學(xué)習(xí)到節(jié)點的表達。
node2vec分為兩個步驟蹄胰,第一個步驟是隨機游走岳遥,通過一定規(guī)則隨機抽取一些點的序列。第二個步驟是將點的序列輸入至word2vec模型從而得到每個點的embedding向量裕寨。
- random walk
給定一張圖和一個起始節(jié)點浩蓉,標(biāo)記起始節(jié)點位置為當(dāng)前位置派继,隨機選擇當(dāng)前位置節(jié)點的一個鄰居并將當(dāng)前位置移動至被選擇的鄰居節(jié)點,重復(fù)以上步驟n次捻艳,最終得到從初始節(jié)點到結(jié)束節(jié)點的一條長度為n的點序列驾窟。
如何選擇下一個節(jié)點呢?為了能夠控制廣度優(yōu)先還是深度優(yōu)先认轨,我們定義兩個參數(shù)和绅络,計算
如果p大于max(q,1),則產(chǎn)生的序列與深度優(yōu)先搜索類似嘁字,鋼鋼鋼鋼被訪問過的節(jié)點不太可能被重復(fù)訪問昨稼;如果p小于min(q,1),則產(chǎn)生的序列與寬度優(yōu)先搜索類似拳锚,傾向于周邊節(jié)點。
? 2.word2vec
模型的輸入是某個用戶的one-hot編碼寻行,輸出是該用戶在節(jié)點串中前后的節(jié)點霍掺。最后得到的輸出是每個節(jié)點(即用戶)的word2vec向量。
有了數(shù)值化的向量拌蜘,對任意兩個用戶杆烁,就可以計算相似度。然后就可以利用協(xié)同的方法简卧。