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