一、前言
在計算廣告場景中,需要平衡和優化三個參與方——使用者、廣告主、平臺的關鍵指標,而預估點選率CTR(Click-through Rate)和轉化率CVR(Conversion Rate)是其中非常重要的一環,準確地預估CTR和CVR對於提高流量變現效率,提升廣告主ROI(Return on Investment),保證使用者體驗等都有重要的指導作用。
傳統的CTR/CVR預估,典型的機器學習方法包括人工特徵工程 + LR(Logistic Regression)[1]、GBDT(Gradient Boosting Decision Tree)[2] + LR、FM(Factorization Machine)[3]和FFM(Field-aware Factorization Machine)[4]等模型。相比於傳統機器學習方法,深度學習模型近幾年在多領域多工(影象識別、物體檢測、翻譯系統等)的突出表現,印證了神經網路的強大表達能力,以及端到端模型有效的特徵構造能力。同時各種開源深度學習框架層出不窮,美團集團資料平臺中心也迅速地搭建了GPU計算平臺,提供GPU叢集,支援TensorFlow、MXNet、Caffe等框架,提供資料預處理、模型訓練、離線預測、模型部署等功能,為集團各部門的策略演算法迭代提供了強有力的支援。
美團海量的使用者與商家資料,廣告複雜的場景下眾多的影響因素,為深度學習方法的應用落地提供了豐富的場景。本文將結合廣告特殊的業務場景,介紹美團搜尋廣告場景下深度學習的應用和探索。主要包括以下兩大部分:
- CTR/CVR預估由機器學習向深度學習遷移的模型探索
- CTR/CVR預估基於深度學習模型的線下訓練/線上預估的工程優化
二、從機器學習到深度學習的模型探索
2.1 場景與特徵
美團搜尋廣告業務囊括了關鍵詞搜尋、頻道篩選等業務,覆蓋了美食、休娛、酒店、麗人、結婚、親子等200多種應用場景,使用者需求具有多樣性。同時O2O模式下存在地理位置、時間等獨特的限制。 結合上述場景,我們抽取了以下幾大類特徵:
- 使用者特徵
- 人口屬性:使用者年齡,性別,職業等。
- 行為特徵:對商戶/商圈/品類的偏好(實時、歷史),外賣偏好,活躍度等。
- 建模特徵:基於使用者的行為序列建模產生的特徵等。
- 商戶特徵
- 屬性特徵:品類,城市,商圈,品牌,價格,促銷,星級,評論等。
- 統計特徵:不同維度/時間粒度的統計特徵等。
- 影象特徵:類別,建模特徵等。
- 業務特徵:酒店房型等。
- Query特徵
- 分詞,意圖,與商戶相似度,業務特徵等。
- 上下文特徵
- 時間,距離,地理位置,請求品類,競爭情況等。
- 廣告曝光位次。
結合美團多品類的業務特點及O2O模式獨特的需求,著重介紹幾個業務場景以及如何刻畫:
- 使用者的消費場景
- “附近”請求:美團和大眾點評App中,大部分使用者發起請求為“附近”請求,即尋找附近的美食、酒店、休閒娛樂場所等。因此給使用者返回就近的商戶可以起到事半功倍的效果。“請求到商戶的距離”特徵可以很好地刻畫這一需求。
- “指定區域(商圈)”請求:尋找指定區域的商戶,這個區域的屬性可作為該流量的資訊表徵。
- “位置”請求:使用者搜尋詞為某個位置,比如“五道口”,和指定區域類似,識別位置座標,計算商戶到該座標的距離。
- “家/公司”: 使用者部分的消費場所為“家” 或 “公司”,比如尋找“家”附近的美食,在“公司”附近點餐等,根據使用者畫像得到的使用者“家”和“公司”的位置來識別這種場景。
- 多品類
- 針對美食、酒店、休娛、麗人、結婚、親子等眾多品類的消費習慣以及服務方式,將資料拆分成三大部分,包括美食、酒店、綜合(休娛、麗人、結婚、親子等)。其中美食表達使用者的餐飲需求,酒店表達使用者的旅遊及住宿需求,綜合表達使用者的其他生活需求。
- 使用者的行為軌跡
- 實驗中發現使用者的實時行為對錶達使用者需求起到很重要的作用。比如使用者想找個餐館聚餐,先篩選了美食,發現附近有火鍋、韓餐、日料等店,大家對火鍋比較感興趣,又去搜尋特定火鍋等等。使用者點選過的商戶、品類、位置,以及行為序列等都對使用者下一刻的決策起到很大作用。
2.2 模型
搜尋廣告CTR/CVR預估經歷了從傳統機器學習模型到深度學習模型的過渡。下面先簡單介紹下傳統機器學習模型(GBDT、LR、FM & FFM)及應用,然後再詳細介紹在深度學習模型的迭代。
GBDT
GBDT又叫MART(Multiple Additive Regression Tree),是一種迭代的決策樹演算法。它由多棵決策樹組成,所有樹的結論累加起來作為最終答案。它能自動發現多種有區分性的特徵以及特徵組合,並省去了複雜的特徵預處理邏輯。Facebook實現GBDT + LR[5]的方案,並取得了一定的成果。
LR
LR可以視作單層單節點的“DNN”, 是一種寬而不深的結構,所有的特徵直接作用在最後的輸出結果上。模型優點是簡單、可控性好,但是效果的好壞直接取決於特徵工程的程度,需要非常精細的連續型、離散型、時間型等特徵處理及特徵組合。通常通過正則化等方式控制過擬合。
FM & FFM
FM可以看做帶特徵交叉的LR,如下圖所示:
從神經網路的角度考慮,可以看做下圖的簡單網路搭建方式:
模型覆蓋了LR的寬模型結構,同時也引入了交叉特徵,增加模型的非線性,提升模型容量,能捕捉更多的資訊,對於廣告CTR預估等複雜場景有更好的捕捉。
在使用DNN模型之前,搜尋廣告CTR預估使用了FFM模型,FFM模型中引入field概念,把( n )個特徵歸屬到( f )個field裡,得到( nf)個隱向量的二次項,擬合公式如下:
上式中,( f_j ) 表示第( j) 個特徵所屬的field。設定隱向量長度( k ),那麼相比於FM的( nk)個二次項引數,FFM有( nkf )個二次項引數,學習和表達能力也更強。
例如,在搜尋廣告場景中,假設將特徵劃分到8個Field,分別是使用者、廣告、Query、上下文、使用者-廣告、上下文-廣告、使用者-上下文及其他,相對於FM能更好地捕捉每個Field的資訊以及交叉資訊,每個特徵構建的隱向量長度8*( k ), 整個模型引數空間為8 ( k ) ( n ) +( n ) + 1。
Yu-Chin Juan實現了一個C++版的FFM模型工具包,但是該工具包只能在單機訓練,難以支援大規模的訓練資料及特徵集合;並且它省略了常數項和一次項,只包含了特徵交叉項,對於某些特徵的優化需求難以滿足,因此我們開發了基於PS-Lite的分散式FFM訓練工具(支援億級別樣本,千萬級別特徵,分鐘級完成訓練,目前已經在公司內部普遍使用),主要新增了以下新的特性:
- 支援FFM模型的分散式訓練。
- 支援一次項和常數項引數學習,支援部分特徵只學習一次項引數(不需要和其他特徵做交叉運算),例如廣告位次特徵等。擬合公式如下:
- 支援多種優化演算法。
從GBDT模型切到FFM模型,積累的效果如下所示,主要的提升來源於對大規模離散特徵的刻畫及使用更充分的訓練資料:
DNN
從上面的介紹大家可以看到,美團場景具有多樣性和很高的複雜度,而實驗表明從線性的LR到具備非線性交叉的FM,到具備Field資訊交叉的FFM,模型複雜度(模型容量)的提升,帶來的都是結果的提升。而LR和FM/FFM可以視作簡單的淺層神經網路模型,基於下面一些考慮,我們在搜尋廣告的場景下把CTR模型切換到深度學習神經網路模型:
- 通過改進模型結構,加入深度結構,利用端到端的結構挖掘高階非線性特徵,以及淺層模型無法捕捉的潛在模式。
- 對於某些ID類特別稀疏的特徵,可以在模型中學習到保持分佈關係的稠密表達(embedding)。
- 充分利用圖片和文字等在簡單模型中不好利用的資訊。
我們主要嘗試了以下網路結構和超參調優的實驗。
Wide & Deep
首先嚐試的是Google提出的經典模型Wide & Deep Model[6],模型包含Wide和Deep兩個部分,其中Wide部分可以很好地學習樣本中的高頻部分,在LR中使用到的特徵可以直接在這個部分使用,但對於沒有見過的ID類特徵,模型學習能力較差,同時合理的人工特徵工程對於這個部分的表達有幫助。Deep部分可以補充學習樣本中的長尾部分,同時提高模型的泛化能力。Wide和Deep部分在這個端到端的模型裡會聯合訓練。
在完成場景與特徵部分介紹的特徵工程後,我們基於Wide & Deep模型進行結構調整,搭建了以下網路:
在搜尋廣告的場景中,上圖的Part_1包含離散型特徵及部分連續型特徵離散化後的結果 (例如使用者ID、廣告ID、商圈ID、品類ID、GEO、各種統計類特徵離散化結果等等)。離散化方式主要採用等頻劃分或MDLP[7]。每個域構建自己的embedding向量 (缺失特徵和按照一定閾值過濾後的低頻特徵在這裡統一視作Rare特徵),得到特徵的Representation,然後通過Pooling層做取樣,並拼接在一起進行資訊融合。
右側的Part_2部分主要包含我們場景下的統計類特徵及部分其他途徑建模表示後輸入的特徵 (例如圖片特徵、文字特徵等),和Part_1的最後一層拼接在一起做資訊融合。
Part_3為多個全連線層,每個Layer後面連線啟用函式,例如ReLu, Tanh等。
右上的Part_4部分主要包含廣告曝光位次 (Position Bias) 及部分離散特徵,主要為了提高模型的記憶性,具有更強的刻畫能力。Wide和Deep部分結合,得到最終的模型:
深度學習模型在影象語音等資料上有顯著作用的原因之一是,我們在這類資料上不太方便產出能很好刻畫場景的特徵,人工特徵+傳統機器學習模型並不能學習出來全面合理的資料分佈表示,而深度學習end-to-end的方式,直接結合Label去學習如何從原始資料抽取合適的表達(representation)。但是在美團等電商的業務場景下,輸入的資料形態非常豐富,有很多業務資料有明確的物理含義,因此一部分人工特徵工程也是必要的,提前對資訊做一個合理的抽取表示,再通過神經網路學習進行更好的資訊融合和表達。
在美團搜尋廣告的場景下,使用者的實時行為有非常強的指代性,但是以原始形態直接送入神經網路,會損失掉很多資訊,因此我們對它進行了不同方式描述和表示,再送入神經網路之中進行資訊融合和學習。另一類很有作用的資訊是影象資訊,這部分資訊的一種處理方式是,可以通過end-to-end的方式,用卷積神經網路和DNN進行拼接做資訊融合,但是可能會有網路的複雜度過高,以及訓練的收斂速度等問題,也可以選擇用CNN預先抽取特徵,再進行資訊融合。
下面以這兩類資料特徵為例,介紹在Wide & Deep模型中的使用方式。
- 使用者實時行為
- 行為實體 使用者的實時行為包括點選商戶(C_P)、下單商戶(O_P)、搜尋(Q)、篩選品類(S)等。商戶的上層屬性包括品類(Type: C_Type, O_Type)、位置(Loc: C_Loc, O_Loc)等。
- Item Embedding 對使用者的行為實體構建embedding向量,然後進行Sum/Average/Weighted Pooling,和其他特徵拼接在一起。實驗發現,上層屬性實體(C_Type, O_Type, C_Loc, O_Loc)的表現很正向,離線效果有了很明顯的提升。但是C_P, O_P, Q, S這些實體因為過於稀疏,導致模型過擬合嚴重,離線效果變差。因此,我們做了兩方面的改進:
- 使用更充分的資料,單獨對使用者行為序列建模。例如LSTM模型,基於使用者當前的行為序列,來預測使用者下一時刻的行為,從中得到當前時刻的“Memory資訊”,作為對使用者的embedding表示;或Word2Vec模型,生成行為實體的embedding表示,Doc2Vec模型,得到使用者的embedding表示。實驗發現,將使用者的embedding表示加入到模型Part_2部分,特徵覆蓋率增加,離線效果有了明顯提升,而且由於模型引數空間增加很小,模型訓練的時間基本不變。
- 使用以上方法產生的行為實體embedding作為模型引數初始值,並在模型訓練過程中進行fine tuning。同時為了解決過擬合問題,對不同域的特徵設定不同的閾值過濾。
- 計數特徵 即對不同行為實體發生的頻次,它是對行為實體更上一層的抽象。
- Pattern特徵 使用者最近期的幾個行為實體序列(例如A-B-C)作為Pattern特徵,它表示了行為實體之間的順序關係,也更細粒度地描述了使用者的行為軌跡。
- 圖片
- 描述 商戶的頭圖在App商品展示中佔據著很重要的位置,而圖片也非常吸引使用者的注意力。
- 圖片分類特徵 使用VGG16、Inception V4等訓練圖片分類模型,提取圖片特徵,然後加入到CTR模型中。
- E2E model 將Wide & Deep模型和圖片分類模型結合起來,訓練端到端的網路。
從FFM模型切到Wide & Deep模型,積累到目前的效果如下所示,主要的提升來源於模型的非線性表達及對更多特徵的更充分刻畫。
DeepFM
華為諾亞方舟團隊結合FM相比LR的特徵交叉的功能,將Wide & Deep部分的LR部分替換成FM來避免人工特徵工程,於是有了DeepFM[8],網路結構如下圖所示。
比起Wide & Deep的LR部分,DeepFM採用FM作為Wide部分的輸出,在訓練過程中共享了對不同Field特徵的embedding資訊。
我們在部分業務上嘗試了DeepFM模型,並進行了超參的重新調優,取得了一定的效果。其他業務也在嘗試中。具體效果如下:
Multi-Task
廣告預估場景中存在多個訓練任務,比如CTR、CVR、交易額等。既考慮到多個任務之間的聯絡,又考慮到任務之間的差別,我們利用Multi-Task Learning的思想,同時預估點選率、下單率,模型結構如下圖所示:
- 由於CTR、CVR兩個任務非常類似,所以採用“Hard Parameter Sharing”的結構,完全共享網路層的引數,只在輸出層區分不同的任務。
- 由於下單行為受展現位次的影響非常小,所以下單率的輸出層不考慮位次偏差的因素。
- 輸出層在不同任務上單獨增加所需特徵。
- 離線訓練和線上預估流程減半,效能提升;效果上相對於單模型,效果基本持平:
近期,阿里發表論文“Entire Space Multi-Task Model”[9],提出目前CVR預估主要存在Sample Selection Bias(SSB)和Data Sparsity(DS)兩個問題,並提出在全域性空間建模(以pCTCVR和pCTR來優化CVR)和特徵Transform的方法來解決。具體的Loss Function是:
網路結構是:
超參調優
除了以上對網路結構的嘗試,我們也進行了多組超參的調優。神經網路最常用的超參設定有:隱層層數及節點數、學習率、正則化、Dropout Ratio、優化器、啟用函式、Batch Normalization、Batch Size等。不同的引數對神經網路的影響不同,神經網路常見的一些問題也可以通過超參的設定來解決:
- 過擬合
- 網路寬度深度適當調小,正則化引數適當調大,Dropout Ratio適當調大等。
- 欠擬合
- 網路寬度深度適當調大,正則化引數調小,學習率減小等。
- 梯度消失/爆炸問題
- 合適的啟用函式,新增Batch Normalization,網路寬度深度變小等。
- 區域性最優解
- 調大Learning Rate,合適的優化器,減小Batch Size等。
- Covariate Shift
- 增加Batch Normalization,網路寬度深度變小等。
影響神經網路的超引數非常多,神經網路調參也是一件非常重要的事情。工業界比較實用的調參方法包括:
- 網格搜尋/Grid Search:這是在機器學習模型調參時最常用到的方法,對每個超引數都敲定幾個要嘗試的候選值,形成一個網格,把所有超引數網格中的組合遍歷一下嘗試效果。簡單暴力,如果能全部遍歷的話,結果比較可靠。但是時間開銷比較大,神經網路的場景下一般嘗試不了太多的引數組合。
- 隨機搜尋/Random Search:Bengio在“Random Search for Hyper-Parameter Optimization”[10]中指出,Random Search比Grid Search更有效。實際操作的時候,可以先用Grid Search的方法,得到所有候選引數,然後每次從中隨機選擇進行訓練。這種方式的優點是因為取樣,時間開銷變小,但另一方面,也有可能會錯過較優的超引數組合。
- 分階段調參:先進行初步範圍搜尋,然後根據好結果出現的地方,再縮小範圍進行更精細的搜尋。或者根據經驗值固定住其他的超引數,有針對地實驗其中一個超引數,逐次迭代直至完成所有超引數的選擇。這個方式的優點是可以在優先嚐試次數中,拿到效果較好的結果。
我們在實際調參過程中,使用的是第3種方式,在根據經驗引數初始化超引數之後,按照隱層大小->學習率->Batch Size->Drop out/L1/L2的順序進行引數調優。
在搜尋廣告資料集上,不同超參的實驗結果如下:
2.3 小結
搜尋廣告排序模型經歷了從GBDT --> FFM --> DNN的迭代,同時構建了更加完善的特徵體系,線下AUC累積提升13%+,線上CTR累積提升15%+。
三、基於深度學習模型的工程優化
3.1 線下訓練
TensorFlow程式如果單機執行中出現效能問題,一般會有以下幾種問題:
- 複雜的預處理邏輯耦合在訓練過程中。
- 選擇正確的IO方式。
剝離預處理流程
在模型的試驗階段,為了快速試驗,資料預處理邏輯與模型訓練部分都耦合在一起,而資料預處理包含大量IO型別操作,所以很適合用HadoopMR或者Spark處理。具體流程如下:
-
在預處理階段將查表、join字典等操作都做完,並且將查詢結果與原始資料merge在一起。
-
將libfm格式的資料轉為易於TensorFlow操作的SparseTensor方式:
-
將原始資料轉換為TensorFlow Record。
選擇正確的IO方式
TensorFlow讀取資料的方式主要有2種,一般選擇錯誤會造成效能問題,兩種方式為:
- Feed_dict 通過feed_dict將資料餵給session.run函式,這種方式的好處是思路很清晰,易於理解。缺點是效能差,效能差的原因是feed給session的資料需要在session.run之前準備好,如果之前這個資料沒有進入記憶體,那麼就需要等待資料進入記憶體,而在實際場景中,這不僅僅是等待資料從磁碟或者網路進入記憶體的事情,還可能包括很多前期預處理的工作也在這裡做,所以相當於一個序列過程。而資料進入記憶體後,還要序列的呼叫PyArrayToTF_Tensor,將其copy成tensorflow的tensorValue。此時,GPU視訊記憶體處於等待狀態,同時,由於tf的Graph中的input為空,所以CPU也處於等待狀態,無法運算。
- RecordReader 這種方式是tf在Graph中將讀取資料這個操作看做圖中一個operation節點,減少了一個copy的過程。同時,在tf中還有batch與threads的概念,可以非同步的讀取資料,保證在GPU或者CPU進行計算的時候,讀取資料這個操作也可以多執行緒非同步執行。靜態圖中各個節點間的阻塞:在一個複雜的DAG計算圖中,如果有一個點計算比較慢時,會造成阻塞,下游節點不得不等待。此時,首先要考慮的問題是圖中節點引數所儲存的位置是否正確。比如如果某個計算節點是在GPU上運算,那麼如果這個節點所有依賴的variable物件宣告在CPU上,那麼就要做一次memcpy,將其從記憶體中copy到GPU上。因為GPU計算的很快,所以大部分時間花在拷貝上了。總之,如果網路模型比較簡單,那麼這種操作就會非常致命;如果網路結構複雜,比如網路層次非常深,那麼這個問題倒不是太大的問題了。
在這個Case中,因為需要提升吞吐,而不僅僅是在試驗階段。所以需要用RecordReader方式處理資料。
優化過程
- 將整體程式中的預處理部分從程式碼中去除,直接用Map-Reduce批處理去做(因為批處理可以將資料分散去做,所以效能非常好,2億的資料分散到4900多個map中,大概處理了15分鐘左右)。
- MR輸出為TensorFlow Record格式,避免使用Feed_dict。
- 資料預讀,也就是用多程式的方式,將HDFS上預處理好的資料拉取到本地磁碟(使用joblib庫+shell將HDFS資料用多程式的方式拉取到本地,基本可以打滿節點頻寬2.4GB/s,所以,拉取資料也可以在10分鐘內完成)。
- 程式通過TensorFlow提供的TFrecordReader的方式讀取本地磁碟上的資料,這部分的效能提升是最為明顯的。原有的程式處理資料的效能大概是1000條/秒,而通過TFrecordReader讀取資料並且處理,效能大概是18000條/秒,效能大概提升了18倍。
- 由於每次run的時候計算都要等待TFrecordReader讀出資料,而沒用利用batch的方式。如果用多執行緒batch可以在計算期間非同步讀取資料。在TensorFlow所有例子中都是使用TFRecordReader的read介面去讀取資料,再用batch將資料多執行緒抓過來。但是,其實這樣做加速很慢。需要使用TFRecordReader的read_up_to的方法配合batch的equeue_many=True的引數,才可以做到最大的加速比。使用tf.train.batch的API後,效能提升了38倍。
此時,效能已經基本達到我們的預期了。例如整體資料量是2億,按照以前的效能計算1000條/秒,大概需要執行55個小時。而現在大概需要執行87分鐘,再加上預處理(15分鐘)與預拉取資料(10分鐘)的時間,在不增加任何計算資源的情況下大概需要2個小時以內。而如果是並行處理,則可以在分鐘級完成訓練。
3.2 線上預估
線上流量是模型效果的試金石。離線訓練好的模型只有參與到線上真實流量預估,才能發揮其價值。在演化的過程中,我們開發了一套穩定可靠的線上預估體系,提高了模型迭代的效率。
模型同步
我們開發了一個高可用的同步元件:使用者只需要提供線下訓練好的模型的HDFS路徑,該元件會自動同步到線上服務機器上。該元件基於HTTPFS實現,它是美團離線計算組提供的HDFS的HTTP方式訪問介面。同步過程如下:
- 同步前,檢查模型md5檔案,只有該檔案更新了,才需要同步。
- 同步時,隨機連結HTTPFS機器並限制下載速度。
- 同步後,校驗模型檔案md5值並備份舊模型。
同步過程中,如果發生錯誤或者超時,都會觸發報警並重試。依賴這一元件,我們實現了在2min內可靠的將模型檔案同步到線上。
模型計算
當前我們線上有兩套並行的預估計算服務。
- 基於TF Serving的模型服務
TF Serving是TensorFlow官方提供的一套用於線上實時預估的框架。它的突出優點是:和TensorFlow無縫連結,具有很好的擴充套件性。使用TF serving可以快速支援RNN、LSTM、GAN等多種網路結構,而不需要額外開發程式碼。這非常有利於我們模型快速實驗和迭代。
使用這種方式,線上服務需要將特徵傳送給TF Serving,這不可避免引入了網路IO,給頻寬和預估時延帶來壓力。我們嘗試了以下優化,效果顯著。
- 併發請求。一個請求會召回很多符合條件的廣告。在客戶端多個廣告併發請求TF Serving,可以有效降低整體預估時延。
- 特徵ID化。通過將字串型別的特徵名雜湊到64位整型空間,可以有效減少傳輸的資料量,降低使用的頻寬。
TF Serving服務端的效能差強人意。在典型的五層網路(512*256*256*256*128)下,單個廣告的預估時延約4800μs,具體見下圖:
- 定製的模型計算實現
由於廣告線上服務需要極高的效能,對於主流深度學習模型,我們也定製開發了具體計算實現。這種方式可以針對性的優化,並避免TF Serving不必要的特徵轉換和執行緒同步,從而提高服務效能。
例如全連線DNN模型中使用Relu作為啟用函式時,我們可以使用滾動陣列、剪枝、暫存器和CPU Cache等優化技巧,具體如下:
// 滾動陣列
int nextLayerIndex = currentLayerIndex ^ 1 ;
System.arraycopy(bias, bOff, data[nextLayerIndex], 0, nextLayerSize);
for (int i = 0; i < currentLayerSize; i ++) {
float value = data[currentLayerIndex][i];
// 剪枝
if (value > 0.0) {
// 暫存器
int index = wOff + i * nextLayerSize;
// CPU 快取友好
for (int j = 0; j < nextLayerSize; j++) {
data[nextLayerIndex][j] += value * weights[index + j];
}
}
}
for (int i = 0; i < nextLayerSize; k++) {
data[nextArrayIndex][i] = ReLu(data[nextArrayIndex][i]);
}
arrayIndex = nextArrayIndex;
複製程式碼
優化後的單個廣告預估時延約650μs,見下圖:
綜上,當前線上預估採取“兩條腿走路”的策略。利用TF Serving快速實驗新的模型結構,以保證迭代效率;一旦模型成熟切換主流量,我們會開發定製實現,以保證線上效能。
模型效果
藉助於我們的分層實驗平臺,我們可以方便的分配流量,完成模型的小流量實驗上線。該分層實驗平臺同時提供了分鐘粒度的小流量實時效果資料,便於模型評估和效果監控。
四、總結與展望
經過一段時間的摸索與實踐,搜尋廣告業務在深度學習模型排序上有了一定的成果與積累。接下來,我們將繼續在特徵、模型、工程角度迭代優化。特徵上,更深度挖掘使用者意圖,刻畫上下文場景,並結合DNN模型強大的表達能力充分發揮特徵的作用。模型上,探索新的網路結構,並結合CNN、RNN、Attention機制等發揮深度學習模型的優勢。持續跟進業界動態,並結合實際場景,應用到業務中。工程上,跟進TensorFlow的新特性,並對目前實際應用中遇到的問題針對性優化,以達到效能與效果的提升。我們在持續探索中。
參考文獻
[1] Chapelle, O., Manavoglu, E., & Rosales, R. (2015). Simple and scalable response prediction for display advertising. ACM Transactions on Intelligent Systems and Technology (TIST), 5(4), 61.
[2] Friedman, J. H. (2001). Greedy function approximation: a gradient boosting machine. Annals of statistics, 1189-1232.
[3] Rendle, S. (2010, December). Factorization machines. In Data Mining (ICDM), 2010 IEEE 10th International Conference on (pp. 995-1000). IEEE.
[4] Juan, Y., Zhuang, Y., Chin, W. S., & Lin, C. J. (2016, September). Field-aware factorization machines for CTR prediction. In Proceedings of the 10th ACM Conference on Recommender Systems (pp. 43-50). ACM.
[5] He, X., Pan, J., Jin, O., Xu, T., Liu, B., Xu, T., ... & Candela, J. Q. (2014, August). Practical lessons from predicting clicks on ads at facebook. In Proceedings of the Eighth International Workshop on Data Mining for Online Advertising (pp. 1-9). ACM.
[6] Cheng, H. T., Koc, L., Harmsen, J., Shaked, T., Chandra, T., Aradhye, H., ... & Anil, R. (2016, September). Wide & deep learning for recommender systems. In Proceedings of the 1st Workshop on Deep Learning for Recommender Systems (pp. 7-10). ACM.
[7] Dougherty, J., Kohavi, R., & Sahami, M. (1995). Supervised and unsupervised discretization of continuous features. In Machine Learning Proceedings 1995 (pp. 194-202).
[8] Guo, H., Tang, R., Ye, Y., Li, Z., & He, X. (2017). Deepfm: A factorization-machine based neural network for CTR prediction. arXiv preprint arXiv:1703.04247.
[9] Ma, X., Zhao, L., Huang, G., Wang, Z., Hu, Z., Zhu, X., & Gai, K. (2018). Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate. arXiv preprint arXiv:1804.07931.
[10] Bergstra, J., & Bengio, Y. (2012). Random search for hyper-parameter optimization. Journal of Machine Learning Research, 13(Feb), 281-305.
作者簡介
薛歡,2016年3月加入美團,主要從事搜尋廣告排序模型相關的工作。 姚強,2016年4月加入美團,主要從事搜尋廣告召回、機制與排序等相關演算法研究應用工作。 玉林,2015年5月加入美團,主要從事搜尋廣告排序相關的工程優化工作。 王新,2017年4月加入美團,主要從事GPU叢集管理與深度學習工程優化的工作。
招聘
美團廣告平臺全面負責美團到店餐飲、到店綜合(結婚、麗人、休閒娛樂、學習培訓、親子、裝潢)、酒店旅遊的商業變現。搜尋廣告基於數億使用者、數百萬商家和數千萬訂單的真實資料做挖掘,在變現的同時確保使用者體驗和商家利益。歡迎有意向的同學加入搜尋廣告演算法組。簡歷請投遞至:leijun#meituan.com 如果對我們團隊感興趣,可以關注我們的專欄。