如果你挖掘的信息較少,推薦的方法有很多。問題是,選擇哪一個(gè)模型更合適。在這里,主要的決策因子是推薦質(zhì)量。你可以通過驗(yàn)證來估計(jì)它,而推薦系統(tǒng)的驗(yàn)證可能會(huì)很棘手。你需要考慮一些東西,包括任務(wù)的制定,可用的反饋形式和一個(gè)優(yōu)化指標(biāo)。下面,我們來解決這些問題并呈現(xiàn)一個(gè)實(shí)例。 排名推薦我們把推薦當(dāng)作是一個(gè)排名任務(wù),這表示我們主要感興趣的是一個(gè)相對較少的項(xiàng),我們認(rèn)為這些項(xiàng)最相關(guān)并把它呈現(xiàn)給用戶。這就是眾所周知的Top-k推薦。 把它和評級(jí)預(yù)測做比較,如Netflix的競賽。2007年,Yehuda Koren(此次比賽的一個(gè)勝出者)指出,人們對使用RMSE作為一個(gè)指標(biāo)并贊成使用RMSE指標(biāo)存有疑惑,我們應(yīng)該使用一個(gè)特定的排名指標(biāo)。 然而,在我們有限的實(shí)驗(yàn)中,我們發(fā)現(xiàn)RMSE指標(biāo)并不適用于排名。對我們而言,當(dāng)調(diào)整用戶留存率時(shí),用于RMSE的矩陣分解優(yōu)化表現(xiàn)的相當(dāng)不錯(cuò),但當(dāng)從所有的可用項(xiàng)選擇推薦時(shí),卻徹底地失敗了。 我們認(rèn)為原因是訓(xùn)練會(huì)集中于評分較高的項(xiàng),同時(shí)對于這些項(xiàng)產(chǎn)生一個(gè)很好的擬合結(jié)果。而對于評分較低的項(xiàng),在損失影響方面沒有太大的意義。結(jié)果,對他們的預(yù)測會(huì)不平衡,使得與實(shí)際得分相比,一些得分較高,一些得分較低。最后,靠前的條目將顯示在熱門推薦一欄中,因而破壞了推薦結(jié)果。 換句話說,RMSE指標(biāo)不能辨別真實(shí)的內(nèi)情,而且我們需要特定的排名指標(biāo)。 排名指標(biāo)兩個(gè)最受歡迎的排名指標(biāo)是MAP和NDCG。我們在前段時(shí)間已經(jīng)使用了平均精度均值(MAP)。NDCG表示歸一化折損累積增益。兩者之間的主要區(qū)別是,MAP認(rèn)為是二元相關(guān)性(一個(gè)項(xiàng)是感興趣的或者不感興趣的),而NDCG允許以實(shí)數(shù)形式進(jìn)行相關(guān)性打分。這種關(guān)系類似分類和回歸的關(guān)系。 實(shí)際當(dāng)中,很難直接地優(yōu)化MAP或NDCG指標(biāo),因?yàn)樗麄兪遣贿B續(xù)的,所以不可微。幸運(yùn)的是,排名學(xué)習(xí)中的排名指標(biāo)和損失函數(shù)表明,用于排名學(xué)習(xí)的一對損失函數(shù)近似于這些指標(biāo)。 NDCGNDCG這個(gè)名字可能有點(diǎn)嚇人,但其背后的思想?yún)s很簡單。一個(gè)推薦系統(tǒng)返回一些項(xiàng)并形成一個(gè)列表,我們想要計(jì)算這個(gè)列表有多好。每一項(xiàng)都有一個(gè)相關(guān)的評分值,通常這些評分值是一個(gè)非負(fù)數(shù)。這就是gain(增益)。此外,對于這些沒有用戶反饋的項(xiàng),我們通常設(shè)置其增益為0。 現(xiàn)在,我們把這些分?jǐn)?shù)相加,也就是Cumulative Gain(累積增益)。我們更愿意看那些位于列表前面的最相關(guān)的項(xiàng),因此,在把這些分?jǐn)?shù)相加之前,我們將每項(xiàng)除以一個(gè)遞增的數(shù)(通常是該項(xiàng)位置的對數(shù)值),也就是折損值,并得到DCG。 在用戶與用戶之間,DCGs沒有直接的可比性,所以我們要對它們進(jìn)行歸一化處理。最糟糕的情況是,當(dāng)使用非負(fù)相關(guān)評分時(shí)DCG為0。為了得到最好的,我們把測試集中所有的條目置放在理想的次序下,采取的是前K項(xiàng)并計(jì)算它們的DCG。然后將原DCG除以理想狀態(tài)下的DCG并得到NDCG@K,它是一個(gè)0到1之間的數(shù)。 你可能已經(jīng)注意到,我們使用K表示推薦列表的長度。這個(gè)數(shù)由專業(yè)人員指定。你可以把它想像成是一個(gè)用戶可能會(huì)注意到的多少個(gè)項(xiàng)的一個(gè)估計(jì)值,如10或50這些比較常見的值。 這里有一些計(jì)算NDCG的Python代碼,非常簡單。 要注意到,我們實(shí)驗(yàn)的測試集由訓(xùn)練集以外的所有項(xiàng)組成,包括那些沒有用戶排名的項(xiàng)(與上面RMSE討論中提到的一樣)。有時(shí)人們會(huì)對用戶留存率設(shè)置測試限制,所以推薦系統(tǒng)的任務(wù)是減少調(diào)整那些相對較少的項(xiàng)。在實(shí)際情景當(dāng)中并不如此。 現(xiàn)在,它的要點(diǎn)是,還有另一種DCG表述。你還可以使用負(fù)相關(guān)分?jǐn)?shù)。在這種情況下,你可以計(jì)算出更糟糕情況下DCG的歸一化(它將小于零),或者仍然使用零作為下限值,具體要視情況而定。 反饋形式有兩種類型的反饋形式:顯性反饋和隱性反饋。顯性反饋表示用戶率項(xiàng)。另一方面,隱性反饋來自于用戶行為的觀察。大多數(shù)通常是二元的:用戶點(diǎn)擊了一個(gè)鏈接,觀看了一個(gè)視頻,瀏覽了一個(gè)產(chǎn)品,購買了一個(gè)產(chǎn)品。隱式反饋不常以計(jì)數(shù)的形式出現(xiàn),例如用戶聽一首歌的次數(shù)是多少。MAP只是一種二元反饋指標(biāo),而NDCG可以在任何情況下使用,你可以對推薦項(xiàng)指定相關(guān)分?jǐn)?shù)(二元、整數(shù)或是實(shí)數(shù))。 弱泛化和強(qiáng)泛化我們可以把用戶(和項(xiàng))分成兩組:訓(xùn)練集的一組和非訓(xùn)練集的一組。第一組的驗(yàn)證分?jǐn)?shù)對應(yīng)于所謂的弱泛化,而第二組對應(yīng)于強(qiáng)泛化。在弱泛化的情況下,每個(gè)用戶都在訓(xùn)練集。我們采取一些評價(jià)用于訓(xùn)練,剩下的評價(jià)用于測試。在評估強(qiáng)泛化時(shí),用戶既可用在訓(xùn)練中,也可用在測試中。 事實(shí)上,我們主要感興趣的是強(qiáng)泛化,因?yàn)樵诂F(xiàn)實(shí)生活中,我們給用戶推薦的條目并不存在于訓(xùn)練集。我們可以通過重新訓(xùn)練模型來解決這個(gè)問題,但這在實(shí)時(shí)推薦系統(tǒng)當(dāng)中并不可行(除非我們的模型碰巧使用的是在線學(xué)習(xí),這表明它可以使用實(shí)時(shí)獲得的新數(shù)據(jù)進(jìn)行更新)。我們假設(shè)將使用一個(gè)沒有數(shù)據(jù)更新的預(yù)訓(xùn)練模型,因此我們需要一種方式來解釋先前看不見的用戶。 處理新用戶有些算法在這種場景中會(huì)更合適,而有些算法則會(huì)變得更糟糕。例如,人們可能會(huì)說矩陣分解模型不能為新用戶提供推薦。這是不正確的。例如,使用交替最小二乘(ALS)。該方法通過在調(diào)整項(xiàng)因子時(shí)保持用戶因子不變,并在調(diào)整用戶因子時(shí)保持項(xiàng)因子不變,從而擬合模型,依次循環(huán)直至收斂。在測試時(shí),當(dāng)我們從一個(gè)新用戶輸入時(shí),我們可以保持項(xiàng)因子不變來擬合用戶因子,然后進(jìn)行推薦。 一般來說,當(dāng)預(yù)測率是用戶和項(xiàng)因子之間的點(diǎn)積時(shí),我們可以采取項(xiàng)因子和解決系統(tǒng)的線性方程組來估計(jì)用戶因子。這相當(dāng)于擬合一個(gè)線性回歸模型。我們希望的比率(實(shí)例)數(shù)是大于因子的數(shù),但即使不能如愿,我們也要感謝正則化。 缺乏實(shí)例是一個(gè)眾所周知的冷啟動(dòng)問題:如果一個(gè)新的訪問者沒有評分,那么協(xié)同過濾對于推薦就沒用。只有在我們有一些反饋之后,我們才能使用它開始工作。 越多越好一般情況下,一個(gè)推薦系統(tǒng)得到的信息越多就會(huì)表現(xiàn)得越好,理想的情況下,當(dāng)系統(tǒng)從給定用戶中得到更多評價(jià)的時(shí)候,推薦的質(zhì)量就會(huì)提高。在評價(jià)一個(gè)系統(tǒng)時(shí),我們要考慮這個(gè)維度。為了完成這個(gè),對于一個(gè)給定的用戶,我們選擇一個(gè)評價(jià)來訓(xùn)練,剩下的用來測試,然后選擇兩個(gè)評價(jià)進(jìn)行訓(xùn)練,剩下的用來測試并依次下去,重復(fù)計(jì)算推薦和NDCG,直到達(dá)到某個(gè)特定數(shù)值或者測試集中沒有剩余的評價(jià)為止。然后,我們繪制出如下結(jié)果圖。 X軸是訓(xùn)練的評價(jià)數(shù),Y軸是用戶NDCG@50均值當(dāng)比較兩個(gè)推薦系統(tǒng)的結(jié)果時(shí),繪圖將揭開它們的不同。要么一個(gè)比另一個(gè)更好,要么在曲線的某些點(diǎn)上相交。 該交叉點(diǎn)提供了使用兩個(gè)系統(tǒng)組合的一種可能性。最初我們采用的是第一個(gè)系統(tǒng),當(dāng)獲得的反饋大于閾值時(shí),我們切換到另一個(gè)系統(tǒng)。在這里,當(dāng)給出少許評價(jià)數(shù)時(shí)藍(lán)色會(huì)表現(xiàn)的更好,但當(dāng)評價(jià)數(shù)大約50個(gè)時(shí)就會(huì)收斂。當(dāng)提供更多的評價(jià)時(shí),綠色則占據(jù)上風(fēng)。 這個(gè)分?jǐn)?shù)是在大約1000個(gè)用戶組成的測試集中計(jì)算得到的,這個(gè)樣本大小提供了可識(shí)別的模型,但是仍然有一些噪音,正如你從鋸齒線上看到的那樣。 事實(shí)上,我們需要的應(yīng)該是一個(gè)數(shù)字而不是一個(gè)繪圖,我們可以在訓(xùn)練中平均化等級(jí)數(shù)目之間的得分,我們稱這個(gè)數(shù)為L。由此產(chǎn)生的指標(biāo)是MANDCG:均值(用戶之間)平均(1到L之間)NDCG。 本文的代碼在GitHub上可以獲得。要運(yùn)行它,在你的推薦系統(tǒng)上需要提供的數(shù)據(jù)和插件。 原文鏈接:Evaluating recommender systems(譯者/劉帝偉 審校/劉翔宇、朱正貴、李子健 責(zé)編/周建?。?/span>
|
|
|