獲取社交網(wǎng)絡(luò)數(shù)據(jù)的途徑:
電子郵件啸驯;用戶注冊信息客扎;用戶的位置信息;論壇和討論組罚斗;即時通訊工具徙鱼;社交網(wǎng)絡(luò)
社交瓦那個羅分為3種不同的社交網(wǎng)絡(luò)類型:雙向確認(rèn)的社交網(wǎng)絡(luò)(人人),單向關(guān)注的社交網(wǎng)絡(luò)(微博)针姿,基于社區(qū)的社交網(wǎng)絡(luò)(豆瓣)
社交網(wǎng)絡(luò)用戶的入度近似長尾分部袱吆,這說明在一個社交網(wǎng)絡(luò)中影響力大的用戶總是占少數(shù)
社會化推薦之所以受到很多網(wǎng)站的重視,因為:
①好友推薦可以增加推薦的信任度搓幌;
②社交網(wǎng)絡(luò)可以解決冷啟動問題
考慮用戶的熟悉程度以及興趣相似度杆故,用戶u對物品i的興趣pui可以通過如下公式計算:
wuv由兩個部分相似度構(gòu)成,一部分是用戶u對用戶v的熟悉程度溉愁;另一部分是用戶u和用戶v的興趣相似程度处铛。熟悉程度可以定義如下(out(u)是用戶u的好友集合):
興趣相似度定義如下:
其中N(u)是用戶u喜歡的物品集合
基于圖的社會化推薦算法
該圖上有用戶頂點(圓圈)和物品頂點(方塊)兩種頂點
在定義完圖的頂點和邊后饲趋,需要定義邊的權(quán)重。其中用戶之間邊的權(quán)重可以定義為用戶之間相似度的α倍(包含熟悉程度和興趣相似度)撤蟆。而用戶和物品之間的權(quán)重可以定義為用戶對物品喜歡程度的β倍奕塑。α和β需要根據(jù)應(yīng)用的需求確定。
在社交網(wǎng)絡(luò)中家肯,還有一種關(guān)系龄砰,即兩個用戶屬于同一個社群。如下圖讨衣,可以加入一種節(jié)點表示社群换棚,然后使用圖推薦算法(比如PersonalRank)給用戶推薦物品:
實際系統(tǒng)中的社會化推薦算法
在物品數(shù)不是很多的網(wǎng)站,可以很容易地講物品相關(guān)表緩存在內(nèi)存中反镇,因此查詢相關(guān)物品的代價很低固蚤,所以ItemCF算法很容易在實際環(huán)境下實現(xiàn)
另外有兩種方法改進基于鄰域的社會化推薦算法。第一種方法治標(biāo)不治本歹茶,簡單說就是可以做兩處截斷夕玩。第一處截斷就是在拿用戶好友集合時并不拿出用戶所有的好友,而是只拿出和用戶相似度最高的N個好友惊豺。此外燎孟,在查詢每個用戶的歷史行為時,可以只返回最近一個月的行為尸昧。
第二種方法需要重新設(shè)計數(shù)據(jù)庫揩页。推特的解決方案是給每個用戶維護一個消息隊列(message queue),當(dāng)一個用戶發(fā)表一條微博時彻磁,所有關(guān)注他的用戶的消息隊列都會加入這條微博碍沐。所以我們可以按照如下方法設(shè)計系統(tǒng):
①首先,為每個用戶維護一個消息隊列衷蜓,用于存儲他的推薦列表累提;
②當(dāng)一個用戶喜歡一個物品時,就將(物品ID磁浇,用戶ID和時間)這條記錄寫入關(guān)注該用戶的推薦列表消息隊列中斋陪;
③當(dāng)用戶訪問推薦系統(tǒng)時,讀出他的推薦列表消息隊列置吓,對于這個消息隊列中的每個物品无虚,重新計算該物品的權(quán)重。計算權(quán)重時需要考慮物品在隊列中出現(xiàn)的次數(shù)衍锚,物品對應(yīng)的用戶和當(dāng)前用戶的熟悉程度友题、物品的時間戳。
社會化推薦和協(xié)同過濾推薦系統(tǒng)
社會化推薦系統(tǒng)往往很難通過離線試驗評測戴质,因為社會化推薦的優(yōu)勢不在于增加預(yù)測準(zhǔn)確度度宦,而是在于通過用戶的好友增加用戶對推薦結(jié)果的信任度踢匣,從而讓用戶點擊那些冷門的推薦結(jié)果。
目前最流行的信息流推薦算法是Facebook的EdgeRank戈抄,該算法綜合考慮了信息流中每個會話的時間离唬、長度與用戶興趣的相似度。FB將其他用戶對當(dāng)前用戶信息流的會話產(chǎn)生過行為的行為成為Edge划鸽,而每一個會話權(quán)重定義為:
ue指產(chǎn)生行為的用戶和當(dāng)前用戶的相似度输莺,這里的相似度主要是在社交網(wǎng)絡(luò)圖中的熟悉度;
we指行為的權(quán)重裸诽,這里的行為包括創(chuàng)建嫂用、評論、like(喜歡)丈冬、打標(biāo)簽等尸折,不同的行為有不同的權(quán)重;
de指時間衰減參數(shù)殷蛇,越早的行為對權(quán)重的影響越低
不過ER算法的個性化因素僅僅是好友的熟悉度,并沒有考慮帖子內(nèi)容和用戶興趣的相似度橄浓。
為此粒梦,GroupLens的研究人員JC深入研究了信息流推薦中社會興趣的個性化興趣之間的關(guān)系,他的排名考慮了如下因素:
①會話的長度荸实;
②話題的相關(guān)性匀们;
③用戶熟悉程度
試驗結(jié)果說明,綜合考慮用戶的社會興趣和個人興趣對于提高用戶滿意度是有幫助的
基于好友的推薦算法可以用來給用戶推薦提名在現(xiàn)實中互相熟悉准给,而在當(dāng)前社交網(wǎng)絡(luò)中沒有聯(lián)絡(luò)的其他用戶泄朴。
對于用戶u和v,我們可以用共同好友比例計算他們的相似度:
def FriendSuggestion(User, G, GT):
suggestions = dict()
friends = G[user]
for fid in G[user]:
for ffid in GT[fid]:
if ffid in friends:
continue
if ffid not in suggestions:
suggestions[ffid] = 0
suggestions[ffid] += 1
suggestions = {x:y / math.sqrt(len(G[user])*len(G[x])for x,y in suggestions)}
但在微博這種有向社交網(wǎng)絡(luò)中露氮,這兩個集合就不同了祖灰,因此也可以通過in(u)定義另一種相似度:
同時,我們也可以定義第三種有向的相似度:
但是畔规,這個相似度有一個缺點局扶,就是該相似度的定義下所有人都和名人有很大的相似度,因此可以用如下相似度:
這些相似度的計算無論時間復(fù)雜度還是空間復(fù)雜度都不是很高非常適合在線應(yīng)用使用
社交網(wǎng)絡(luò)研究有兩個著名的問題叁扫,第一個是如何度量人的重要性三妈,也就是社交網(wǎng)絡(luò)頂點的中心度(centrality),第二個問題是如何度量社交網(wǎng)絡(luò)中人和人之間的關(guān)系莫绣,也就是鏈接預(yù)測畴蒲。