除了LR,FM(FFM)方法,CTR預測還有那些方法,應用較為廣泛?

最近在看一些計算廣告學方法,並重複一些論文的結果,看到一些相對較新的方法如PNN(Product-based Neural Networks)和FNN(Factorization machine supported Neural Networks)。但是在業界還沒有聽到廣泛應用的消息。不知道除了LR,FM(FFM)方法,CTR預測還有那些方法,應用較為廣泛?


選擇還蠻多的,

LR (OWLQN, FTRL) 、FM、 Xgboost算是老三樣了;

小眾的有微軟的bayesian LR或bayesian MF,以及Yahoo的論文介紹的級聯統計樹模型;

新穎的例如DNN、FFM、deepFM/FNN/PNN、widedeep、deep cross network、deep interest network


在機器學習里,除了深度學習和樹模型 (GBDT, RF) 之外,如何高效地處理高維稀疏數據也是非常重要的課題,Sparse LR, FM, FFM 這些演算法被廣泛運用在實際生產和kaggle比賽中。現有的開源軟體例如 liblinear, libfm, libffm 都只能針對特定的演算法,並且可擴展性、靈活性、易用性都不夠友好。基於此,我在博士期間開發了 xLearn,一款專門針對大規模稀疏數據的機器學習庫,曾在之前 NIPS 上做過展示。經過打磨,現開源 https://github.com/aksnzhy/xlearn。我們的 vision 是將 xLearn 打造成和 xgboost,MXNet一樣的工業事實標準。相比於已有的軟體,xLearn的優勢主要有(1)通用性好,我們用統一的架構將主流的演算法(lr, fm, ffm 等)全部囊括,用戶不用再切換於不同軟體之間。(2)性能好。xLearn由高性能c++開發,提供 cache-aware 和 lock-free learning,並且經過手工 SSE/AVX 指令優化。 在單機MacBook Pro上測試 xLearn 可以比 libfm 快13倍,比 libffm 和 liblinear 快5倍(基於Criteo CTR數據 bechmark)。(3)易用性和靈活性,xLearn 提供簡單的 python 介面,並且集合了機器學習比賽中許多有用的功能,例如:cross-validation,early-stopping 等。除此之外,用戶可以靈活選擇優化演算法(例如,SGD,AdaGrad, FTRL 等)(4) 可擴展性好。xLearn 提供 out-of-core 計算,利用外存計算可以在單機處理 1TB 數據。除此之外,xLearn 也提供分散式訓練功能。這裡我希望更多的朋友加入這個開源項目!


謝邀。

CTR模型歷來是各大互聯網公司引領潮流,下面從新到舊列一下影響力比較大的CTR模型相關文章。

  • 阿里 2017年6月 Deep Interest Network for Click-Through Rate Prediction 阿里媽媽蓋坤團隊基於深度興趣網路的文章。
  • 阿里 2017年4月發表,但阿里內部應該用了很長時間了 Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction 阿里蓋坤團隊基於mixed logistic regression的CTR模型,核心思想是聚類LR。
  • 微軟 2016年8月 Deep Crossing: Web-Scale Modeling without Manually Crafted Combinatorial Features 利用深度網路進行自動的特徵組合
  • Google 2016年6月 Wide Deep Learning for Recommender Systems Google用於app推薦的CTR模型,利用模型的Wide的部分學習大量的關聯性的簡單特徵,利用Deep部分構建深度網路進行特徵組合。非常實用也是非常有效的一個模型。
  • Facebook 2014年8月 Practical Lessons from Predicting Clicks on Ads at Facebook Facebook的GBDT+LR,已經是大家熟知非常經典的CTR模型。

其他就是題主說的傳統的CTR模型了,LR,FM,FFM,GBDT等等。

使用各種深度學習網路構建CTR模型肯定是一個趨勢,但由於大廠的CTR模型訓練的數據量巨大,往往不適用太過複雜的網路,所以在看CTR模型相關文章的時候看看工程部分的實現思路還是非常重要的。

