推薦系統(tǒng)主要算法總結(jié)及Youtube深度學(xué)習(xí)推薦算法實(shí)例概括
協(xié)同過濾
協(xié)同過濾(CF)及其變式是最常用的推薦算法之一。即使是數(shù)據(jù)科學(xué)的初學(xué)者,也能憑之建立起自己的個(gè)性化電影推薦系統(tǒng),例如,一個(gè)簡歷項(xiàng)目。
當(dāng)我們想要向某個(gè)用戶推薦某物時(shí),最合乎情理的事情就是找到與他/她具有相同愛好的用戶,分析其行為,并且為之推薦相同的東西?;蛘呶覀兛梢躁P(guān)注那些與該用戶之前購買物品相似的東西,并推薦相似的產(chǎn)品。
協(xié)同過濾(CF)有兩種基本方法,它們分別是:基于用戶的協(xié)同過濾技術(shù)和基于項(xiàng)目的協(xié)同過濾技術(shù)。
該推薦算法的以上情形中均包含兩步:
1. 找到數(shù)據(jù)庫中有多少用戶/項(xiàng)目與目標(biāo)用戶/項(xiàng)目相似。
2. 在給定與某產(chǎn)品用戶/項(xiàng)目更相似的用戶/項(xiàng)目的總權(quán)重時(shí),評估其它用戶/項(xiàng)目,來預(yù)測你給用戶的相關(guān)產(chǎn)品的評分。
在該算法中,「最為相似」意味著什么?
我們擁有的是每一位用戶的偏好向量(矩陣 R 的列),以及每一個(gè)產(chǎn)品的用戶評分的向量(矩陣 R 的行)。
首先,只留下兩個(gè)向量中值都已知的元素。
舉個(gè)例子,如果我們想比較 Bill 和 Jane,我們知道的信息是 Bill 沒有看過泰坦尼克號,Jane 沒有看過蝙蝠俠,那么我們只能通過星戰(zhàn)來衡量他們的相似度。怎么可能會有人不看星戰(zhàn),對吧?(微笑)
***的測量相似度的方法,是測量用戶/項(xiàng)目向量的余弦相似度(cosine similarity)或相關(guān)度(correlations)。***一步是根據(jù)相似程度,采取加權(quán)算術(shù)平均方法,填滿表中的空單元格。
用于推薦的矩陣分解
另一個(gè)有趣的方法是使用矩陣分解。這是一種優(yōu)雅的推薦算法,因?yàn)橥ǔT诰仃嚪纸鈺r(shí),我們不會過多考慮結(jié)果矩陣的行列中哪些項(xiàng)(item)會被保留。但使用該推薦工具時(shí),我們可以清楚地看到 u 是關(guān)于第 i 個(gè)用戶的興趣的向量,而 v 是關(guān)于第 j 部電影的參數(shù)的向量。
于是我們能夠通過 u 和 v 的點(diǎn)積來估計(jì) x(第 i 個(gè)用戶對第 j 部電影的評分)。我們用已知的評分建立這些向量并以此預(yù)測未知的評分。
舉個(gè)例子,矩陣分解后我們獲得了 Ted 的向量(1.4;.9)和電影 A 的向量(1.4; .8),現(xiàn)在我們可以僅僅通過計(jì)算(1.4; .9)和(1.4; .8)的點(diǎn)積來還原電影 A-Ted 的評分,評分結(jié)果為 2.68。
聚類
以前的推薦算法比較簡單并且適用于小系統(tǒng)。而且直到現(xiàn)在,我們?nèi)园淹扑]問題設(shè)想成一個(gè)監(jiān)督式機(jī)器學(xué)習(xí)任務(wù)?,F(xiàn)在是時(shí)候用非監(jiān)督方法來解決此類問題了。
設(shè)想一下,我們是正在建造一個(gè)大型推薦系統(tǒng),在此系統(tǒng)中協(xié)同過濾和矩陣分解這兩項(xiàng)工作的時(shí)間應(yīng)該更長。而***種設(shè)想就是聚類(clustering)。
在業(yè)務(wù)的開始階段,往往是缺乏先前用戶的等級劃分的,而聚類則是***的方法。
但是如果單獨(dú)使用,聚類就顯得有一些薄弱了,因?yàn)槭聦?shí)上我們所做的事情其實(shí)是對用戶組別進(jìn)行鑒定,并且為本組里的每一位用戶推薦相同的東西。當(dāng)我們擁有了足夠的數(shù)據(jù)的時(shí)候,使用聚類方法作為***步是更好的選擇,這樣可以減少協(xié)同過濾算法中的相關(guān)近鄰(neighbor)的選擇。它也可以改善復(fù)雜推薦系統(tǒng)的性能表現(xiàn)。
每一個(gè)群集(cluster)都會被分配有代表性的偏好,這是以屬于該群集的用戶的偏好為基礎(chǔ)的。每一組群集的用戶都會收到在群集層面上計(jì)算過的推薦結(jié)果。
推薦系統(tǒng)的深度學(xué)習(xí)方法
在過去十年,神經(jīng)網(wǎng)絡(luò)的發(fā)展已經(jīng)有了巨大的飛躍?,F(xiàn)在它們正被應(yīng)用于各種各樣的應(yīng)用,并且正在逐漸代替?zhèn)鹘y(tǒng)的機(jī)器學(xué)習(xí)方法。下面我將展示深度學(xué)習(xí)方法是如何在 Youtube 中被使用的。
毋庸置疑,由于其規(guī)模大,語料庫不斷變化,以及種種不可觀測的外部因素,為這樣的服務(wù)項(xiàng)目制作推薦系統(tǒng)是一項(xiàng)***挑戰(zhàn)性的任務(wù)。
根據(jù)「YouTube 推薦系統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)」的相關(guān)研究,YouTube 推薦系統(tǒng)算法包含兩部分神經(jīng)網(wǎng)絡(luò):一個(gè)是用于候選集生成(candidate generation),另一個(gè)則是用于排序。如果你沒有足夠的時(shí)間,我將在這里給你進(jìn)行一個(gè)簡要的概括。
使用用戶的歷史作為輸入,候選集生成網(wǎng)絡(luò)(candidate generation network)顯著地減少了視頻的數(shù)量,并且可以從一個(gè)大型語料庫中選取一組最相關(guān)的視頻集。生成的候選集對用戶來說是最為相關(guān)的,此神經(jīng)網(wǎng)絡(luò)的目的僅僅是為了通過協(xié)同過濾來提供一個(gè)寬泛的個(gè)性化服務(wù)。
在這一步中,我們擁有了更少量的候選結(jié)果,這些結(jié)果與用戶需求更加接近。我們現(xiàn)在的目的是仔細(xì)地分析所有候選結(jié)果,這樣我們就可以做出***的決策。此任務(wù)是由排序網(wǎng)絡(luò)(ranking network)來完成的,它可以根據(jù)一個(gè)期望的目標(biāo)函數(shù)為每一個(gè)視頻都分配一個(gè)分?jǐn)?shù),這個(gè)目標(biāo)函數(shù)是使用數(shù)據(jù)來對有關(guān)用戶行為的視頻和信息來進(jìn)行描述的。
使用兩階段法(two-stage approach),我們就能夠從很大的視頻語料庫中做出視頻推薦,然而可以確信的是,這些推薦結(jié)果中只有少量是個(gè)性化的,而且是被用戶真正進(jìn)行應(yīng)用的。這一設(shè)計(jì)也能使我們把其它資源生成的結(jié)果和這些候選結(jié)果混合在一起。
推薦任務(wù)就像是一個(gè)極端的多類別分類問題,預(yù)測問題變成了一個(gè)在給定的時(shí)間 t 下,基于用戶(U)和語境(C),對語料庫(V)中數(shù)百萬的視頻類別(i)中的一個(gè)特定視頻(wt)進(jìn)行精準(zhǔn)分類的問題。
在創(chuàng)建你自己的推薦系統(tǒng)前要注意的要點(diǎn):
- 如果你擁有一個(gè)很大的數(shù)據(jù)庫,并且你要用它進(jìn)行在線推薦,***的方式就是把這個(gè)問題分成兩個(gè)子問題:1)選擇前 N 個(gè)候選結(jié)果,2)對它們進(jìn)行排序。
 - 你怎樣衡量你的模型的質(zhì)量?除了標(biāo)準(zhǔn)化的質(zhì)量指標(biāo),還有一些用于推薦問題中特定的指標(biāo):Recall@k,Precision@k也可看一下推薦系統(tǒng)的***描述指標(biāo)。
 - 如果你正在使用分類算法解決推薦問題,你應(yīng)該考慮生成負(fù)樣本(negative samples)。如果一個(gè)用戶買了一件推薦的商品,你不應(yīng)該把它當(dāng)做正樣本(positive sample)來進(jìn)行添加,也不應(yīng)該把其余作為負(fù)樣本來處理。
 - 考慮一下你的算法質(zhì)量的在線與離線評分。一個(gè)僅基于歷史數(shù)據(jù)的訓(xùn)練模型可以產(chǎn)生簡單的推薦結(jié)果,因?yàn)樵撍惴ú⒉粫牢磥淼男纶厔菖c偏好。
 





















 
 
 











 
 
 
 