推荐算法---FM,协同过滤
文章目錄
- 目錄
- 1.FM算法產(chǎn)生背景
- 2.FM算法模型
- 3.FM算法VS其他算法
- 4.推薦算法總結(jié)
目錄
1.FM算法產(chǎn)生背景
在傳統(tǒng)的線性模型如LR中,每個特征都是獨(dú)立的,如果需要考慮特征與特征直接的交互作用,可能需要人工對特征進(jìn)行交叉組合;非線性SVM可以對特征進(jìn)行kernel映射,但是在特征高度稀疏的情況下,并不能很好地進(jìn)行學(xué)習(xí);現(xiàn)在也有很多分解模型Factorization model如矩陣分解MF、SVD++等,這些模型可以學(xué)習(xí)到特征之間的交互隱藏關(guān)系,但基本上每個模型都只適用于特定的輸入和場景。為此,在高度稀疏的數(shù)據(jù)場景下如推薦系統(tǒng),FM(Factorization Machine)出現(xiàn)了。
下面所有的假設(shè)都是建立在稀疏數(shù)據(jù)的基礎(chǔ)上,舉個例子,根據(jù)用戶的評分歷史預(yù)測用戶對某部電影的打分,這里的每一行對應(yīng)一個樣本,Feature vector x表示特征,Targer y表示預(yù)測結(jié)果。從下圖可以看出,這是一個稀疏特征的例子,后面的相關(guān)內(nèi)容會以此為例子進(jìn)行說明。
特征中的前四列表示用戶u(one-hot編碼,稀疏),接著五列表示電影i(ont-hot編碼,稀疏),再接下去五列表示用戶u對電影i的打分(歸一化特征),緊接著一列表示時(shí)間(連續(xù)特征),最后五列表示用戶u對電影i打分前評價(jià)過的最近一部電影(one-hot編碼,稀疏)
2.FM算法模型
二、FM算法模型
1、模型目標(biāo)函數(shù)
二元交叉的FM(2-way FM)目標(biāo)函數(shù)如下:
其中,w是輸入特征的參數(shù),<vi,vj>是輸入特征i,j間的交叉參數(shù),v是k維向量。
前面兩個就是我們熟知的線性模型,后面一個就是我們需要學(xué)習(xí)的交叉組合特征,正是FM區(qū)別與線性模型的地方。
為什么要通過向量v的學(xué)習(xí)方式而不是簡單的wij參數(shù)呢?
這是因?yàn)樵谙∈钘l件下,這樣的表示方法打破了特征的獨(dú)立性,能夠更好地挖掘特征之間的相關(guān)性。以上述電影為例,我們要估計(jì)用戶A和電影ST的關(guān)系w(A&ST)以更好地預(yù)測y,如果是簡單地考慮特征之間的共現(xiàn)情況來估計(jì)w(A&ST),從已有的訓(xùn)練樣本來看,這兩者并沒有共現(xiàn),因此學(xué)習(xí)出來的w(A&ST)=0。而實(shí)際上,A和ST應(yīng)該是存在某種聯(lián)系的,從用戶角度來看,A和B都看過SW,而B還看過ST,說明A也可能喜歡ST,說明A很有可能也喜歡ST。而通過向量v來表示用戶和電影,任意兩兩之間的交互都會影響v的更新,從前面舉的例子就可以看過,A和B看過SW,這樣的交互關(guān)系就會導(dǎo)致v(ST)的學(xué)習(xí)更新,因此通過向量v的學(xué)習(xí)方式能夠更好的挖掘特征間的相互關(guān)系,尤其在稀疏條件下。
2、模型的計(jì)算復(fù)雜度
可能有人會問,這樣兩兩交叉的復(fù)雜度應(yīng)該O(k*n^2)吧,其實(shí),通過數(shù)學(xué)公式的巧妙轉(zhuǎn)化一下,就可以變成O(kn)了。轉(zhuǎn)化公式如下所示,其實(shí)就是利用了2xy=(x+y)2?x2?y22xy = (x+y)^2-x^2-y^22xy=(x+y)2?x2?y2的思路。
3、模型的應(yīng)用
FM可以應(yīng)用于很多預(yù)測任務(wù),比如回歸、分類、排序等等。
4、模型的學(xué)習(xí)方法
前面提到FM目標(biāo)函數(shù)可以在線性時(shí)間內(nèi)完成,那么對于大多數(shù)的損失函數(shù)而言,FM里面的參數(shù)w和v更新通過隨機(jī)梯度下降SGD的方法同樣可以在線性時(shí)間內(nèi)完成,比如logit loss,hinge loss,square loss,模型參數(shù)的梯度計(jì)算如下:
這部分求和跟樣本i是獨(dú)立的,因此可以預(yù)先計(jì)算好。
5、模型延伸:多元交叉
前面提到到都是二元交叉,其實(shí)可以延伸到多元交叉,目標(biāo)函數(shù)如下:(看起來復(fù)雜度好像很高,其實(shí)也是可以在線性時(shí)間內(nèi)完成的)
6、總結(jié)
前面簡單地介紹了FM模型,總的來說,FM通過向量交叉學(xué)習(xí)的方式來挖掘特征之間的相關(guān)性,有以下兩點(diǎn)好處:
1.在高度稀疏的條件下能夠更好地挖掘數(shù)據(jù)特征間的相關(guān)性,尤其是對于在訓(xùn)練樣本中沒出現(xiàn)的交叉數(shù)據(jù);
2.FM在計(jì)算目標(biāo)函數(shù)和在隨機(jī)梯度下降做優(yōu)化學(xué)習(xí)時(shí)都可以在線性時(shí)間內(nèi)完成。
3.FM算法VS其他算法
1、FM 對比 SVM
1)SVM
SVM是大家熟知的支持向量機(jī)模型,其模型原理在這里就不詳述了。
SVM的線性模型函數(shù)表示為:
其非線性形式可以通過核映射kernel mapping的方式得到,如下所示:
其中多項(xiàng)式核表示為:
當(dāng)d=2時(shí)為二次多項(xiàng)式,表示為:
多項(xiàng)式核映射后的模型函數(shù)表示為:
2)FM 對比 SVM
看到上面的式子,是不是覺得跟FM特別像?SVM和FM的主要區(qū)別在于,SVM的二元特征交叉參數(shù)是獨(dú)立的,如wij,而FM的二元特征交叉參數(shù)是兩個k維的向量vi、vj,這樣子的話,<vi,vj>和<vi,vk>就不是獨(dú)立的,而是相互影響的。
為什么線性SVM在和多項(xiàng)式SVM在稀疏條件下效果會比較差呢?線性svm只有一維特征,不能挖掘深層次的組合特征在實(shí)際預(yù)測中并沒有很好的表現(xiàn);而多項(xiàng)式svn正如前面提到的,交叉的多個特征需要在訓(xùn)練集上共現(xiàn)才能被學(xué)習(xí)到,否則該對應(yīng)的參數(shù)就為0,這樣對于測試集上的case而言這樣的特征就失去了意義,因此在稀疏條件下,SVM表現(xiàn)并不能讓人滿意。而FM不一樣,通過向量化的交叉,可以學(xué)習(xí)到不同特征之間的交互,進(jìn)行提取到更深層次的抽象意義。
此外,FM和SVM的區(qū)別還體現(xiàn)在:1)FM可以在原始形式下進(jìn)行優(yōu)化學(xué)習(xí),而基于kernel的非線性SVM通常需要在對偶形式下進(jìn)行;2)FM的模型預(yù)測是與訓(xùn)練樣本獨(dú)立,而SVM則與部分訓(xùn)練樣本有關(guān),即支持向量。
2、FM 對比 其他分解模型Fac torization Model
這部分不詳述,其他分解模型包括Matrix factorization (MF)、SVD++、PITF for Tag Recommendation、Factorized Personalized Markov Chains (FPMC),這些模型都只在特定場景下使用,輸入形式也比較單一(比如MF只適用于categorical variables),而FM通過對輸入特征進(jìn)行轉(zhuǎn)換,同樣可可以實(shí)現(xiàn)以上模型的功能,而且FM的輸入可以是任意實(shí)數(shù)域的數(shù)據(jù),因此FM是一個更為泛化和通用的模型。詳細(xì)內(nèi)容參考:https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
4.推薦算法總結(jié)
目前為止,我們常推薦算法有好多種,比較常見的有協(xié)同過濾(Collaborative Filtering Recommendations)這個在Mahout里的ItemCF和UserCF比較常用,還有一種比較新的運(yùn)行在Spark上的交替性最小二乘ALS也是一種協(xié)同過濾的算法,但是其它的推薦算法也有很多,在日常中也用的比較多,就做個總結(jié)吧。
1、基于內(nèi)容的推薦算法(Content Based Recommendation 簡稱CB)
這種推薦是從信息檢索,和文本檢索里來的,個人理解為是搜索引擎里的搜索排行。TD-IDF計(jì)算文章的詞頻和反文檔頻率計(jì)算出關(guān)鍵詞在文檔中的權(quán)值,最后構(gòu)成某篇文章的特征向量。基于該文章的特征向量和其它文章的特征向量進(jìn)行余弦相似度計(jì)算,從而返回最匹配相似的文章來給予推薦。
可以簡單概括為: 抽取item的特征向量 -> 計(jì)算余弦相似度 -> 推薦
item可以是用戶過去喜歡的電影,商品,問題等等。
基于內(nèi)容的過濾創(chuàng)建了每個商品、用戶的屬性(或是組合)用來描述其本質(zhì)。比如對于電影來說,可能包括演員、票房程度等。 用戶屬性信息可能包含地理信息、問卷調(diào)查的回答等。這些屬性信息關(guān)聯(lián)用戶用戶后即可達(dá)到匹配商品的目的。 當(dāng)然基于內(nèi)容的策略極有可能因?yàn)樾畔⑹占牟槐愣鴮?dǎo)致無法實(shí)施。
CB的優(yōu)點(diǎn):
用戶之間的獨(dú)立性(User Independence):既然每個用戶的profile都是依據(jù)他本身對item的喜好獲得的,自然就與他人的行為無關(guān)。而CF剛好相反,CF需要利用很多其他人的數(shù)據(jù)。CB的這種用戶獨(dú)立性帶來的一個顯著好處是別人不管對item如何作弊(比如利用多個賬號把某個產(chǎn)品的排名刷上去)都不會影響到自己。
好的可解釋性(Transparency):如果需要向用戶解釋為什么推薦了這些產(chǎn)品給他,你只要告訴他這些產(chǎn)品有某某屬性,這些屬性跟你的品味很匹配等等。
新的item可以立刻得到推薦(New Item Problem):只要一個新item加進(jìn)item庫,它就馬上可以被推薦,被推薦的機(jī)會和老的item是一致的。而CF對于新item就很無奈,只有當(dāng)此新item被某些用戶喜歡過(或打過分),它才可能被推薦給其他用戶。所以,如果一個純CF的推薦系統(tǒng),新加進(jìn)來的item就永遠(yuǎn)不會被推薦:( 。
CB的缺點(diǎn):
item的特征抽取一般很難(Limited Content Analysis):如果系統(tǒng)中的item是文檔(如個性化閱讀中),那么我們現(xiàn)在可以比較容易地使用信息檢索里的方法來“比較精確地”抽取出item的特征。但很多情況下我們很難從item中抽取出準(zhǔn)確刻畫item的特征,比如電影推薦中item是電影,社會化網(wǎng)絡(luò)推薦中item是人,這些item屬性都不好抽。其實(shí),幾乎在所有實(shí)際情況中我們抽取的item特征都僅能代表item的一些方面,不可能代表item的所有方面。這樣帶來的一個問題就是可能從兩個item抽取出來的特征完全相同,這種情況下CB就完全無法區(qū)分這兩個item了。比如如果只能從電影里抽取出演員、導(dǎo)演,那么兩部有相同演員和導(dǎo)演的電影對于CB來說就完全不可區(qū)分了。
無法挖掘出用戶的潛在興趣(Over-specialization):既然CB的推薦只依賴于用戶過去對某些item的喜好,它產(chǎn)生的推薦也都會和用戶過去喜歡的item相似。如果一個人以前只看與推薦有關(guān)的文章,那CB只會給他推薦更多與推薦相關(guān)的文章,它不會知道用戶可能還喜歡數(shù)碼。
無法為新用戶產(chǎn)生推薦(New User Problem):新用戶沒有喜好歷史,自然無法獲得他的profile,所以也就無法為他產(chǎn)生推薦了。當(dāng)然,這個問題CF也有。
2、基于協(xié)同過濾的推薦算法(Collaborative Filtering Recommendations)
基于協(xié)同過濾的推薦,可以理解為基于用戶行為的推薦。依賴于用戶過去的行為的協(xié)同過濾,行為可以是過往的交易行為和商品評分,這種方式不需要顯性的屬性信息。協(xié)同過濾通過分析用戶和商品的內(nèi)在關(guān)系來識別新的 user-item 關(guān)系。
協(xié)同過濾領(lǐng)域主要的兩種方式是最近鄰(neighborhood)方法和潛在因子(latent factor)模型。最近鄰方法主要集中在 item 的關(guān)系或者是 user 的關(guān)系,是比較基礎(chǔ)的過濾引擎。而潛在因子模型并不是選取所有的關(guān)系,而是通過矩陣分解的技術(shù)將共現(xiàn)矩陣的分解,比如提取20-100個因子,來表示原始矩陣信息(可以對比上面提到的音樂基因,只不過潛在因子模型是通過計(jì)算機(jī)化的實(shí)現(xiàn))。
最鄰近:
基于用戶的協(xié)同過濾算法: 基于一個這樣的假設(shè)“跟你喜好相似的人喜歡的東西你也很有可能喜歡。”所以基于用戶的協(xié)同過濾主要的任務(wù)就是找出用戶的最近鄰居,從而根據(jù)最近鄰 居的喜好做出未知項(xiàng)的評分預(yù)測。
item based CF 基于物品相似的協(xié)同過濾。
user based CF 基于用戶相似的協(xié)同過濾。
潛在引子模型:
SVD奇異值分解矩陣
ALS交替最小二乘
總結(jié)為: 用戶評分 -> 計(jì)算最鄰近 -> 推薦
3、算法對比
各種推薦方法都有其各自的優(yōu)點(diǎn)和缺點(diǎn),見表1。
4、 Mahout里的推薦算法
5、總結(jié)
沒有最那一種算法能解決所有問題,混合算法有效結(jié)合每個算法的利弊才能達(dá)到最好的效果。
一個比較成功的內(nèi)容過濾是 pandora.com 的音樂基因項(xiàng)目,一個訓(xùn)練有素的音樂分析師會對每首歌里幾百個獨(dú)立的特征進(jìn)行打分。這些得分幫助pandora推薦歌曲。還有一種基于內(nèi)容的過濾是基于用戶人口統(tǒng)計(jì)特征的推薦,先根據(jù)人口統(tǒng)計(jì)學(xué)特征將用戶分成若干個先驗(yàn)的類。對后來的任意一個用戶,首先找到他的聚類,然后給他推薦這個聚類里的其他用戶喜歡的物品。這種方法的雖然推薦的粒度太粗,但可以有效解決注冊用戶的冷啟動(Cold Start)的問題。
總結(jié)
以上是生活随笔為你收集整理的推荐算法---FM,协同过滤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NLP复习资料(4)-第八章 句法分析
- 下一篇: 矩阵论-范数理论及其应用