詳解個性化推薦五大最常用演算法
推薦系統,是當今網際網路背後的無名英雄。
我們在某寶首頁看見的商品,某條上讀到的新聞,甚至在各種地方看見的廣告,都有賴於它。
昨天,一個名為Stats&Bots的部落格詳解了構建推薦系統的五種方法。
量子位編譯如下:
現在,許多公司都在用大資料來向用戶進行相關推薦,驅動收入增長。推薦演算法有很多種,資料科學家需要根據業務的限制和要求選擇最好的演算法。
為了簡化這個任務,Statsbot團隊寫了一份現有的主要推薦系統演算法的概述。
協同過濾
協同過濾(Collaborative filtering, CF)及其變體是最常用的推薦演算法之一。即使資料科學的新手也可以用它來構建自己的個人電影推薦系統,起碼可以寫在簡歷上。
我們想給使用者推薦東西,最合乎邏輯方法是找到具有相似興趣的人,分析他們的行為,並向用戶推薦相同的專案。另一種方法是看看用於以前買的商品,然後給他們推薦相似的。
CF有兩種基本方法:基於使用者的協同過濾和基於專案的協同過濾。
無論哪種方法,推薦引擎有兩個步驟:
-
瞭解資料庫中有多少使用者/專案與給定的使用者/專案相似。
-
考慮到與它類似的使用者/專案的總權重,評估其他使用者/專案,來預測你會給該產品使用者的打分。
“最相似”在演算法中是什麼意思?
我們有每個使用者的偏好向量(矩陣R的行),和每個產品的使用者評分向量(矩陣R的列),如下圖所示。
首先,我們只留下兩個向量的值都已知的元素。
例如我們想比較Bill和Jane,已知比爾沒有看泰坦尼克號,Jane沒看過蝙蝠俠,於是,我們只能通過星戰來衡量他們的相似度了。誰沒看過星球大戰呢是吧?
測量相似度的最流行方法是餘弦相似性或使用者/專案向量之間的相關性。最後一步,是根據相似度用加權算術平均值填充表中的空單元格。
矩陣分解
這是一個非常優雅的推薦演算法,因為當涉及到矩陣分解時,我們通常不會太多地去思考哪些專案將停留在所得到矩陣的列和行中。但是使用這個推薦引擎,我們清楚地看到,u是第i個使用者的興趣向量,v是第j個電影的引數向量。
所以我們可以用u和v的點積來估算x(第i個使用者對第j個電影的評分)。我們用已知的分數構建這些向量,並使用它們來預測未知的得分。
例如,在矩陣分解之後,Ted的向量是(1.4; .8),電影A的向量是(1.4; .9),現在,我們可以通過計算(1.4; .8)和(1.4; .9)的點積,來還原電影A-Ted的得分。結果,我們得到2.68分。
聚類
上面兩種演算法都極其簡單,適用於小型系統。在這兩種方法中,我們把推薦問題當做一個有監督機器學習任務來解決。
現在,該開始用無監督學習來解決問題了。
假設我們正在建立一個大型推薦系統,這時協同過濾和矩陣分解花費的時間更長了。第一個浮現在腦海裡的解決之道,就是聚類。
業務開展之初,缺乏之前的使用者資料,聚類將是最好的方法。
不過,聚類是一種比較弱的個性化推薦,因為這種方法的本質是識別使用者組,並對這個組內的使用者推薦相同的內容。
當我們有足夠資料時,最好使用聚類作為第一步,來縮減協同過濾演算法中相關鄰居的選擇範圍。這個方法還能挺高複雜推薦系統的效能。
每個聚類都會根據其中使用者的偏好,來分配一組典型的偏好。每個聚類中的使用者,都會收到為這個聚類計算出的推薦內容。
深度學習
在過去的十年中,神經網路已經取得了巨大的飛躍。如今,神經網路已經得以廣泛應用,並逐漸取代傳統的機器學習方法。
接下來,我要介紹一下YouTube如何使用深度學習方法來做個性化推薦。
毫無疑問,由於體量龐大、動態庫和各種觀察不到的外部因素,為YouTube使用者提供推薦內容是一項非常具有挑戰性的任務。
根據《Deep Neural Networks for YouTube Recommendations》( https://static.googleusercontent.com/media/research.google.com/ru//pubs/archive/45530.pdf ),YouTube的推薦系統演算法由兩個神經網路組成:一個用於候選生成,一個用於排序。如果你沒時間仔細研究論文,可以看看我們下面給出的簡短總結。
以使用者的瀏覽歷史為輸入,候選生成網路可以顯著減小可推薦的視訊數量,從龐大的庫中選出一組最相關的視訊。這樣生成的候選視訊與使用者的相關性最高,然後我們會對使用者評分進行預測。
這個網路的目標,只是通過協同過濾提供更廣泛的個性化。
進行到這一步,我們得到一組規模更小但相關性更高的內容。我們的目標是仔細分析這些候選內容,以便做出最佳的選擇。
這個任務由排序網路完成。
所謂排序就是根據視訊描述資料和使用者行為資訊,使用設計好的目標函式為每個視訊打分,得分最高的視訊會呈獻給使用者。
通過這兩步,我們可以從非常龐大的視訊庫中選擇視訊,並面向使用者進行有針對性的推薦。這個方法還能讓我們把其他來源的內容也容納進來。
推薦任務是一個極端的多類分類問題。這個預測問題的實質,是基於使用者(U)和語境(C),在給定的時間t精確地從庫(V)中上百萬的視訊類(i)中,對特定的視訊觀看(Wt)情況進行分類。
建立推薦系統前該知道的要點
如果你有一個龐大的資料庫,而且準備提供線上的推薦,最好把這個任務拆分成兩個子問題:
-
選擇Top N個候選;
-
排序。
如衡量推薦模型的質量?
除了標準質量指標之外,還有一些針對推薦問題的指標:比如說召回率與準確率(https://en.wikipedia.org/wiki/Information_retrieval#Precision_at_K)。還有一些其他的指標,見《軟體工程中的推薦系統》一書第12章(http://www.ict.swin.edu.au/personal/jgrundy/papers/rsse2014.pdf)。
如果你正在使用分類演算法解決推薦問題,應該考慮生成負例樣本。如果使用者購買了推薦的商品,你應該將其新增為正例樣本,而其他列為負例樣本。
要從線上得分和離線得分兩個方面考察演算法質量。一個只基於歷史資料的訓練模型,可能會導致低水平的推薦,因為演算法沒辦法與時俱進。
推薦閱讀
個性化推薦在產品裡都能用在哪呢?
量子位曾報道過知乎、Quora、Airbnb是如何使用機器學習技術的,推薦系統是其中的重頭戲:
【完】