文章要是找不到的話可以去我的計算廣告paper列表裡面找找,幫大家梳理了一下。 wzhe06/Ad-papers


之前在小組分享的時候有讀過一些paper,寫了篇文章放在專欄上,文章地址:常見計算廣告點擊率預估演算法總結,相信會對你有一定的作用

=======================================================

前言

談到CTR,都多多少少有些了解,尤其在互聯網廣告這塊,簡而言之,就是給某個網路服務使用者推送一個廣告,該廣告被點擊的概率,這個問題難度簡單到街邊算命隨口告訴你今天適不適合娶親、適不適合搬遷一樣,也可以複雜到拿到各種諸如龜殼、銅錢等等傢伙事,在沐浴更衣、凈手熅香後,最後一通預測,發現完全扯淡,被人暴打一頓,更有甚者,在以前關係國家危亡、異或爭國本這種情況時,也通常會算上一卦,國家的興衰、。其實CTR和這個一樣,以前經常和小夥伴吐槽,其實做機器學習、無論是推薦還是計算廣告,都和以前的算命先生沒什麼差別,做的好的官至國師,不好的吃不了飽飯也是有的。要想把你CTR模型做的好好的,必須要先了解那些前輩們都是怎麼玩的。

CTR架構

一個典型的CTR流程如下圖所示:

如上圖,主要包括兩大部分:離線部分、在線部分,其中離線部分目標主要是訓練出可用模型,而在線部分則考慮模型上線後,性能可能隨時間而出現下降,弱出現這種情況,可選擇使用Online-Learning來在線更新模型::

  • · 離線部分:
    • 數據收集:主要收集和業務相關的數據,通常會有專門的同事在app位置進行埋點,拿到業務數據;
    • 預處理:對埋點拿到的業務數據進行去臟去重;
    • 構造數據集:經過預處理的業務數據,構造數據集,在切分訓練、測試、驗證集時應該合理根據業務邏輯來進行切分;
    • 特徵工程:對原始數據進行基本的特徵處理,包括去除相關性大的特徵,離散變數one-hot,連續特徵離散化等等;
    • 模型選擇:選擇合理的機器學習模型來完成相應工作,原則是先從簡入深,先找到baseline,然後逐步優化;
    • 超參選擇:利用gridsearch、randomsearch或者hyperopt來進行超參選擇,選擇在離線數據集中性能最好的超參組合;
    • 在線A/B Test:選擇優化過後的模型和原先模型(如baseline)進行A/B Test,若性能有提升則替換原先模型;
  • 在線部分
    • Cache Logic:設定簡單過濾規則,過濾異常數據;
    • 模型更新:當Cache Logic 收集到合適大小數據時,對模型進行pretrain+finetuning,若在測試集上比原始模型性能高,則更新model server的模型參數;
  • Model Server:接受數據請求,返回預測結果;

Logistic Regression

最簡單的模型也應該是工業界應用最廣的方法,Logistic

Regression演算法簡單易於調參,屬於線性模型,原理如下圖:

將CTR模型建模為一個分類問題,利用LR預測用戶點擊的概率; 通常我們只需要離線收集好數據樣本構造數據集,選擇好合適的特徵空間,離線訓練好模型,測試在離線數據集上的性能之後,即可上線,也可以適應數據分布隨時間突變嚴重的情況,採用online-learning的策略來對模型進行相對頻繁的更新,模型的簡單能夠保證這部分的需求能夠得到保障。

PLOY2

LR優點是簡單高效,缺點也很明顯,它太簡單,視特徵空間內特徵之間彼此獨立,沒有任何交叉或者組合關係,這與實際不符合,比如在預測是否會點擊某件t恤是否會點擊,如果在夏天可能大部分地區的用戶都會點擊,但是綜合季節比如在秋天,北方城市可能完全不需要,所以這是從數據特徵維度不同特徵之間才能體現出來的。因此,必須複雜到能夠建模非線性關係才能夠比較準確地建模複雜的內在關係,而PLOY2就是通過特徵的二項式組合來建模這類特徵的複雜的內在關係,二項式部分如下圖公式:

