http://blog.itpub.net/31542492/viewspace-2156223/web
AI(人工智能)技術已經普遍應用於美團的衆多業務,從美團App到大衆點評App,從外賣到打車出行,從旅遊到婚慶親子,美團數百名最優秀的算法工程師正致力於將AI技術應用於搜索、推薦、廣告、風控、智能調度、語音識別、機器人、無人配送等多個領域,幫助美團3.2億消費者和400多萬商戶改善服務和體驗,幫你們吃得更好,生活更好。算法
基於AI技術,美團搭建了世界上規模最大,複雜度最高的多人、多點實時智能配送調度系統;基於AI技術,美團推出了業內第一款大規模落地的企業應用級語音交互產品,爲50萬騎手配備了智能語音系統;基於AI技術,美團構建了世界上最大的菜品知識庫,爲200多萬商家、3億多件商品繪製了知識圖譜,爲2.5億用戶提供了精準的用戶畫像,並構建了世界上用戶規模最大、複雜度最高的O2O智能推薦平臺。shell
美團這個全球最大生活服務互聯網平臺的「大腦」是怎麼構建的?從本週起,咱們將連續發表「AI in 美團」系列文章,給你們全面揭開各項技術的內幕。數組
另外,業界第一部全面講述互聯網機器學習實踐的圖書《美團機器學習實踐》也即將上市,敬請期待。緩存
1、前言網絡
在計算廣告場景中,須要平衡和優化三個參與方——用戶、廣告主、平臺的關鍵指標,而預估點擊率CTR(Click-through Rate)和轉化率CVR(Conversion Rate)是其中很是重要的一環,準確地預估CTR和CVR對於提升流量變現效率,提高廣告主ROI(Return on Investment),保證用戶體驗等都有重要的指導做用。session
傳統的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預估由機器學習向深度學習遷移的模型探索。app
CTR/CVR預估基於深度學習模型的線下訓練/線上預估的工程優化。
2、從機器學習到深度學習的模型探索
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個隱向量的二次項,擬合公式以下:
上式中,fj 表示第j個特徵所屬的field。設定隱向量長度爲k,那麼相比於FM的nk個二次項參數,FFM有nkf個二次項參數,學習和表達能力也更強。
例如,在搜索廣告場景中,假設將特徵劃分到8個Field,分別是用戶、廣告、Query、上下文、用戶-廣告、上下文-廣告、用戶-上下文及其餘,相對於FM能更好地捕捉每一個Field的信息以及交叉信息,每一個特徵構建的隱向量長度8*k, 整個模型參數空間爲8kn+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這些實體由於過於稀疏,致使模型過擬合嚴重,離線效果變差。所以,咱們作了兩方面的改進:
1. 使用更充分的數據,單獨對用戶行爲序列建模。例如LSTM模型,基於用戶當前的行爲序列,來預測用戶下一時刻的行爲,從中獲得當前時刻的「Memory信息」,做爲對用戶的embedding表示;或Word2Vec模型,生成行爲實體的embedding表示,Doc2Vec模型,獲得用戶的embedding表示。實驗發現,將用戶的embedding表示加入到模型Part_2部分,特徵覆蓋率增長,離線效果有了明顯提高,並且因爲模型參數空間增長很小,模型訓練的時間基本不變。
2. 使用以上方法產生的行爲實體embedding做爲模型參數初始值,並在模型訓練過程當中進行fine tuning。同時爲了解決過擬合問題,對不一樣域的特徵設置不一樣的閾值過濾。
·計數特徵 即對不一樣行爲實體發生的頻次,它是對行爲實體更上一層的抽象。
·Pattern特徵 用戶最近期的幾個行爲實體序列(例如A-B-C)做爲Pattern特徵,它表示了行爲實體之間的順序關係,也更細粒度地描述了用戶的行爲軌跡。
圖片
·描述 商戶的頭圖在App商品展現中佔據着很重要的位置,而圖片也很是吸引用戶的注意力。
·圖片分類特徵 使用VGG1六、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、基於深度學習模型的工程優化
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快速實驗新的模型結構,以保證迭代效率;一旦模型成熟切換主流量,咱們會開發定製實現,以保證線上性能。
模型效果
藉助於咱們的分層實驗平臺,咱們能夠方便的分配流量,完成模型的小流量實驗上線。該分層實驗平臺同時提供了分鐘粒度的小流量實時效果數據,便於模型評估和效果監控。
4、總結與展望
通過一段時間的摸索與實踐,搜索廣告業務在深度學習模型排序上有了必定的成果與積累。接下來,咱們將繼續在特徵、模型、工程角度迭代優化。特徵上,更深度挖掘用戶意圖,刻畫上下文場景,並結合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.