從好友推薦演算法說起

發表於2016-08-10

社交網路中,好友推薦隨處可見,這裡探討好友推薦是如何做的。

1、三元閉包理論

說到好友推薦,就不得不談三元閉包理論。

三元閉包定義:在一個社交圈內,若兩個人有一個共同好友,則這兩個人在未來成為好友的可能性就會提高。

舉例說明,若B、C有一個共同好友A,且B、C不認識,則B、C成為好友的機率會增加

這個理論直觀自然,可以從機會、信任、動機上來解釋:

  • 1、B、C是A的朋友,那麼B、C見面的機會會增加,如果A花時間和B、C相處,那麼B、C可能會因此有機會認識
  • 2、在友誼形成過程中,基於B、C都是A好友的事實,假定B、C都知道這點,這會為他們提供陌生人之間所缺乏的基本信任
  • 3、A有將B、C撮合為好友的動機:如果B、C不是朋友,可能會為A和B、C的友誼造成潛在的壓力兩個人共同好友的多少決定這兩個人關係的強弱,基於共同好友的多少,就可以進行好友推薦。

1)共同好友數

1

 其中,Neighbor(i)表示i的好友,也就是網路拓撲上的鄰居節點

通過對共同好友數排序,即可產生一個好友推薦列表。

2)對雙方好友數加權

為消除雙方好友數差距,可以除以雙方好友數進行加權,也就是傑卡德係數,計算公式如下:
2

3)對共同好友加權

在1)2)中,相當於對每個共同好友一視同仁,都貢獻1分,但是共同好友中,有些人好友多,有些好友少,當某個共同好友的好友數較少時,這個共同好友應該更加重要,所以可以通過除以每個共同好友的好友數進行加權。

3

上式中,通過除以每個共同好友的好友數進行加權,如果好友數相差過大,需要通過開方、對數等方式進行處理,如下:

4

5

下面是y=x,y= x^0.5,y=log2x 的曲線:

6

可以看出,使用開方、對數都可以有效消除差值過大的影響。

2、Facebook

Facebook的資料表明:好友關係建立中,擁有10個共同好友是隻有1個共同好友的12倍。

7

Facebook在共同好友的基礎上,加入了時間維度;

基於一個假設:使用者對新新增的好友更感興趣。如圖:f1和f2是使用者u的好友,相對於很久之前新增的好友f2,f1是近期新增,使用者對f1近期新增的好友更感興趣。
8

基於這樣的假設,Facebook出了一個經驗公式,如下:

9

從這個公式可以看到,對比對共同好友加權的公式,增加了時間特徵:

10

時間相差越大,權重越小。其中,δ u,fi 為u與fi建立好友關係的時間, δ fi,fof 為fi與fof建立好友關係的時間,-0.3為懲罰因子,是Facebook的一個經驗引數,需要根據具體情況進行調整。

下面是x^a的圖,可以直觀感受下衰減的程度:

11

根據這個經驗公式能直接計算出好友推薦的得分,也可以作為一維特徵與其他特徵一起做迴歸。

3、其他

一般情況下,使用二度好友(好友的好友)作為推薦的候選集。

假設平均每人有150個好友,差不多有22500個二度好友,資料量基本滿足推薦候選集的需求,並且資料表明,絕大部分(92%左右)的好友關係都建立在二度空間。

基於三元閉包理論進行好友推薦,推薦的使用者至少有一個共同好友,也變相的確定使用二度好友進行推薦。

暫時先這樣,有時間繼續寫關於推薦系統相關的內容。

相關文章