然而理想是美好的,現實卻是殘酷的,PLOY2有一個明顯的問題,就是在實際場景中,大部分特徵都是稀疏的,即大部分特徵值為0,對這些稀疏的特徵做二項式組合,會發現最後大部分特徵值都是0,而在梯度更新時,當大部分feature為0時,其實梯度並不更新,所以PLOY2的方法在實際場景中並不能比較好地解決這類特徵組合來建模更複雜線性關係的問題。

Factorization Machine

上面PLOY2雖然理論上能夠建模二項式關係,但是在實際場景下稀疏數據時,無法使用,而FM就是為了解決這裡PLOY2的短板的,FM的基本原理是將這些二項式矩陣做矩陣分解,將高維稀疏的特徵向量映射到低維連續向量空間,然後根據內積表示二項式特徵關係:=

複雜度為$O(kn^2)$,作者提出了一種簡化的演算法:

將複雜度簡化為$O(kn)$ 然後就是SGD來更新模型參數,使模型收斂(這裡還有很多其他替代SGD的方法,在FFM中有提到):

訓練時間複雜度也是$O(kn)$,也就是線性時間,FM通過對二項式稀疏進行低維連續空間的轉換,能夠有效地解決PLOY2中存在的二次項係數在大規模係數數據下不更新的問題,另外由於訓練預測複雜度均為線性,PLOY2+SVM這樣邏輯下由於要計算多項式核,複雜度是n^2,由於FM的這幾個特徵,在實際場景中,FM也大規模的應用在CTR中,尤其是在數據極其係數的場景下,FM效果相對於其他演算法有很明星的改善。

Field-aware FM

FMM全程是 Field-aware

FactorizationMachine,相對於FM增加了Field信息,每個特徵屬於一個field,舉個例子:

而相對於FM,只有Feature_index相同個數的低維連續表示,而FFM則不同,每一個feature對不同的field有不同的表示,所以有#Field_index*#Feature_index個不同的表示:

通常由於每個低維隱變數表示只學習特定field的表示,所以FFM的隱變數長度相對於FM的隱變數維度要小的多。FFM的優化問題相對其比較簡單,可以看看FFM這篇paper,裡面比較詳細地描述優化過程,還有相關的偽代碼 https://www.andrew.cmu.edu/user/yongzhua/conferences/ffm.pdf。

FNN

從12年在ImageNet上深度學習超過經典模型之後,在計算機視覺、語音、NLP都有很多相關的工作,而在CTR上,深度學習的建模能力也有一些應用,FNN和SNN就是其中的一些嘗試,來源於DeepLearning over Multi-field Categorical Data – A Case Study on User ResponsePrediction,這裡稍微描述下相關的做法:

網路底層由FM來進行參數初始化,W的元素由FM中的低維連續空間向量表示來做初始化:

而構成W的低維連續空間向量表示預先由FM在數據集 上生成,模型在訓練過程中,會通過BP來更新FM層參數,其他步驟和常見的MLP沒有什麼區別,這裡重點就是底層如何介入FM層參數的問題;

CCPM

CCPM利用卷積網路來做點擊率預測,看了文章,沒有太明白其中的所以然,貼下網路結構的圖吧:

有弄清楚這篇文章的小夥伴可以討論下。

PNN

PNN主要是在深度學習網路中增加了一個inner/outer

product layer,用來建模特徵之前的關係,如下圖,Product layer部分Z是weight*feature,P部分weight*I(feature_i,feature_j)用來建模二項式關係:

PNN按product層的功能分為inner product

layer和outer product layer,區別如下:

