深度學(xué)習(xí)在點(diǎn)擊率預(yù)估中的實(shí)戰(zhàn)(part 1)

一:綜述

在通用推薦系統(tǒng)中钢拧,如何找到用戶所需蟹漓,可以被拆解為兩部分,也就是matching 和 ranking源内,matching的好壞是能在全集中找到用戶所需的候選葡粒,而ranking做的好壞直接決定用戶觸達(dá)所需內(nèi)容/商品/商戶的成本份殿,可以減少用戶的額外操作(比如翻頁,下滑等)嗽交。ranking的核心問題就是點(diǎn)擊率預(yù)估(pctr)卿嘲。

?隨著DeepLearning技術(shù)的日漸成熟,越來越多的公司在pctr問題上夫壁,采用deep model取代淺層模型來進(jìn)行任務(wù)落地拾枣。很多公司紛紛發(fā)表了paper,其中就有g(shù)oogle/facebook等世界top互聯(lián)網(wǎng)公司盒让,本文所敘述的model離線訓(xùn)練思想源自于閱讀谷歌公司在2016年6月24日發(fā)表的論文Wide & Deep Learning for Recommender Systems[引用1]梅肤,如果在后續(xù)文章講解中不能盡解此論文之奧妙,請各位看官大神指出邑茄。而在工程落地上同樣采用了tensorflow體系中的成熟grpc框架tensorflow serving姨蝴。谷歌敢于開源出引領(lǐng)業(yè)界的paper,代碼肺缕,框架左医,系統(tǒng),讓天下碼農(nóng)共同學(xué)習(xí)同木。其格局之高令人敬佩浮梢。

作者在嘗試將論文中思想實(shí)踐到作者所致力于開發(fā)的短視頻推薦系統(tǒng)rank部分,提高算法性能的過程中彤路,發(fā)現(xiàn)網(wǎng)上對這方面的文章不是很多秕硝,作者也曾遇到一個問題翻遍stackoverflow,而不得解的苦惱斩萌,也曾遇到技術(shù)達(dá)人寫的github而豁然開朗的愉悅缝裤。作者希望分享出一份包含離線模型訓(xùn)練,在線server選型一級如何構(gòu)建的小資料颊郎,讓致力于實(shí)戰(zhàn)的算法朋友們規(guī)避我曾經(jīng)走過的彎路,從而少走一些彎路霎苗。請記住姆吭,閉門造車永遠(yuǎn)不能推動技術(shù)的革新。多學(xué)習(xí)多share才是王道唁盏。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

二:概要 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1.實(shí)戰(zhàn)之deep model離線訓(xùn)練與評估内狸。 ? ? ? ? ??

2.dnn model server提供技術(shù)方案一:基于thrift的rpc(python)。

3.dnn model server提供技術(shù)方案二:基于grpc的tf serving厘擂。?

4.推薦系統(tǒng)sever對dnn model server的使用昆淡。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

5.線上小流量實(shí)驗(yàn)效果分析。

三:正文(以及概要部分的介紹順序)

該算法從讀paper開始到上線完成截止刽严,開發(fā)耗時昂灵,3周零4天(單人)。其中1.部分耗時一周,2.部分耗時一周后由于性能不符合要求改用3. ? ?34兩部分耗時一周零一天眨补,最后三天用于線上server部署管削,添加負(fù)載均衡等。對于一名有一定經(jīng)驗(yàn)的機(jī)器學(xué)習(xí)算法工程師來說撑螺,第一部分是最簡單的含思,準(zhǔn)備放在最后講,優(yōu)先講2甘晤,3含潘,4工程實(shí)踐部分。所以本文主要講概要第2部分线婚,dnn model server 提供技術(shù)方案一:基于thrift的rpc调鬓。

基于引用1論文的model 訓(xùn)練方法被封裝在了tensorflow的contrib.learn api中,屬于tensorflow的高級api請參考https://www.tensorflow.org/api_docs/python/tf/contrib/learn酌伊,所以在這里我們的線上推薦系統(tǒng)(java)不能直接load腾窝,加載好的訓(xùn)練模型,java目前對tensorflow的支持僅限于低級別api居砖,生態(tài)不是做的十分出色虹脯。在離線訓(xùn)練完模型后,根據(jù)這個情況奏候,只能采用model server的方式循集,java client 調(diào)用這個model server,來完成打分排序蔗草。好處就是服務(wù)之間完全解耦咒彤,而壞處就是增加一層通信,會帶來耗時的開銷咒精。關(guān)于apache thrift rpc框架的基本介紹镶柱,這里不做過多介紹。


