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