【編者按】本文由CSDN博主 @松子茶 翻譯自Quora的問(wèn)題:“Is there any summary of top models for the Netflix prize?”答主位為Edwin Chen,詳細(xì)解析了Netflix算法的構(gòu)建。
我試著在這里說(shuō)些想法。矩陣分解技術(shù)和模型組合方法可能是與Netflix Prize有關(guān)最多被討論的算法,但我們也使用了很多其他的洞見。
假設(shè)Alice給《盜夢(mèng)空間》打4分。我們可認(rèn)為這個(gè)評(píng)分由以下幾部分組成:
基準(zhǔn)分(比如所有用戶給電影打的分的均值是3.1分)
Alice的專門效應(yīng)(比如愛(ài)麗絲傾向于打出比平均值低的分,因此她的打分比我們正常所期望的要低0.5分)
盜夢(mèng)空間的專門效應(yīng)(比如盜夢(mèng)空間是很棒的電影,因此它的分值比我們所希望的要高0.7分)
Alice和盜夢(mèng)空間之間難以預(yù)測(cè)的交互效應(yīng),占了余下的分值(比如Alice真心喜歡盜夢(mèng)空間,因?yàn)樗娜R昂納多和腦科學(xué)的組合,因此又得到額外的0.7分)
換句話,我們把這4分分解成4 = [3.1 (基準(zhǔn)分) – 0.5 (Alice的專門效應(yīng)) + 0.7(盜夢(mèng)空間的專門效應(yīng)) + 0.7(特別的交互效應(yīng))因此與其讓我們的模型預(yù)測(cè)4分本身,我們也可以首先試著去除基準(zhǔn)預(yù)測(cè)的效應(yīng)(前三部分)然后預(yù)測(cè)這特別的0.7分(我想你也可以認(rèn)為這就是一種簡(jiǎn)單的boosting)
更一般的,基準(zhǔn)預(yù)測(cè)的其他例子還有:
一個(gè)因素:允許Alice的打分(線性的)依賴于自從她開始打分的天數(shù)的(平方根)。(比如,你是否注意到隨著時(shí)間增加你變成更嚴(yán)厲的評(píng)論家)
一個(gè)因素:允許Alice的打分依賴于所有人可以給電影打分的天數(shù)(如果你是一個(gè)最先看到這部電影的人,可能因?yàn)槟闶且粋€(gè)資深粉絲然后真心興奮于在DVD上看到他,因此你會(huì)偏重于給他打高分)
一個(gè)因素:允許Alice的打分依賴于所有給盜夢(mèng)空間打過(guò)分的人數(shù)。(可能愛(ài)麗絲是個(gè)討厭跟風(fēng)的潮人)
一個(gè)因素:允許Alice的打分依賴于電影的全體打分。
加上一堆其他的。
事實(shí)上,對(duì)這些偏倚建模被證明相當(dāng)重要:在他們給出最終解決的論文中,Bell和Koren寫道:
在眾多有貢獻(xiàn)的新算法中,我想強(qiáng)調(diào)一個(gè)——那些粗陋的基準(zhǔn)預(yù)測(cè)(偏倚)捕捉到的數(shù)據(jù)中的主效應(yīng)。雖然文獻(xiàn)大多集中在更復(fù)雜的算法方面,但我們已經(jīng)知道,對(duì)主效應(yīng)的準(zhǔn)確對(duì)待未來(lái)很可能是至少跟建模算法一樣有效的突破點(diǎn)。
ps: 為什么消除這些偏見是有用的?我們有一個(gè)更具體的例子,假設(shè)你知道Bob和Alice喜歡同一類的電影,預(yù)測(cè)Bob對(duì)盜夢(mèng)空間的評(píng)分,代之以簡(jiǎn)單預(yù)測(cè)其像Alice一樣打4分,如果我們知道Bob通常比平均分高0.3分,我們就可以去掉Alice的偏倚然后加上Bob的:4 + 0.5 + 0.3 = 4.8
讓我們看看一些更復(fù)雜的模型。當(dāng)提到上面的部分時(shí),一個(gè)標(biāo)準(zhǔn)的方法就是用鄰居模型進(jìn)行協(xié)同過(guò)濾。鄰居模型主要按照以下工作。為預(yù)測(cè)Alice對(duì)《鐵達(dá)尼號(hào)》的評(píng)分,有兩件事可以做。
基于item的方法:找出與鐵達(dá)尼號(hào)類似的Alice也有打分的item集合,然后把Alice在其上的評(píng)分求加權(quán)和。
基于user的方法:找出與Alice類似的也給鐵達(dá)尼號(hào)打分的user集合,然后求出他們對(duì)鐵達(dá)尼號(hào)的評(píng)分的均值。
簡(jiǎn)單以基于item方法為例,我們主要的問(wèn)題是
怎樣找到相似item的集合
怎樣確定這些相似item評(píng)分的加權(quán)值
標(biāo)準(zhǔn)的方法是使用一些相似性的度量(比如相關(guān)性和雅可比指標(biāo))來(lái)定義電影對(duì)之間的相似性,使用在此度量下K個(gè)最相似的電影(K可能是用交叉驗(yàn)證選擇的),在計(jì)算加權(quán)平均數(shù)時(shí)用同樣的相似性度量。但這有很多問(wèn)題
鄰居不是獨(dú)立的,所以用標(biāo)準(zhǔn)的相似性度量定義加權(quán)平均時(shí)造成信息重復(fù)計(jì)算。舉例而言,假設(shè)你詢問(wèn)五個(gè)朋友今天晚上吃什么。由于其中有三個(gè)人上周去了墨西哥因此厭煩了burritos(一種墨西哥玉米煎餅),所以他們強(qiáng)烈不建議去taqueria(一家專賣煎玉米卷的墨西哥快餐館)。與你去五個(gè)互相完全不認(rèn)識(shí)的朋友相比,這五個(gè)朋友的建議有強(qiáng)烈的偏見。(與此可以類比的是,三部指環(huán)王電影都是哈利·波特的鄰居)
不同的電影應(yīng)可能有不同數(shù)量的鄰居。有些電影可能僅僅使用一個(gè)鄰居就可以預(yù)測(cè)的很好(比如哈利波特2只需單個(gè)的哈利波特1即可預(yù)測(cè)的很好),有些電影需要很多,還有些電影可能就沒(méi)有好的鄰居,這時(shí)你應(yīng)該完全忽略鄰居算法而讓其他打分模型作用到這些電影上去。
所以另一種途徑是如下:
你可以仍然使用相關(guān)性或者預(yù)先相似性來(lái)選擇相似的items
但并非使用相似性度量來(lái)確定插值權(quán)重的平均值計(jì)算,基本上用執(zhí)行(稀疏)的線性回歸以找到權(quán)重,最小化item評(píng)分和他鄰居評(píng)分的線性組合的誤差平方和。(一個(gè)略微復(fù)雜的基于user的方法與基于item的鄰居模型也很有用)
在鄰居模型之上,也可以讓隱性數(shù)據(jù)影響我們的預(yù)測(cè)。一個(gè)小的事實(shí)比如用戶給很多科幻電影打分而沒(méi)有給西部電影打分,暗示了用戶喜歡科幻多過(guò)牛仔。所以使用與鄰居打分模型相似的框架,我們可以對(duì)盜夢(mèng)空間學(xué)習(xí)到與它電影鄰居相聯(lián)系的偏移量。無(wú)論我們想怎么預(yù)測(cè)Bob在盜夢(mèng)空間上的打分,我們看一下Bob是否給盜夢(mèng)空間的鄰居電影打分了。如果有,我們加上一個(gè)相關(guān)的偏移;如果沒(méi)有,我們不加(這樣,Bob的打分就被隱性懲罰了)
用于補(bǔ)充協(xié)同過(guò)濾的鄰居方法是矩陣分解方法。鑒于鄰居方法是非常局部的評(píng)分方法(如果你喜歡哈利波特1那么你會(huì)喜歡哈利波特2),矩陣分解方法提供了更全局的觀點(diǎn)(我們知道你喜歡幻想類的電影而哈利波特有很強(qiáng)的幻想元素,所以你會(huì)喜歡哈利波特),將用戶和電影分解為隱變量的集合(可認(rèn)為是類似幻想或者暴力的屬性)。事實(shí)上,矩陣分解方法大概是贏得Netflix Prize技術(shù)中最重要的部分。在2008寫就的論文中,Bell和Koren寫到:
ps: 似乎基于矩陣分解的模型是最精確(因此也最流行),在最近關(guān)于Netflix Prize的出版物和論壇討論都很明顯。我們完全同意,并想將這些矩陣分解模型加上被時(shí)間效應(yīng)和二元觀點(diǎn)所需要提供的重要靈活性。雖然如此,已經(jīng)在大多數(shù)文獻(xiàn)中占很主導(dǎo)的鄰居模型仍然會(huì)繼續(xù)流行,這根據(jù)他的實(shí)際特點(diǎn)——無(wú)需訓(xùn)練就能夠處理新的用戶評(píng)分并提供推薦的直接解釋。
找到這些分解的典型方法是在(稀疏)評(píng)分矩陣上執(zhí)行奇異值分解(使用隨機(jī)梯度下降并正則化factor的權(quán)重,可能是限制權(quán)重為正以得到某種非負(fù)矩陣分解)。(注意這里的SVD與在線性代數(shù)里學(xué)到的標(biāo)準(zhǔn)的SVD有所不同,因?yàn)椴皇敲恳粋€(gè)用戶在每一步電影上都有評(píng)分因而評(píng)分矩陣有很多缺失值但我們并不像簡(jiǎn)單地認(rèn)為其為0)
在Netflix Prize中一些SVD啟發(fā)的方法包括
標(biāo)準(zhǔn)SVD:只要你已經(jīng)把用戶和電影都表達(dá)成隱變量的向量,就可以點(diǎn)乘Alice的向量和盜夢(mèng)空間的向量以得到其對(duì)應(yīng)的預(yù)測(cè)評(píng)分。
漸近SVD模型:代之以用戶擁有自己觀點(diǎn)的隱變量向量,可以把用戶表達(dá)為一個(gè)由他打過(guò)分(或者提供了隱含的反饋)的items集合。所以Alice表達(dá)為她已經(jīng)打過(guò)分的item的向量之和(可能是加權(quán)的),然后與鐵達(dá)尼號(hào)的隱變量點(diǎn)乘得到預(yù)測(cè)分值。從實(shí)用的觀點(diǎn)來(lái)看,這個(gè)模型有額外的優(yōu)點(diǎn)即不需要用戶參數(shù)化,因此用這個(gè)方法一旦用戶產(chǎn)生反饋(可以僅僅是看過(guò)item而不必要評(píng)分)就可以產(chǎn)生推薦,而不需要重新訓(xùn)練模型以包含用戶因素。
SVD++模型:同時(shí)用戶本身因素和items集合因素表達(dá)用戶是以上兩者的綜合。
一些回歸模型也被用來(lái)預(yù)測(cè)。我認(rèn)為該模型相當(dāng)標(biāo)準(zhǔn),因此不在這里花費(fèi)太久?;旧希玎従幽P?,我們可以采取以用戶為中心的方法和以電影為中心的方法來(lái)做回歸。
以用戶為中心:我們?yōu)槊總€(gè)用戶訓(xùn)練回歸模型,使用所有用戶的評(píng)分?jǐn)?shù)據(jù)作為數(shù)據(jù)集。響應(yīng)變量是用戶對(duì)該電影的評(píng)分,預(yù)測(cè)變量是與該電影有關(guān)的屬性(可以由比如說(shuō)PCA,MDS或SVD推出)
以電影為中心:類似的,可以對(duì)每部電影學(xué)習(xí)回歸,用所有對(duì)這部電影打分的客戶作為數(shù)據(jù)集。
有限波爾茲曼機(jī)提供了另一種可使用的隱變量方法。如下論文是如何應(yīng)用該方法到Netflix Prize上的描述(如果這論文難于閱讀,這里有RBMs的簡(jiǎn)介).
很多模型包含當(dāng)時(shí)的效應(yīng)。舉例而言,當(dāng)描述以上提到的基準(zhǔn)預(yù)測(cè)時(shí),我們使用一些時(shí)間有關(guān)的預(yù)測(cè)允許用戶的評(píng)分(線性的)依賴于從他首次評(píng)分開始的時(shí)間和電影首次被評(píng)分的時(shí)間。我們也可以得到更細(xì)粒度的時(shí)間效應(yīng):把電影按時(shí)間分為幾個(gè)月的評(píng)分,允許電影在每個(gè)分類下改變偏倚。(例如大概是2006年5月,時(shí)代雜志提名鐵達(dá)尼號(hào)為有史以來(lái)最佳電影,因此那段時(shí)間對(duì)該電影的收視評(píng)分沖刺增長(zhǎng))。在矩陣分解方法中,用戶因素也認(rèn)為是時(shí)間相關(guān)的。也可以給最近的用戶行為更高權(quán)重。
正則化也用于很多模型的學(xué)習(xí)以防止數(shù)據(jù)集上的過(guò)擬合。嶺回歸在分解模型中大量使用于對(duì)較大的權(quán)重做懲罰,Lasso回歸(盡管不那么有效)也是有用的。很多其他的參數(shù)(例如基準(zhǔn)預(yù)測(cè),鄰居模型中的相似性權(quán)重和插值權(quán)重)也使用非常標(biāo)準(zhǔn)的shrinkage技術(shù)進(jìn)行估計(jì)。
最后談?wù)勗趺窗阉胁煌乃惴ńM合以提供一個(gè)利用每個(gè)模型有點(diǎn)的單一評(píng)分(ps: 注意,就像上面提到的一樣,這些模型中很多都不是在原始的評(píng)分?jǐn)?shù)據(jù)直接訓(xùn)練的,而是在其他模型的剩余數(shù)據(jù)上)。論文中給出最終解決的細(xì)節(jié),冠軍敘述了怎樣使用GBDT模型組合超過(guò)500個(gè)模型;之前的解決是使用線性回歸來(lái)組合預(yù)測(cè)值。
簡(jiǎn)要地說(shuō),GBDT按照順序?qū)?shù)據(jù)擬合了一系列的決策樹;每棵樹被要求預(yù)測(cè)前面的樹的誤差,并往往略有不同版本的數(shù)據(jù)。更長(zhǎng)的類似的技術(shù)的描述,請(qǐng)參看問(wèn)題.
因?yàn)镚BDT內(nèi)置可以引用不同的方法在數(shù)據(jù)的不同切片上,我們可以添加一些預(yù)測(cè),幫助樹們使用有用的聚類:
每個(gè)用戶評(píng)分的電影數(shù)量
每部電影評(píng)分的用戶數(shù)量
用戶和電影的隱變量向量
有限玻爾茲曼機(jī)的隱藏單元
舉例而言,當(dāng)Bell和Koren在使用更早的混合方法時(shí)發(fā)現(xiàn)一件事,即當(dāng)電影或者用戶有少量評(píng)分時(shí)候RBMs更有用,而當(dāng)電影或者用戶有大量評(píng)分時(shí)矩陣分解方法更有用。這是一張2007年競(jìng)賽的混合規(guī)模效應(yīng)的圖.
ps: 然而我們要強(qiáng)調(diào)的是,沒(méi)有必要用這么大量的模型也能做好。下面這個(gè)圖顯示RMSE作為使用方法數(shù)量的函數(shù)。少于50種方法就可以取得我們贏得比賽的分值(RMSE=0.8712),用最好的三種方法可以使RMSE小于0.8800,已經(jīng)可以進(jìn)入前十名。甚至只使用最好的單個(gè)模型就可以讓我們以0.8890進(jìn)入排行榜。這提示我們,為了贏得比賽使用大量模型是游泳的,但在實(shí)用上,優(yōu)秀的系統(tǒng)可以只使用少數(shù)經(jīng)過(guò)精心挑選的模型即可。
最后, 距我完成Netflix Prize的論文已經(jīng)有一段時(shí)間了,記憶與筆記都較粗略,非常歡迎指正和建議。
聯(lián)系客服