和FM類似,構造好網路之後,對輸入數據做embedding處理之後得到低維的連續向量表示,經過任意兩個feature的進行inner product or

outer product(1也為feature的一部分,所以可以建模線性關係),這裡很容易發現,這部分特徵大小會變大很多(二次項數量級),尤其是稀疏空間,和PLOY2遇到的問題類似,變得很難訓練,受FM啟發,可以把這個大矩陣轉換矩陣分解為小矩陣和它的轉置相乘,表徵到低維度連續向量空間,來減少模型複雜度:

DeepFM

DeepFM更有意思的地方是WDL和FM結合了,其實就是把PNN和WDL結合了,PNN即將FM用神經網路的方式構造了一遍,作為wide的補充,原始的Wide and Deep,Wide的部分只是LR,構造線性關係,Deep部分建模更高階的關係,所以在Wide and Deep中還需要做一些特徵的東西,如Cross Column的工作,而我們知道FM是可以建模二階關係達到Cross column的效果,DeepFM就是把FM和NN結合,無需再對特徵做諸如Cross Column的工作了,這個是我感覺最吸引人的地方,其實FM的部分感覺就是PNN的一次描述,這裡只描述下結構圖,PNN的部分前面都描述, FM部分:

Deep部分:

DeepFM相對於FNN、PNN,能夠利用其Deep部分建模更高階信息(二階以上),而相對於Wide and Deep能夠減少特徵工程的部分工作,wide部分類似FM建模一、二階特徵間關係, 算是NN和FM的一個更完美的結合方向,另外不同的是如下圖,DeepFM的wide和deep部分共享embedding向量空間,wide和deep均可以更新embedding部分,雖說wide部分純是PNN的工作,但感覺還是蠻有意思的。

其他的一些方法

  • GBDT+LR:Facebook提出利用GBDT探索海量特徵空間的特徵組合,減少特徵工程工作量,性能很好;
  • MLR:阿里媽媽前端時間提出的一種增強LR模型,將region的劃分考慮進去來建模非線性關係,感覺類似於深度學習的Attention機制,據說在阿里媽媽相關業務提升很多;

總結

前面討論了一些CTR常見的方法,重點介紹了Factorization

Machine及其變種Field-Aware Factorization Machine,還有和深度學習的結合,個人感覺PNN的邏輯比較有意思,完全使用神經網路的思維模型重塑了FM,為後面DeepFM擴展wide and deep的工作打下基礎,減少了wide and deep中需要的一些基本的特徵工程工作(wide部分二次項工作),上面只是涉及到模型的演算法部分,在實際中可以去探討,並不能說明一定性能就好,另外由於架構的限制,綜合考慮其他方面的因素,如請求時間、模型複雜度,也是最終是否採用相關演算法的考慮因素,各位對此有興趣討論的小夥伴,歡迎回復討論。


CTR預估在機器學習/深度學習里其實只是個非常非常窄的方向,從學術角度看,就是個二分類問題罷了,但在互聯網廣告業中,卻是名副其實的「顯學」,因為牽涉到千億美元的收入規模。也正因為涉及收入,比較敏感,每家公司都會有一些秘不示人的秘訣。

但整體趨勢如@王喆 所說,各大公司都在往DNN走。谷歌雖然2013年出了篇用FTRL做CTR的論文,但2015年我和TensorFlow的一位工程師交流,他說已經有很多廣告模型遷到了TensorFlow上,用的當然是DNN。百度13年就已經在用DNN做CTR預估,後續做過多次升級,最終的方案應該和WideDeep差不多。阿里的深度興趣網路應該也和WideDeep比較接近,可以說WideDeep目前就是state-of-the-art。

介紹一下我們的一些工作,雖說算不上應用廣泛,但這些工作的效果在京東這樣一個體量巨大的電商平台上得到了充分驗證,應該對大部分人都有一定參考價值。