rank內(nèi)部邏輯流程圖


我們希望搭建的流程圖是如上圖所示的模叙,但是就在我代碼全部寫完歇拆,server搭建完成以為可以close這個項(xiàng)目的時候,發(fā)現(xiàn)自己還是太年輕了范咨,下文詳細(xì)敘述故觅。我們參考tensor 官網(wǎng)(詳細(xì)可以參見https://www.tensorflow.org/tutorials/wide_and_deep)給出的代碼搭建model。代碼截圖如下:


圖2tensor tutorials about model build

然后類似于sklearn的方式渠啊,進(jìn)行model.fit(train_data),進(jìn)行model的訓(xùn)練输吏,這個時候model 就已經(jīng)存在上截圖代碼的model_dir里面了。在這個時候我們經(jīng)期時就想一個問題替蛉,如果load這個model到內(nèi)存贯溅,如果能有其它的那些開源平臺那么簡單粗暴就好了拄氯,在像加載低階api訓(xùn)練出的model一樣,嘗試了幾次后發(fā)現(xiàn)事與愿違盗迟,查詢了一些資料后發(fā)現(xiàn)坤邪,tf高階api的model load與低階是完全不同的。心灰意冷之際罚缕,隨便去stackoverflow艇纺,搜這個問題,發(fā)現(xiàn)有人說model.fit后邮弹,下一次只需要按上圖代碼構(gòu)建model黔衡,而直接調(diào)用model.predict 就可以了,model會自動check model_dir里已經(jīng)訓(xùn)練好的文件腌乡。在訓(xùn)練完model評估效果的時候盟劫,果然可以這樣用。又在自己高興不已与纽,按圖1搭建完server侣签,測試性能的時候發(fā)現(xiàn)500個視頻的單次打分,和2000個基本一樣急迂,耗時在800ms+影所,完全不可以接受,這個時候意識到僚碎,可能model.predict 函數(shù)是每次都去加載model猴娩,而不是圖2,構(gòu)建model的時候就已經(jīng)加載入內(nèi)存勺阐,這完全是一個令人沮喪而且不可以接受的消息卷中。

所以我就詳細(xì)的閱讀了/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py里面關(guān)于predict的實(shí)現(xiàn),打出了耗時渊抽,期望自己能夠改一下蟆豫,每次都load model的這部分耗時,立時1.5天后宣告失敗腰吟。這個時候我已經(jīng)覺著自己這個項(xiàng)目無法在online部分上線了无埃。就在又心情跌入谷底時。突然又看到了一些希望毛雇。預(yù)知后事如何,且看part2分析侦镇。


參考

引用1:Wide & Deep Learning for Recommender Systems(谷歌論文)


完成于20170825灵疮,如轉(zhuǎn)載請注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市壳繁,隨后出現(xiàn)的幾起案子震捣,更是在濱河造成了極大的恐慌荔棉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒿赢,死亡現(xiàn)場離奇詭異润樱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)羡棵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門尚辑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芭逝,“玉大人,你說我怎么就攤上這事【鲎螅” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵民褂,是天一觀的道長设哗。 經(jīng)常有香客問我,道長舶胀,這世上最難降的妖魔是什么概说? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮嚣伐,結(jié)果婚禮上糖赔,老公的妹妹穿的比我還像新娘。我一直安慰自己纤控,他們只是感情好挂捻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著船万,像睡著了一般刻撒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耿导,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天声怔,我揣著相機(jī)與錄音,去河邊找鬼舱呻。 笑死醋火,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的箱吕。 我是一名探鬼主播芥驳,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼茬高!你這毒婦竟也來了兆旬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤怎栽,失蹤者是張志新(化名)和其女友劉穎丽猬,沒想到半個月后宿饱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脚祟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年谬以,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片由桌。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡为黎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沥寥,到底是詐尸還是另有隱情碍舍,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布邑雅,位于F島的核電站片橡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏淮野。R本人自食惡果不足惜捧书,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骤星。 院中可真熱鬧经瓷,春花似錦、人聲如沸洞难。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽队贱。三九已至色冀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柱嫌,已是汗流浹背锋恬。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留编丘,地道東北人与学。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像嘉抓,于是被迫代替她去往敵國和親索守。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容