在工業(yè)應用中,推薦系統(tǒng)通常可分為兩部分囤官,召回和排序。
召回階段對應的是之前幾篇文章所講的各種推薦算法蛤虐,比如據(jù)資料所載党饮,Spotify至少使用了三種算法來生成其廣受贊譽的Discover Weekly歌單,包括:
- 矩陣分解來學習集體智慧驳庭;
- NLP處理音樂評論文章與報道刑顺;
- 對音頻使用卷積神經(jīng)網(wǎng)絡進行分析。
這些算法各有特點饲常,音頻分析顯然可以用于解決冷啟動問題蹲堂,NLP處理音樂評論更是可以學得專業(yè)人士的領(lǐng)域知識,它們各自獨立運行給出自己的結(jié)果贝淤,由于獨立柒竞,算法數(shù)目可增可減,亦可各自獨立迭代變化播聪。
這個過程會從幾千萬item中篩選出幾百或者上千的候選集朽基,然后在排序階段選出30首歌曲給到每位用戶。這個排序可理解為一個函數(shù)离陶,稼虎,輸入為用戶、物品招刨、環(huán)境霎俩,輸出一個0到1之間的分數(shù),取分數(shù)最高的幾首。這一過程通常稱為CTR預估茸苇。
這篇文章來說一下該“函數(shù)”的常見形式及基本運作方式排苍。
LR
最簡單的是邏輯回歸(Logistic Regression),一個廣義線性模型学密。
拿某user的用戶畫像(一個向量)比如[3, 1]
淘衙,拼接上某item的物品畫像比如[4, 0]
,再加上代表context的向量[0, 1, 1]
后得到[3, 1, 4, 0, 0, 1, 1]
腻暮,若該user曾與該item發(fā)生過聯(lián)系則label為1彤守,這些加起來是一個正樣本,同時可以將用戶“跳過”的item或熱門的卻沒有與用戶產(chǎn)生過聯(lián)系的item作為負樣本哭靖,label為0具垫,擬合如下方程:
其中即為上述向量,是與x每個元素相對應的權(quán)重试幽,為截距筝蚕。其損失函數(shù)為:
其中為樣本的label0或1,是根據(jù)模型預測的0到1之間的數(shù)字铺坞。
通過降低此損失函數(shù)來擬合訓練樣本來完成模型的訓練起宽,利用模型對新的數(shù)據(jù)進行預測即完成了打分。訓練過程參考sklearn的LogisticRegression很容易完成济榨。
傳統(tǒng)的LR只能在線下批量處理大量數(shù)據(jù)坯沪,無法有效處理大規(guī)模的在線數(shù)據(jù)流。模型更新可能要一天甚至更多擒滑,不夠及時腐晾。而Google在2013提出了Follow The Regularized Leader(FTRL),一種在線邏輯回歸算法丐一。該方法對邏輯回歸的目標函數(shù)進行了修改藻糖,加上各種系統(tǒng)工程上的調(diào)優(yōu),使得該模型的參數(shù)可以在每一個線上數(shù)據(jù)點進行動態(tài)更新钝诚。
可以在網(wǎng)上找到不少FTRL的開源實現(xiàn)比如libftrl-python颖御。
FM | FFM
FM與FFM分別是Factorization Machine與Field-aware Factorization Machine的簡稱。
LR作為廣義線性模型對特征向量與label之間的非線性關(guān)系會很苦手凝颇。這時便需要進行特征組合潘拱,比如使用線性模型來預測各種近似長方形形狀的面積,兩個特征為長與寬拧略,那么顯然并不能學到一個很好的模型芦岂,此時增加一個新的特征,便可以得到很好的效果垫蛆。
在實際應用中禽最,特征向量的維度是很高的腺怯,很難像上例中直接看到這種有意義的組合,考慮所有特征兩兩組合則線性回歸方程變?yōu)椋?/p>
除了原本特征的個權(quán)重外還要學習各特征組合情況對應的權(quán)重川无,對于參數(shù)的訓練呛占,需要大量和都不為0的樣本,然而由于one-hot編碼等原因帶來的稀疏性使得這個要求無法達成懦趋,那么訓練樣本不足便會導致的不準確晾虑,從而影響模型的質(zhì)量。
解決方案是使用矩陣分解仅叫。在推薦系統(tǒng)中會對user_item_matrix
做分解帜篇,為user及item學得一個低維的向量來代表自已。那么此處的情況可以與之類比诫咱,將特征組合的所有權(quán)重表示為一個形狀為(i * i)的矩陣笙隙,那么即為此矩陣第i行第j列的數(shù)值,將此高維度的矩陣進行分解坎缭,可以為每個特征得到一個關(guān)于權(quán)重的隱向量竟痰,那么使用點乘即可得到。此時線性方程變?yōu)椋?/p>
以上模型稱為因子分解機(Factorization Machine)掏呼,經(jīng)過一些數(shù)學上的變換及處理凯亮,該模型可以在的復雜度下進行訓練和預測,是一種比較高效的模型哄尔。
在FM的基礎(chǔ)上有人提出了Field-aware Factorization Machine。比如特征向量中有200多維來代表一個user的國家柠并,country.uk
和country.us
等等,那么這200多個特征可以認為是屬于一個field臼予,區(qū)別在為特征學習隱向量時要為每一個field都學到一個相應的隱向量,特征組合權(quán)重根據(jù)關(guān)于所在field的隱向量乘以關(guān)于所屬field的隱向量而得粘拾,線性方程變?yōu)椋?/p>
該方法效果更好,而預測時間復雜度升至缰雇。有開源庫libffm的實現(xiàn)以供使用入偷。
GBDT & LR
Facebook在廣告CTR預估上的做法是使用梯度提升決策樹(GBDT) & LR的方案。
思路是將原本要輸入LR的特征向量械哟,先經(jīng)過GBDT篩選和組合疏之,生成新的特征向量再送到LR中。如圖所示:
GBDT作為集成模型暇咆,會使用多棵決策樹锋爪,每棵樹去擬合前一棵樹的殘差來得到很好的擬合效果丙曙。一個樣本輸入到一棵樹中,會根據(jù)各節(jié)點的條件往下走到某個葉子節(jié)點其骄,將此節(jié)點值置為1亏镰,其余置為0。比如訓練使用了3棵決策樹拯爽,每棵決策樹有5個葉子節(jié)點索抓,樣本在各樹分別落到了各樹從左往右的第1,2某抓,3個節(jié)點上纸兔,則得到三個one-hot編碼為[1, 0, 0, 0, 0]
,[0, 1, 0, 0, 0]
否副,[0, 0, 1, 0, 0]
汉矿,拼接起來作為轉(zhuǎn)換后的特征向量:[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0]
,輸入到LR模型中得到分值备禀。
此模型為Facebook的廣告效果帶來了明顯的提升洲拇,在其發(fā)表的論文中,還討論了各種工程上的實踐與細節(jié)曲尸,包括GBDT與LR的更新頻率赋续,降采樣的比例實踐等,值得參考另患。實現(xiàn)GBDT可以使用開源的XGBoost包纽乱。
Wide & Deep
Google在Google Play中對App的推薦排序使用了一種名為Wide & Deep的深寬模型。如下圖:
Wide部分就是廣義的線性模型昆箕,在原本的特征基礎(chǔ)上適當加一些特征組合鸦列,Deep部分是一個前饋神經(jīng)網(wǎng)絡,可以對一些稀疏的特征學習到一個低維的稠密向量鹏倘,將Wide與Deep的信息相加薯嗤,依然使用Sigmond來預測函數(shù),表示為:
其中為Sigmond函數(shù)纤泵,是Wide部分的權(quán)重骆姐,表示W(wǎng)ide部分的組合特征,為Deep網(wǎng)絡最后一層輸出捏题,是線性模型的偏重玻褪。
將兩個模型放到一起聯(lián)合訓練(不同于集成訓練需要將各模型單獨訓練再將結(jié)果匯合),互相彌補對方的不足(特征工程困難和可解釋性差)涉馅,該模型為Google Play的在線收益相較于純Wide模型帶來了3.9%的提升归园。實現(xiàn)可參考tensorflow/models項目。