我們的點擊率預估模型是一個非常複雜的深度神經網路,和WideDeep不同的地方在於,我們還引入了CNN(如inception)和RNN,嘗試從用戶視覺的角度來反映圖片/文字等信息對CTR的影響,最終的效果也比較突出。具體方法可以參考我們的這篇文章:Telepath: Understanding Users from a Human Vision Perspective in Large-Scale Recommender Systems ,已被AAAI18接收。

我們也在做一些跳出「CTR預估」這個框架的嘗試,比如說,除了排序之外,CTR預估還廣泛用於計算RTB出價,這塊我們用深度強化學習直接給出出價,來代替點擊率預估,最終效果也很醒目,具體方法可以參考我們的這篇文章:LADDER: A Human-Level Bidding Agent for Large-Scale Real-Time Online Auctions。

總的來說,雖然方向偏窄,大公司還是在這塊投入了非常多的資源,技術也算得上日新月異,還算是個比較有趣而且有前途的方向。


湊巧寫過兩篇文章:

從ctr預估問題看看f(x)設計—LR篇

從ctr預估問題看看f(x)設計—DNN篇


前面已經有人回答的很好了,這裡從兩條線補充一些近期工作,細節請參考具體論文。

一、基於傳統思路改進

1、高階FM,引入比如3階特徵交叉,high-order FM沒有普及主要還是因為複雜度偏高,工業界實際使用會比較麻煩。看一些實驗分析,效果也提升有限。去年nips上的文章處理這個[1607.07195] Higher-Order Factorization Machines

2、Attentional FM,賦予不同交叉項不同的權重,這個是今年ijcai的文章提的Learning the Weight of Feature Interactions via Attention Networks

二、結合深度學習的思路

這方面工作主要是想同時利用低階和高階交叉的效果,大體思路是低階交叉通過fm,高階交叉主要通過dnn。去年就已經有了題主提到的FNNPNNdeep wide(g廠),deep crossing(ms)。今年湧現了不少工作,其中DeepFM和DCN是基於deep wide框架,然後在wide部分做了改進。

1、DeepFM(A Factorization-Machine based Neural Network for CTR Prediction),wide部分使用FM,二階交叉,不必多說。該工作的作者也提了個HNN(http://pdfs.semanticscholar.org/915e/1fb30536fdb3814d5963244bbde5beaa0707.pdf),思路挺好,中間層也直接影響最終的輸出層,不過看實驗效果一般。

2、DCN([1708.05123] Deep Cross Network for Ad Click Predictions),wide部分通過K層來實現K+1階交叉。deep部分雖然能捕捉高階交叉,但是不夠全面,所以使用wide部分來實現詳盡的特徵交叉。

3、Neural FM([1708.05027] Neural Factorization Machines for Sparse Predictive Analytics),特徵二階交叉之後再來個mlp。八卦下看作者xiangnan he的主頁,之前和Rendle在g廠合作過。


數據規模小,你怎樣折騰都是可以的,無所謂廣泛不廣泛,只要你單機能load,什麼模型不能訓練,無非最終看你的特徵工程、數據清洗、參數設置等一些細節了。

數據量大到一定規模,就會發現離散LR是性價比最高的一個選擇。DNN自然也是一個不錯的選擇,但這個對於計算資源,無論是線上線下都是不可忽視的一個方面。


比如應用GBDT進行特徵轉換,最終還是加入到LR模型中去

LR的一些求解演算法,如FTRL等

另外PNN和FNN在工業界也已經有採用的了,而且效果確實提升比較明顯。


GBRT,DNN,deep and wide


DNN的各種模型,bat京東,美團等都有在使用


推薦閱讀:

廣告點擊率模型中,LR, GBDT+LR, FM, DNN等模型的優點和缺點?實際效果如何?
為什麼FTRL比FOBOS更容易獲得稀疏解?

TAG:機器學習 | 計算機技術 | 計算廣告學 |