本帳號爲第四範式智能推薦產品先薦的官方帳號。帳號立足於計算機領域,特別是人工智能相關的前沿研究,旨在把更多與人工智能相關的知識分享給公衆,從專業的角度促進公衆對人工智能的理解;同時也但願爲人工智能相關人員提供一個討論、交流、學習的開放平臺,從而早日讓每一個人都享受到人工智能創造的價值。
如下內容由第四範式先薦編譯、整理,僅用於學習交流,版權歸原做者全部。
推薦系統可以預測用戶將來的興趣偏好,並向用戶推薦排序最靠前的item。在現代社會中,推薦系統之因此被人們須要,關鍵是因爲互聯網的普及,人們面臨着太多的選擇。過去,人們習慣在實體店購物,實體店的商品有限,人們的選擇也有限。相比之下,現在互聯網容許人們在線訪問任何資源。儘管可用信息量增長,但人們很難選出他們真正想要的東西,問題來了——這就是推薦系統的用武之地。算法
本文將簡要介紹構建推薦系統的兩種典型方法,即協同過濾和奇異值分解。微信
傳統上,構建推薦系統有兩種方法:運維
第一種方法須要分析每一項的屬性。例如,對每位詩人的詩歌做品進行天然語言處理,而後向用戶推薦詩人。可是,協同過濾卻不須要有關項或用戶自己的任何信息,而是根據用戶的過去行爲進行推薦。如下咱們將重點講解協同過濾。工具
如上所述,協同過濾(CF)是基於用戶過去行爲的推薦平均值。協同過濾可分兩類:post
同過濾背後的關鍵思想是類似的用戶共享相同的興趣,而且喜歡類似的項目。性能
假設現有m個用戶和n個項目,咱們用m * n的矩陣來表示用戶過去的行爲。矩陣中的每一個單元格表示用戶持有的相關反饋,例如,M {i,j}表示用戶i對項目 j的喜歡程度,這種矩陣稱爲效用矩陣(utility matrix)。學習
基於用戶的協同過濾優化
基於用戶的協同過濾首先須要計算用戶之間的類似性。計算類似性有兩種辦法,皮爾遜相關係數或餘弦類似度。設u {i,k}表示用戶i和用戶k之間的類似度,v {i,j}表示用戶i對項目j的評級,若是用戶沒有評定該項目,則v_ {i,j} =?。人工智能
這兩種方法能夠表示以下:3d
1. 皮爾遜相關係數 (Pearson Correlation)
2. 餘弦類似度(Cosine Similarity)
這兩種方法很經常使用,但區別在於用皮爾遜相關係數計算的話,向全部元素添加常量不變。
如今,咱們可使用如下等式預測用戶對未評級項目的反饋意見:
在如下矩陣中,每行表明一個用戶,而列對應於不一樣的電影,每一個單元格表明用戶爲該電影提供的評級,最後一列爲該用戶和目標用戶之間的類似性。假設用戶E是目標用戶。
因爲用戶A和F不共享與用戶E共同的任何電影評級,所以他們與用戶E的類似性未在中皮爾遜相關係數中定義。所以只須要考慮用戶B、C和D。基於皮爾遜相關係數,計算以下:
從上表能夠看出,用戶D與用戶E差別很大,兩者之間的皮爾遜相關性爲負。用戶D對電影Me Before You的評價高於他的評分平均值,而用戶E的表現則相反。
基於用戶的協同過濾雖然很簡單,但它存在幾個問題。一個主要問題是用戶的偏好會隨着時間的推移而改變,這意味着基於其相鄰用戶預先計算矩陣這種方法可能致使推薦效果不許確。爲了解決這個問題,咱們能夠採用基於項目的協同過濾。
基於項目的協同過濾
基於項目的協同過濾並不計算用戶之間的類似性,而是基於用戶與目標用戶評定的項目之間的類似性來推薦項目。一樣,可使用皮爾遜相關係數或餘弦類似度計算類似度。主要區別在於,使用基於項目的協同過濾,咱們垂直填補空白,與基於用戶的協同過濾的水平方式相反。下表展現瞭如何爲電影Me Before You執行此操做。
這種方法成功地避免了動態的用戶偏好帶來的問題,由於基於項目的CF更加靜態。可是,這種方法仍然存在一些問題。第一個問題是可擴展性。數據計算量隨用戶和項目的增加而增加。最壞的狀況複雜度是O(mn),即m個用戶和n個項目。稀疏性是另外一個問題。在上表中,雖然只有一個用戶對Matrix和Titanic都進行了評級,但它們之間的類似性爲1。在極端狀況下,咱們可能擁有數百萬用戶,兩部大相徑庭的電影之間的類似性也可能很是高,由於惟一一個對這兩部電影評分的用戶給了它們類似的評分。
處理CF中可擴展性和稀疏性問題的方法之一是利用潛在因子模型來捕獲用戶和項之間的類似性。從本質上講,咱們但願將推薦問題轉化爲優化問題,把它看作系統預測用戶給定項目的評級的性能。
一個常見的指標是均方根偏差(RMSE,Root Mean Square Error)。 RMSE越低,性能越好。因爲咱們不知道不可見項目的評級,所以會暫時忽略它們。也就是說,咱們只在效用矩陣中的已知條目上最小化RMSE。爲了實現最小RMSE,採用奇異值分解(SVD)以下面的公式所示。
X表示效用矩陣,U是左奇異矩陣,表示用戶和潛在因子之間的關係。 S是描述每一個潛在因子強度的對角矩陣,而V轉置是右奇異矩陣,表示項和潛在因子之間的類似性。什麼是潛在因子呢?這是一個廣義的概念,用來描述用戶或項目具備的屬性。以音樂爲例,潛在因子能夠指音樂所屬的類型。 SVD經過提取其潛在因子來減少效用矩陣的維數。基本上,咱們將每一個用戶和每一個項目映射到維度爲r的潛在空間。潛在空間有助於咱們更好地理解用戶和項目之間的關係,以下所示:
SVD具備最小的重建平方偏差和(SSE,Sum of Square Error);所以,它也經常使用於降維。在下面的公式中,用A代替X,用Σ代替S。
這與開頭提到的RMSE有什麼關係呢?事實證實,RMSE和SSE呈單調相關。這意味着SSE越低,RMSE越低。既然SVD能夠最大限度地下降SSE,那麼就能夠最小化RMSE。
所以,SVD是解決此優化問題的絕佳工具。爲了預測用戶不可見的項目,咱們簡單地將U、Σ和T相乘。
Python Scipy爲稀疏矩陣提供了很好的SVD實現。
SVD成功解決了CF帶來的可擴展性和稀疏性問題,然而SVD並不是沒有缺陷。 SVD的主要缺點是向用戶推薦項目的緣由幾乎沒有解釋。若是用戶想知道爲何要向他們推薦特定項目,這多是一個很大的問題。這個問題將會在下一篇文章中提到。
本文討論了構建推薦系統的兩種典型方法,協同過濾和奇異值分解。 在下一篇文章中,將繼續討論一些用於構建推薦系統的更高級算法。
相關閱讀:
如欲瞭解更多,歡迎搜索並關注官方微博@先薦、微信公衆號(ID:dsfsxj)。