#论文 《Wide Deep Learning for Recommender System》翻译
生活随笔
收集整理的這篇文章主要介紹了
#论文 《Wide Deep Learning for Recommender System》翻译
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
只是為了深化個人理解,翻譯了一下梗概。不追求信達雅,只翻譯大意。
概要: 使用非線性特征的廣義線性模型(GLM)廣泛應用在大規模,輸入變量稀疏的回歸和分類問題中。其中,通過關于交叉特征的wide模型,對特征間關系的memorization達到了有效和可解釋的結果,但同時,也需要很多精力投入在特征工程上。與之對應的,deep模型不需要很多特征工程,通過從系數特征中學習到的低緯稠密特征,可以更好的對沒見過的特征組合進行泛化。但是,deep的NN模型很容易過擬合,在user-item的關聯很稀疏高維的情況向下,會推薦出不太相關的內容。在本文中,我們提出了Wide & Deep learning,結合了wide線性模型和deep的NN模型,從而獲得了二者的memorization和generalization的優點,來應用到推薦系統中。我們在Google Play中實現并評測了這個系統。在線實驗表示,與單一的wide模型或者deep模型相比,Wide & Deep可以顯著的提高app下載量。我們也在TensorFlow中開源了我們的實現。
1 Introduction 推薦系統可以看做是搜索排序系統,其中,輸入是一個用戶和上下文信息的集合,輸出是一個推薦item的list。給出一個query,推薦系統的任務就是從數據庫中找到相關的item,然后根據特性,如點擊或購買,來排序。 我們做推薦系統的主要挑戰,和一般的搜索排序問題相似,主要是memorization和generalization。memorization可以被大概定義為,從歷史數據中學習item或特征的共現信息,探索相關性。generalization,則是基于相關性,來探索在歷史數據中沒有或者很少出現的新的特征的結合。基于memorization的推薦系統,更傾向于用戶已經有過行為的item,更加有局部性和相關性。與memorization相對,泛化性能則傾向于提高推薦item的多樣性。本論文中,我們著眼于app推薦,但這個方法應該可以用在更加普遍的推薦系統中。 對于工業界的大規模線上推薦系統和排序系統而言,廣義線性模型GLM(如LR等)由于其簡單、可擴展和可解釋而應用廣泛。模型通常使用one-hot編碼為binary的稀疏特征來進行訓練。比如,XX=A特征一類的。通過對系數特征的cross-product交叉轉換,和類似AND這樣的邏輯運算,可以有效的獲得memorization特性。這也解釋了特征pair交叉與目標label之間的關系。generalization通常使用更加粗粒度的特征組合,如A類和B類這樣的來獲得,但通常需要人工來做特征工程。交叉特征的一個限制是,他們對于沒有在query-item中出現過的特征組合表現力不足。 embedding-based模型,如FM或deep NN,可以通過學習低維度稠密特征vector,來泛化一些沒有見過的query-item pair特征,并且不需要很多人工特征工程。然而,在query-item的矩陣稀疏高維,用戶有特殊的偏好,沒太大的擴展空間的情況下,很難學習到有效的低維度表達。這種情況下,在大部分query-item pair之間,應該沒有聯系,但是,dense embedding會訓練得到非0的預測權重,從而過擬合導致推薦出一些沒太相關的內容。另一方面,對特征進行cross-product的線性模型可以memorize這些特殊rule,并且所需要的參數很少。 本文中,我們提出Wide & Deep模型框架,通過結合一個線性模型和一個NN模型,來在同一個模型中獲取memorization和generalization,見圖F1。
本文主要貢獻如下: 提出了Wide & Deep學習框架,結合前向NN網絡,并嵌入了線性模型,可以用于通用稀疏輸入的推薦系統。 在Google Play上實現并且評測了Wide & Deep推薦系統。 在TF上開源了我們的實現。
盡管這個idea很簡單,但我們展示了,Wide & Deep框架可以顯著的提升app獲取率,同時,也滿足了訓練和服務的效率需求。
2 推薦系統概覽 圖2顯示了app推薦系統的概況。當一個用戶訪問app store的時候,就會產生一個包含各種用戶和上下文的特征的query。推薦系統會返回一個app列表(即,app被展示),用戶可以對列表中的app執行操作,如點擊或者購買。這些用戶的行為,與query和展示一起,記錄在log中,作為學習的訓練數據。 由于在數據庫中有100萬多個app,因此,在每個query下,對所有app都出一個分是很難的滿足服務延遲要求的(一般要求O(10)毫秒)。因此,第一步是做召回。召回系統會返回一個與query匹配的較短的item的list,一般是機器學習模型和人工定義規則的共同影響的結果。在降低了候選池中item的數量之后,評分系統來對所有item評個分,然后進行排序。這個評分一般含義是P(y|x),即,給定用戶和上下文特征x,label y出現的概率。在本文中,我們主要集中在基于Wide & Deep學習框架的評分系統。
3 Wide & Deep Learning 3.1 Wide部分 Wide部分是一個廣義線性模型,形式是:y=wx + b,如圖F1(左)所示。y是預測結果,x是d個特征組成的向量,w是模型參數,b是偏置。特征集合中,包含了基礎的輸入特征和轉換后的特征。其中,最重要的轉換是cross-product(交叉)轉換,定義如下: (見論文公式) 其中,c_ki是一個布爾值,如果第i個特征是轉換的一部分,就為1,否則為0。 對于二進制的特征,一個交叉轉換是(如,AND(性別=女,語言=英語))當且僅當特征(性別=女)和特征(語言=英語)都為1的時候,才為1,否則為0。這樣就能抓取到了兩個二進制特征的交叉因素,并且為廣義線性模型中增加了非線性。
3.2 Deep部分 Deep部分是一個前向反饋NN網絡,如圖F1(右)所示。對于分類特征,初始輸入是特征的字符串(如,語言=英語)。這些稀疏高維特征先轉換為低維稠密特征向量,如,embedding vector,一般是O(10)到O(100)維度。這些embedding vector先隨機初始化,然后訓練模型,降低最終的損失函數的結果。這些低維稠密的embedding vector之后會作為輸入進入到NN的隱藏層。其中,每個隱藏層都會做如下計算: (見式子2) 其中,l是隱藏層數,f是激活函數,經常使用ReLU。a,b和W是第l層的激活,偏執,和模型權重。
3.3 Wide & Deep模型的組合訓練(joint training) Wide部分和Deep部分通過一個加權他們的輸出的log odd,一般再用一個普通的LR來做組合訓練。注意:組合訓練與ensemble是有區別的。在ensemble(集成學習)中,不同模型是獨立訓練,相互之間不影響的,只有在預測的時候,才把他們的結果集合起來,而不是在訓練時候就結合起來。與此相比,組合訓練在訓練的時候,就把wide和deep部分中的參數和他們結果組合的時候的加權參數都一起考慮進來做優化了。他們的模型大小也不同:對于ensemble來說,由于不同模型是分開訓練的,所以每個模型都需要更大一點(如,更多特征和轉換)來獲取較好的準確率。但組合訓練只需要為了彌補deep部分的弱點,來用很少一些特征交叉就可以了,而不是用所有的全量的wide模型。 Wide & Deep模型的組合訓練可以通過mini-batch的隨即梯度優化,用BP算法對wide和deep部分的模型輸出進行同時計算。在實驗中,我們對wide部分的優化用了FTRL算法,并使用了L1正則化,對deep部分用了AdaGrad優化。 組合后的模型,如圖F1所示(中)。對于一個LR問題,模型預測如下: (式3) 其中,Y是分類標簽,δ(·)是sigmoid函數,X(x)是x轉換的交叉特征。b是偏置。w_wide是wide部分的參數全紅,w_deep是在最終的激活中用到的權重。
4 系統實現 app推薦系統的實現包含三個階段:數據生成,模型訓練和模型服務。見圖F3.
4.1 數據生成 在本階段,一段時間內的用戶和app的展示信息被用來生成訓練數據。每個樣本對應一條展示。標簽是app下載:如果展示app被安裝則為1,否則為0。 vocabulary,即類別字符串特征轉換為數字id特征的映射表,也在本階段生成。對于所有的出現次數超過一個最低限制次數的字符串特征,系統會用來計算id的特征空間。連續特征會正則化到[0,1]區間,計算CDF的P(X≤x),分割成為n_q個部分。對于第i個,計算值為:(i-1)/(n_q - 1)。他們的邊界會在數據生成的時候就計算出來。
4.2 模型訓練 我們在實驗中用到的模型結構如圖F4所示。在訓練中,輸入層使用了訓練數據,vocabulary,一起生產了系數和稠密特征。wide部分包含用戶安裝的app和展示給用戶的app的交叉特征。對于deep部分來說,對于每個類別特征,都使用了一個32維的embedding vector來轉換為低維稠密特征。我們將所有的embedding vector得到的稠密特征連接起來,輸入到一個稠密的vector中到下一層,接近1200維度。之后,向量進入3個ReLU層,最后,進入LR中。 這個Wide & Deep模型訓練集合為5000億個樣本。每次有新的訓練數據,模型都需要重新訓練。然而,每次從頭開始算很消耗時間,影響線上模型更新。為了解決這個問題,我們實現了熱啟動,即,每次用上一個模型的embedding和線性模型的權重來初始化新模型。 在每次上線新模型之前,會dry run一下模型,來確保在線上實時流量中不會出現問題。我們通過經驗來驗證模型質量,與上一個模型做對比。
4.3 模型服務 在模型訓練和驗證后,就加載到線上服務器里。對于每次請求,服務器從召回系統獲取到一列app候選集,根據用戶特征來對每個app進行打分。然后,將app根據評分從高到低排序,按照此排序向用戶展示。這個評分是通過在Wide & Deep模型中,前向反饋計算得到的。 為了保證服務延遲在10ms以內,我們使用多線程優化了下,每次并行線程各跑一個小batch,而不是在一個預測評分中跑所有的候選app。
5 實驗結果 為了在真實推薦系統中評價Wide & Deep模型的有效性,我們上線了實驗并且評測了系統。主要在兩個方面:app獲取和服務性能。
5.1 app獲取 我們上線了3周的線上AB實驗。對于控制組,隨機選了1%的用戶,展示內容結果為之前的高度優化的wide-only的LR模型,其中包含了很多交叉特征。對于實驗組的1%的用戶,展示的是Wide & Deep模型使用同樣數據訓練得到的模型推薦的結果。如表1所示,在main landing page上,與控制組相比,Wide & Deep模型的app獲取率提高了3.9%。實驗結果還與另一個只用了deep模型的1%的用戶的結果對比,該deep模型使用了相同的特征和NN結構,而Wide & Deep比它提升了1%。 除了線上實現,我們也在線下holdout數據中測試了AUC。Wide & Deep在線下AUC中只有少許提升,但在線上實驗中卻提升很多。一個可能的原因是,線下數據中的展示和標簽label是固定的,然后,在線上系統中,可以通過模型的memorization和泛化,探索新的推薦item,并且從新用戶的反饋中繼續學習。
5.2 服務性能 對于大流量商業移動app store來說,高吞吐量和低延遲是一個巨大挑戰。我們的推薦系統在峰值時,每秒鐘對1千萬個app進行評分。單線程中,一個batch來對所有候選集評分耗時31ms。我們使用多線程技術,每個batch降低大小,成功將延遲降低到14ms,如表2所示。
6 相關工作 將包含交叉特征的wide線性模型與包含稠密embedding特診的深度NN模型結合起來的idea是由之前工作引發的思考,如,FM中,通過將兩個變量之間的關系向量化為兩個低維embedding vector的dot product。在本文中,我們使用NN模型,通過使用embedding vector而不是dot product來計算高度非線性聯系,擴展了模型的容量。 在語言模型中,將RNN與n-gram的最大熵模型結合,通過直接學習輸入和輸出之間的權重的方法已經被提出來過,用來顯著降低RNN的復雜度。在計算機視覺領域,deep residual learning被提出用來降低訓練深度模型的難度,通過跳過一層或多層來建立跨層的快捷連接來提高準確度。NN模型和圖模型一起結合,被用在圖像中的人類姿勢識別。在本文中,我們探索了在常見的具有稀疏輸入特征的推薦和排序系統中,通過稀疏特征和輸出unit之間的直接連接,使用前向神經網絡與線性模型進行結合訓練。 在推薦系統中,已經有人通過將對內容信息的深度學習和對評分矩陣的CF相結合,探索了協作深度學習。之前也有在對移動app推薦系統的實踐,如AppJoy中,針對用戶對app使用記錄來使用CF。與之前的基于CF的或基于內容的算法不同,我們在app推薦系統上,使用用戶和展示信息結合訓練了Wide & Deep模型。
7 結論 對于推薦系統而言,memorization和generalization都很重要。Wide線性模型可以通過交叉特征轉換來有效的記憶稀疏特征之間的關聯,而deep NN模型可以通過低維embedding來泛化出之前沒見過的特征之間的關系。我們推出了Wide & Deep模型框架,來結合二者的長處。我們實現了模型,并在Google Play上評測了模型結果。線上實驗結果表示,與wide-only和deep-only模型對比,Wide & Deep模型可以顯著提升app下載。
總結
以上是生活随笔為你收集整理的#论文 《Wide Deep Learning for Recommender System》翻译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的可变长参数
- 下一篇: #论文 《ImageNet Classi