推薦系統(tǒng)中的排序技術(shù)

在工業(yè)應用中,推薦系統(tǒng)通常可分為兩部分囤官,召回和排序。

召回階段對應的是之前幾篇文章所講的各種推薦算法蛤虐,比如據(jù)資料所載党饮,Spotify至少使用了三種算法來生成其廣受贊譽的Discover Weekly歌單,包括:

  1. 矩陣分解來學習集體智慧驳庭;
  2. NLP處理音樂評論文章與報道刑顺;
  3. 對音頻使用卷積神經(jīng)網(wǎng)絡進行分析。

這些算法各有特點饲常,音頻分析顯然可以用于解決冷啟動問題蹲堂,NLP處理音樂評論更是可以學得專業(yè)人士的領(lǐng)域知識,它們各自獨立運行給出自己的結(jié)果贝淤,由于獨立柒竞,算法數(shù)目可增可減,亦可各自獨立迭代變化播聪。

這個過程會從幾千萬item中篩選出幾百或者上千的候選集朽基,然后在排序階段選出30首歌曲給到每位用戶。這個排序可理解為一個函數(shù)离陶,F(user, item, context)稼虎,輸入為用戶、物品招刨、環(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具垫,擬合如下方程:

y = \frac{1}{1 + e ^ {- (w ^ {T}x + w_0)}}

其中x即為上述向量,w是與x每個元素相對應的權(quán)重试幽,b為截距筝蚕。其損失函數(shù)為:

loss =\sum_{(x, y) \in D}-y \log \left(y^{\prime}\right)-(1-y) \log \left(1-y^{\prime}\right)

其中y為樣本的label0或1,y^{\prime}是根據(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)系會很苦手凝颇。這時便需要進行特征組合潘拱,比如使用線性模型來預測各種近似長方形形狀的面積,兩個特征為長x_1與寬x_2拧略,那么顯然并不能學到一個很好的模型芦岂,此時增加一個新的特征x_3=x_1 * x_2,便可以得到很好的效果垫蛆。

在實際應用中禽最,特征向量的維度是很高的腺怯,很難像上例中直接看到這種有意義的組合,考慮所有特征兩兩組合則線性回歸方程變?yōu)椋?/p>

y(\mathbf{x})=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n} w_{i j} x_{i} x_{j}

除了原本特征的i個權(quán)重外還要學習各特征組合情況對應的權(quán)重川无,對于參數(shù)w_{ij}的訓練呛占,需要大量x_ix_j都不為0的樣本,然而由于one-hot編碼等原因帶來的稀疏性使得這個要求無法達成懦趋,那么訓練樣本不足便會導致w_{ij}的不準確晾虑,從而影響模型的質(zhì)量。

解決方案是使用矩陣分解仅叫。在推薦系統(tǒng)中會對user_item_matrix做分解帜篇,為user及item學得一個低維的向量來代表自已。那么此處的情況可以與之類比诫咱,將特征組合的所有權(quán)重表示為一個形狀為(i * i)的矩陣笙隙,那么w_{ij}即為此矩陣第i行第j列的數(shù)值,將此高維度的矩陣進行分解坎缭,可以為每個特征得到一個關(guān)于權(quán)重的隱向量v_i竟痰,那么w_{i j}使用v_i點乘v_j即可得到。此時線性方程變?yōu)椋?/p>

y(\mathbf{x})=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j}

以上模型稱為因子分解機(Factorization Machine)掏呼,經(jīng)過一些數(shù)學上的變換及處理凯亮,該模型可以在O(kn)的復雜度下進行訓練和預測,是一種比較高效的模型哄尔。

在FM的基礎(chǔ)上有人提出了Field-aware Factorization Machine。比如特征向量中有200多維來代表一個user的國家柠并,country.ukcountry.us等等,那么這200多個特征可以認為是屬于一個field臼予,區(qū)別在為特征x_i學習隱向量時要為每一個field都學到一個相應的隱向量,特征組合權(quán)重w_{ij}根據(jù)x_i關(guān)于x_j所在field的隱向量乘以x_j關(guān)于x_i所屬field的隱向量而得粘拾,線性方程變?yōu)椋?/p>

y(\mathbf{x})=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{v}_{i, f_{j}}, \mathbf{v}_{j, f_{i}}\right\rangle x_{i} x_{j}

該方法效果更好,而預測時間復雜度升至O(kn^2)缰雇。有開源庫libffm的實現(xiàn)以供使用入偷。

GBDT & LR

Facebook在廣告CTR預估上的做法是使用梯度提升決策樹(GBDT) & LR的方案。

思路是將原本要輸入LR的特征向量械哟,先經(jīng)過GBDT篩選和組合疏之,生成新的特征向量再送到LR中。如圖所示:

image

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的深寬模型。如下圖:

image

Wide部分就是廣義的線性模型昆箕,在原本的特征基礎(chǔ)上適當加一些特征組合鸦列,Deep部分是一個前饋神經(jīng)網(wǎng)絡,可以對一些稀疏的特征學習到一個低維的稠密向量鹏倘,將Wide與Deep的信息相加薯嗤,依然使用Sigmond來預測函數(shù),表示為:

P(Y=1 | \mathbf{x})=\sigma\left(\mathbf{w}\_{w i d e}^{T}[\mathbf{x}, \phi(\mathbf{x})]+\mathbf{w}\_{d e e p}^{T} a^{\left(l_{f}\right)}+b\right)

其中\sigma為Sigmond函數(shù)纤泵,W_{wide}^T是Wide部分的權(quán)重骆姐,\phi(\mathbf{x})表示W(wǎng)ide部分的組合特征,a^{\left(l_{f}\right)}為Deep網(wǎng)絡最后一層輸出捏题,b是線性模型的偏重玻褪。

將兩個模型放到一起聯(lián)合訓練(不同于集成訓練需要將各模型單獨訓練再將結(jié)果匯合),互相彌補對方的不足(特征工程困難和可解釋性差)涉馅,該模型為Google Play的在線收益相較于純Wide模型帶來了3.9%的提升归园。實現(xiàn)可參考tensorflow/models項目。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庸诱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子朱灿,更是在濱河造成了極大的恐慌,老刑警劉巖盗扒,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侣灶,死亡現(xiàn)場離奇詭異缕碎,居然都是意外死亡,警方通過查閱死者的電腦和手機凡怎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門统倒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人房匆,你說我怎么就攤上這事报亩。” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵骗卜,是天一觀的道長左胞。 經(jīng)常有香客問我,道長烤宙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任服猪,我火速辦了婚禮,結(jié)果婚禮上近她,老公的妹妹穿的比我還像新娘膳帕。我一直安慰自己,他們只是感情好攒磨,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布汤徽。 她就那樣靜靜地躺著,像睡著了一般漆羔。 火紅的嫁衣襯著肌膚如雪狱掂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天鸟顺,我揣著相機與錄音器虾,去河邊找鬼。 笑死欧芽,一個胖子當著我的面吹牛葛圃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播库正,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼龙誊!你這毒婦竟也來了喷楣?” 一聲冷哼從身側(cè)響起鹤树,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤魂迄,失蹤者是張志新(化名)和其女友劉穎惋耙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體湿酸,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡推溃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年届腐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硬萍。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡朴乖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出买羞,到底是詐尸還是另有隱情雹食,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布漠嵌,位于F島的核電站盖呼,受9級特大地震影響化撕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蟹瘾,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望憾朴。 院中可真熱鬧,春花似錦灸拍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揣苏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卸察,已是汗流浹背芦圾。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洪乍,地道東北人夜焦。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像巷波,于是被迫代替她去往敵國和親卸伞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351