1 推薦系統(tǒng)基礎(chǔ)##
1.1 個性化推薦概述###
1.1.1 推薦系統(tǒng)概述
首先,需要申明一點的就是推薦系統(tǒng)!=推薦算法。推薦系統(tǒng)是一套完善的推薦機制,包括前期數(shù)據(jù)的準備、具體推薦的過程(這個過程可能是一套復(fù)雜的算法模型,也可能是一個簡單的規(guī)則,也可能是多種模型的混合結(jié)果等等)、后期數(shù)據(jù)的預(yù)測、AB測試效果評估等等。
1.1.2 推薦算法模型概述
在算法模型上大體可以分:基于內(nèi)容的推薦、基于協(xié)同過濾的推薦。
基于內(nèi)容推薦,即通過內(nèi)容本身的屬性,然后計算內(nèi)容的相似性,找到與某物品屬性相似的物品。協(xié)同過濾,所謂協(xié)同過濾,即不依賴于物品本身的物品屬性,而是通過其他相關(guān)特征,例如人參與的行為數(shù)據(jù),來達到推薦物品的目的。
關(guān)于協(xié)同過濾,又分為以下幾個類別:基于物品的協(xié)同,即ItemCF;基于用于的協(xié)同,即UserCF;基于模型的協(xié)同,即ModelCF。
其中,基于模型的協(xié)同又可以分為以下幾種類型:基于距離的協(xié)同過濾;基于矩陣分解的協(xié)同過濾,即Latent Factor Model(SVD);基于圖模型協(xié)同,即Graph,也叫社會網(wǎng)絡(luò)圖模型。
1.2 基于內(nèi)容的推薦###
其實但從字面上也好理解,其推薦的依據(jù)為物品的內(nèi)容,即物品的具體相關(guān)屬性。換言之,即我們希望找到的是跟當前物品相似的物品。
那么,我們的目標就明確了,計算當前物品與其他物品的相似度,然后生成一個相似TopN列表,然后想要多少個推薦多少個。
通常我們會有以下兩種方式來計算相似度:通過物品間的距離去度量相似;通過直接計算相似度。
1.2.1 計算物品距離的幾種方法
(1) 歐幾里得距離(Euclidean Distance)
最常見的距離度量方式,衡量多維空間中兩點之間的絕對距離,要求維度的統(tǒng)一。
(2) 明可夫斯基距離(Minkowski Distance)
明氏距離是歐氏距離的擴展,是對多個距離度量公式的概括性的表述(可以看到,當p=2時,其實就是歐式距離)。
(3) 曼哈頓距離(Manhattan Distance)
曼哈頓距離來源于城市區(qū)塊距離,是將多個維度上的距離進行求和后的結(jié)果,即當上面的明氏距離中p=1時得到的距離度量。
還有其他的一些距離度量,但是都不太常用,最常用的依然是歐式距離度量。
1.2.2 計算相似度量的幾種方法
(1) 向量空間余弦相似度(Cosine Similarity)
余弦相似度用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小。相比距離度量,余弦相似度更加注重兩個向量在方向上的差異,而非距離或長度上。
(2) 皮爾森相關(guān)系數(shù)(Pearson Correlation Coefficient)
即相關(guān)分析中的相關(guān)系數(shù)r,分別對X和Y基于自身總體標準化后計算空間向量的余弦夾角。
基于內(nèi)容的推薦,還有一點需要注意的就是,對于物品自身屬性,如果屬性值過少,我們需要適當進行擴大維度,如果維度過多,則需要進行降維。
關(guān)于降維和升維,都是一個很大的研究方向,大體上可以說一下幾種常見的方式。例如降維,我們可以進行維度聚類、主題抽取,進一步把相關(guān)維度進行合并,進一步減少維度;而對于升維,我們可以把維度進行矩陣化,例如假設(shè)物品X有A和B兩個維度屬性,那么我們通過生成AB矩陣的方式,把維度擴充到AB個維度。
1.3 基于協(xié)同過濾的推薦###
1.3.1 基于用戶的協(xié)同(UserCF)
基于用戶的協(xié)同過濾,即我們希望通過用戶之間的關(guān)系來達到推薦物品的目的,于是,給某用戶推薦物品,即轉(zhuǎn)換為尋找為這個用戶尋找他的相似用戶,然后相似用戶喜歡的物品,那么也可能是這個用戶喜歡的物品(當然會去重)。
來看一個表格:
用戶/物品 物品A? 物品B? 物品C? 物品D
用戶A? ? ? ? Y? ? ? ? ? ?? ? ? ? Y? ? ? ? ? ?
用戶 B? ? ? -? ? ? ? ? Y? ? ? ? ? –
用戶C? ? ? ? Y? ? ? ? ? -? ? ? ? ? Y? ? ? ? ? Y
其中Y表示對應(yīng)用戶喜歡對應(yīng)物品,-表示無交集,?表示需不需要推薦。
這是一個最簡單的例子,其實目的很簡單,我們需要給用戶A推薦物品,而且可以看到,用戶已經(jīng)喜歡了物品A和物品C,其實剩下也就B和D了,要么是B,要么是D。
那么根據(jù)UserCF算法,我們先計算用戶A與用戶BC之間的相似度,計算相似,我們前文說了,要么距離,要么余弦夾角。
假如我們選擇計算夾角(四維):cosAB=0(90度的夾角),cosAC=0.8199(角度自己算吧)。所以相比來說,我們會發(fā)現(xiàn)用戶A與用戶C的相似度是稍微大一些的。于是,我們觀察用戶C都喜歡了哪些物品,然后與用戶的去重,然后會發(fā)現(xiàn)該給用戶A推薦物品D。
簡單來講,UserCF就是如上過程,但在實際的過程中,數(shù)據(jù)量肯定不止這么點,于是我們需要做的是為用戶計算出相似用戶列表,然后在相似用戶中經(jīng)過去重之后,計算一個推薦的物品列表(在計算推薦物品的時候,可以疊加用戶的相似程度進一步疊加物品的權(quán)重)。
然后在喜歡物品的表達形式上,可以是如上的這種二值分類,即Yes Or No,也可以是帶有評分的程度描述,比如對于某個物品打多少分的這種表現(xiàn)形式。這樣的話,針對于后一種情況,我們就需要在求在計算相似度時,加入程度的權(quán)重考量。
1.3.2 基于物品的協(xié)同(ItemCF)
不同于基于用戶的協(xié)同,這里,我們計算的是物品之間的相似度,但是,請注意,我們計算物品相似度的時候,與直接基于物品相似度推薦不同是,我們所用的特征并不是物品的自身屬性,而依然是用戶行為。
用戶/物品物品A物品B物品C
用戶AY-Y
用戶BYYY
用戶CY??
其中Y表示對應(yīng)用戶喜歡對應(yīng)物品,-表示無交集,?表示需不需要推薦。
同樣,這是一個簡單實例。目的也明確,我們在知道用戶AB喜歡某些物品情況,以及在用戶C已經(jīng)喜歡物品C的前提下,為用戶C推薦一個物品。
看表格很簡單嘛。只有兩個選項,要么物品B,要么物品C。那么到底是物品B還是物品C呢?
我們來計算物品A與其他兩種物品的相似度,計算向量夾角。對于用戶A,物品A與物品B,則對于AB向量為(1,0),(1,1),對于AC向量為(1,1),(1,1),分別計算夾角cosAB=0.7,cosAC=1。或者用類似關(guān)聯(lián)規(guī)則的方法,計算兩者之間的共現(xiàn),例如AB共現(xiàn)1次,AC共現(xiàn)2次。通過類似這種方式,我們就知道物品A與物品C在某種程度上是更相似的。
我要說的就是類似共現(xiàn)類做計算的這種方式,在大規(guī)模數(shù)據(jù)的情況下是很有效的一種方式,基于統(tǒng)計的方法在數(shù)據(jù)量足夠的時候,更能體現(xiàn)問題的本質(zhì)。
1.3.3 基于模型的協(xié)同(ModelCF)
除了我們熟悉的基于用戶以及基于物品的協(xié)同,還有一類,基于模型的協(xié)同過濾。基于模型的協(xié)同過濾推薦,基于樣本的用戶偏好信息,訓(xùn)練一個模型,然后根據(jù)實時的用戶喜好信息進行預(yù)測推薦。
常見的基于模型推薦又有三種:最近鄰模型,典型如K最近鄰;SVD模型,即矩陣分解;圖模型,又稱為社會網(wǎng)絡(luò)圖模型。
(1) 最近鄰模型
最近鄰模型,即使用用戶的偏好信息,我們計算當前被推薦用戶與其他用戶的距離,然后根據(jù)近鄰進行當前用戶對于物品的評分預(yù)測。
典型如K最近鄰模型,假如我們使用皮爾森相關(guān)系數(shù),計算當前用戶與其他所有用戶的相似度sim,然后在K個近鄰中,通過這些相似用戶,預(yù)測當前用戶對于每一個物品的評分,然后重新排序,最終推出M個評分最高的物品推薦出去。
需要注意的是,基于近鄰的協(xié)同推薦,較依賴當前被推薦用戶的歷史數(shù)據(jù),這樣計算出來的相關(guān)度才更準確。
(2) SVD矩陣分解
我們把用戶和物品的對應(yīng)關(guān)系可以看做是一個矩陣X,然后矩陣X可以分解為X=A*B。而滿足這種分解,并且每個用戶對應(yīng)于物品都有評分,必定存在與某組隱含的因子,使得用戶對于物品的評分逼近真實值,而我們的目標就是通過分解矩陣得到這些隱性因子,并且通過這些因子來預(yù)測還未評分的物品。
有兩種方式來學(xué)習(xí)隱性因子,一為交叉最小二乘法,即ALS;而為隨機梯度下降法。
首先對于ALS來說,首先隨機化矩陣A,然后通過目標函數(shù)求得B,然后對B進行歸一化處理,反過來求A,不斷迭代,直到A*B滿足一定的收斂條件即停止。
對于隨機梯度下降法來說,首先我們的目標函數(shù)是凹函數(shù)或者是凸函數(shù),我們通過調(diào)整因子矩陣使得我們的目標沿著凹函數(shù)的最小值,或者凸函數(shù)的最大值移動,最終到達移動閾值或者兩個函數(shù)變化絕對值小于閾值時,停止因子矩陣的變化,得到的函數(shù)即為隱性因子。
使用分解矩陣的方式進行協(xié)同推薦,可解釋性較差,但是使用RMSE(均方根誤差)作為評判標準,較容易評判。
并且,我們使用這種方法時,需要盡可能的讓用戶覆蓋物品,即用戶對于物品的歷史評分記錄需要足夠的多,模型才更準確。
(3) 社會網(wǎng)絡(luò)圖模型
所謂社會網(wǎng)絡(luò)圖模型,即我們認為每個人之間都是有聯(lián)系的,任何兩個用戶都可以通過某種或者多個物品的購買行為而聯(lián)系起來,即如果一端的節(jié)點是被推薦用戶,而另一端是其他用戶,他們之間通過若干個物品,最終能聯(lián)系到一起。
而我們基于社會網(wǎng)絡(luò)圖模型,即研究用戶對于物品的評分行為,獲取用戶與用戶之間的圖關(guān)系,最終依據(jù)圖關(guān)系的距離,為用戶推薦相關(guān)的物品。
目前這種協(xié)同推薦使用的較少。
1.4 其他相關(guān)知識###
1.4.1 冷啟動
所謂冷啟動,即在推薦系統(tǒng)初期時,沒有任何用戶與物品的交集信息,即無用戶的行為軌跡,無法通過類似協(xié)同的方式進行過濾推薦,這種時候,我們就稱推薦系統(tǒng)處于冷啟動狀態(tài)。
這種情況,我們需要盡快的累積起第一批用戶行為軌跡。我們可以通過基于內(nèi)容的推薦,或者做一些其他類似的操作,快速有效的進行物品推薦。
一段時間后,累積到一定的用戶行為時,整個系統(tǒng)就能夠正常使用協(xié)同過濾等方式進行推薦了。
但是,針對于新加入的用戶,或者新加入的物品,同樣也是出于冷啟動狀態(tài)的,這個時候,我們通過需要對這種物品或者用戶做特殊的處理。
1.4.2 長尾效應(yīng)/馬太效應(yīng)
所謂長尾效應(yīng),在推薦系統(tǒng)中的體現(xiàn)即,部分優(yōu)質(zhì)物品,購買的人數(shù)較多,即與其相關(guān)的的用戶行為軌跡會較多。
這樣,在協(xié)同過濾推薦中,由于我們主要的依據(jù)就是我們的歷史行為行為數(shù)據(jù),所以這種物品得到推薦的機會就越多。
這樣,不斷循環(huán)迭代,得到推薦的物品都集中在少數(shù)的一些物品中,而大部分物品是沒有被推薦的機會的。
這就造成了造成長尾現(xiàn)象。
而馬太效應(yīng)的意思是,通俗點說就是,強者愈強,弱者愈弱。而長尾的直接體現(xiàn)就是馬太效應(yīng)。
通常來講(當然也有特殊情況),一個推薦系統(tǒng),如果長時間處于長尾之中,就會造成推薦疲勞,推薦的效果就會下降。
所以,很多時候,挖掘長尾是推薦系統(tǒng)不可缺少的部分。即,我們需要把尾巴部分 并且是有價值的部分給適當?shù)恼故境鰜怼?/p>
挖掘長尾的方法很多,其中一種常見的方式就是給熱點物品適當?shù)慕禉?quán)。比如物品,我們?yōu)闊狳c物品進行權(quán)重下降,這樣在最終推薦的結(jié)果中,非熱點物品得到推薦的機會就增大,從而適當?shù)耐诰蛄碎L尾。
1.5.3 AB分流測試
對于推薦系統(tǒng)來說,離線的評測其實并不能很準確的判斷一個推薦算法的好壞。最準確的判斷應(yīng)該是線上實際效果觀察。
而AB測試是推薦系統(tǒng)評測的標準做法,即我們在線上同時運行兩種算法模型,讓流量分別走不通的算法,最終通過收集結(jié)果數(shù)據(jù)進行比較算法的優(yōu)劣。
通過AB測試必須滿足以下幾個條件:流量必須能夠控制,這是為了保證線上效果的穩(wěn)定性;必須保證流量的隨機性,這樣的結(jié)果才具有說服力。
X 參考資料
《淺談矩陣分解在推薦系統(tǒng)中的應(yīng)用》http://blog.csdn.net/sun_168/article/details/20637833
《基于ALS算法的簡易在線推薦系統(tǒng)》http://blog.csdn.net/zhangyuming010/article/details/38958419
《Databricks孟祥瑞:ALS 在 Spark MLlib 中的實現(xiàn)》http://www.csdn.net/article/2015-05-07/2824641
《基于Spark MLlib平臺的協(xié)同過濾算法—電影推薦系統(tǒng)》http://snglw.blog.51cto.com/5832405/1662153
《SVD奇異值分解》http://blog.csdn.net/wangran51/article/details/7408414
《基于距離的計算方法》http://blog.sina.com.cn/s/blog_52510b1d01015nrg.html
《相似度算法》http://blog.sina.com.cn/s/blog_62b83291010127bf.html
《movielens數(shù)據(jù)集下載》http://grouplens.org/datasets/movielens/
《四種網(wǎng)絡(luò)模型》http://www.cnblogs.com/forstudy/archive/2012/03/20/2407954.html
《Spark官網(wǎng)ALS實例頁面》http://spark.apache.org/docs/latest/mllib-collaborative-filtering.html
轉(zhuǎn)載請注明來自36大數(shù)據(jù)(36dsj.com)http://www.36dsj.com/archives/38018
作者:流川楓AI
鏈接:http://www.lxweimin.com/p/0c2835e3e662
來源:簡書
簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。