內(nèi)容來源:2017年4月17日脑豹,搜狗移動搜索廣告策略研究組負(fù)責(zé)人舒鵬在七牛云和QCon聯(lián)合主辦的深度學(xué)習(xí)論壇“深度學(xué)習(xí)最新進(jìn)展與實(shí)踐”上進(jìn)行《搜狗深度學(xué)習(xí)技術(shù)在廣告推薦領(lǐng)域的應(yīng)用》演講分享孽锥。
編者按
近來簿透,深度學(xué)習(xí)成為一個流行詞。深度學(xué)習(xí)可以更好地通過增加數(shù)據(jù)集的規(guī)模來改善學(xué)習(xí)結(jié)果祝拯,與傳統(tǒng)的機(jī)器學(xué)習(xí)工具相比,深度學(xué)習(xí)挖掘了神經(jīng)網(wǎng)絡(luò)的潛力〉倘纾基于強(qiáng)大的特征提取,它比其他工具更適合模式識別(圖像窒朋、文本搀罢、音頻)。深度學(xué)習(xí)應(yīng)用的范疇也越來越廣侥猩。這次搜狗移動搜索廣告策略研究組負(fù)責(zé)人舒鵬用自身的經(jīng)驗(yàn)分享搜狗深度學(xué)習(xí)技術(shù)在廣告推薦領(lǐng)域的應(yīng)用榔至,以下為此次演講內(nèi)容的整理。
嘉賓演講視頻地址:http://suo.im/4G8CYm
搜索廣告背景知識
大家對廣告多多少少都有一些了解欺劳,現(xiàn)在大家都用搜索引擎唧取,從總體的覆蓋率看,大家應(yīng)該都會碰到廣告划提。大家對廣告多少會有些討厭枫弟,但中國互聯(lián)網(wǎng)領(lǐng)域的很多行業(yè),都靠廣告變現(xiàn)來生存腔剂,大家手機(jī)上有很多免費(fèi)APP媒区,但天下沒有免費(fèi)的午餐,很多APP都靠廣告來盈利掸犬,廣告是互聯(lián)網(wǎng)商業(yè)的基石⊥噤觯現(xiàn)在也有一些新的流量變現(xiàn)方式,如 O2O湾碎、電商宙攻,還有直播等。在這些商業(yè)模式出現(xiàn)之前介褥,廣告為互聯(lián)網(wǎng)行業(yè)提供了商業(yè)基礎(chǔ)座掘。
如圖 1 是搜索廣告的流程圖递惋,對于搜索廣告來說一般有幾個處理步驟:首先是查詢理解,用戶當(dāng)前的查詢到底想干什么溢陪、他有什么目的萍虽?我們進(jìn)行分詞,以及查詢傾向的分析形真;然后做廣告召回杉编,有很多的客戶會在搜索廣告中買一些他們感興趣的詞,這些詞代表了他們對不同流量的感興趣程度咆霜,系統(tǒng)要對這些詞進(jìn)行競價排序邓馒,所以需要先做一個廣告召回,判定在當(dāng)前語境下面哪些客戶提供的廣告比較合適蛾坯。這個量比較大光酣,搜狗的廣告庫在幾十億的量級,所以會做一定篩選脉课,剩下幾千幾百個廣告救军,然后進(jìn)行詳細(xì)評估;同時我們還會做點(diǎn)擊率預(yù)估下翎,即假定這個廣告能夠在用戶面前展示缤言,實(shí)際的點(diǎn)擊比例會怎么樣,點(diǎn)擊率能夠反映出很多因素视事,包括廣告的質(zhì)量胆萧,以及廣告的價值等。此外俐东,有的時候我們也需要花錢購買流量跌穗,如何更有效的利用這些流量,通常都要靠這些來保證虏辫;而后會有排序計(jì)價蚌吸,挑選排名靠前的廣告來進(jìn)行結(jié)果展示;然后會有后續(xù)的日志收集功能砌庄,接下來會拿這個日志做各種各樣的處理羹唠,包括 CTR預(yù)估模型的線下實(shí)驗(yàn)以及各種各樣的事情,如此就完成了整個閉環(huán)娄昆,這是廣告系統(tǒng)的介紹佩微。
深度學(xué)習(xí)在搜狗搜索廣告的一些應(yīng)用
下邊介紹一下搜狗深度學(xué)習(xí)在搜索廣告領(lǐng)域里面有哪些應(yīng)用。
第一塊是文本相關(guān)性計(jì)算萌焰,簡單來講就是一個廣告的標(biāo)題哺眯、描述等整個信息跟當(dāng)前的查詢詞是否相關(guān),健康性有沒有問題扒俯,是否會影響用戶體驗(yàn)一疯?有時候一些客戶買詞不規(guī)矩夺姑,可能會買一些當(dāng)下流行的熱點(diǎn)詞,但最后填寫的標(biāo)題磕蒲、描述等創(chuàng)意信息跟這個熱點(diǎn)詞并沒有關(guān)系只盹,如果展示出來就會引起大家的反感殖卑,因此我們需要圍繞相關(guān)性做一些工作坊萝,來避免這種情況。
如圖2是去年做的一項(xiàng)工作十偶,后來也是投了一篇論文發(fā)表在CIKM2016上面去惦积,這個論文是關(guān)于 Question Answering的接校,解決如何選出和 Question 最合適答案的問題,采用了典型的深度學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu)狮崩。這篇論文的主要創(chuàng)新點(diǎn)在于無需分詞蛛勉,做一些傳統(tǒng)的文本相關(guān)性計(jì)算時,一般會先做分詞睦柴,比如你會把論文進(jìn)行分詞诽凌,把廣告標(biāo)題進(jìn)行分詞等,分詞之后再做處理坦敌。這個分詞算法設(shè)計(jì)也有很多講究侣诵,你需要不斷的更新語料庫,以及其它相關(guān)性工作狱窘,當(dāng)時就想能不能不做分詞杜顺,把這個繞開直接搞定。就做了個實(shí)驗(yàn)训柴,簡單來講就是把英文的 26 個小寫字母哑舒,以及 26 個大寫字母,還有 0-9這些數(shù)字幻馁,以及標(biāo)點(diǎn)符號等洗鸵,每個字符都看成是一個標(biāo)記越锈,每個標(biāo)記對應(yīng)一個向量,這個向量可以通過向量表查詢得到膘滨,并在訓(xùn)練中逐步更新甘凭,這樣每個句子就可以轉(zhuǎn)化為一個矩陣,矩陣得到之后可通過卷積和pooling等方法最終轉(zhuǎn)化成向量火邓,這個向量通過全連接層形成一個輸出值丹弱,而后和樣本標(biāo)注結(jié)果( 1 還是 0)進(jìn)行比對和誤差回傳躲胳,從而形成一個網(wǎng)絡(luò)。有了這個網(wǎng)絡(luò)之后粹湃,就可以拿一些語料進(jìn)行訓(xùn)練为鳄,結(jié)束之后就會得到最終每個字符的vector孤钦,用以后續(xù)的處理。這樣做不需要分詞壳猜,可避免外部系統(tǒng)的干擾统扳。最近我們依賴的一個分詞庫需要進(jìn)行升級咒钟,很多事情都要重新做一遍,特別麻煩。如果這個架構(gòu)全面應(yīng)用的話乌昔,將會避免這些問題。
如圖 3 是廣告物料推薦溺蕉,假設(shè)有一張圖片想知道含義疯特,想知道跟這個圖片相關(guān)的文本有哪些。圖片采用 CNN 來處理羹与,文本采用 LSTM 進(jìn)行處理,最后把兩者通過cosine的方式結(jié)合在一起訓(xùn)練以達(dá)到最終目的腾誉。
深度學(xué)習(xí)的應(yīng)用很廣泛利职,具體到廣告領(lǐng)域:如圖像理解,像剛才介紹的圖像物料推薦热押,這個是用 CNN 技術(shù)來做桶癣;還有文本相關(guān)性牙寞,通郴谙辏可以來做廣告召回,以及創(chuàng)意生成等事情责蝠,相關(guān)技術(shù)比如 LSTM霜医,以及剛才提到的 CSR;還有CTR預(yù)估医男,深度學(xué)習(xí)可用來做廣告排序和相關(guān)的特征挖掘镀梭,相關(guān)技術(shù)如CNN报账、MxNet和TensorFlow等透罢。圖 4 舉的例子是一個典型應(yīng)用羽圃,具體到這個廣告而言,蛋糕的小圖片是通過剛才的技術(shù)做上去的愁憔,有很多客戶是屬于中小客戶吨掌,自己不具備強(qiáng)大的運(yùn)營能力窿侈,他可能想為廣告配一些圖,但沒有精力做這件事情圆兵,我們就會幫他自動匹配一些圖片殉农,這會影響后續(xù)的很多東西,包括訂單轉(zhuǎn)化等事情轮傍。廣告下方的三行子標(biāo)題也是自動生成,系統(tǒng)會判斷一下當(dāng)前有哪些東西用戶比較感興趣,而且和客戶有關(guān)桨醋,就會放在這里喜最,這部分涉及到文本相關(guān)性計(jì)算。這是主要介紹的三點(diǎn)深度學(xué)習(xí)在廣告中的應(yīng)用限书。
基于多模型融合的CTR預(yù)估
CTR預(yù)估流程
下邊我們重點(diǎn)介紹一下 CTR 預(yù)估模塊能真。通常單個模型的能力有限,每個模型都有自己的特點(diǎn)程剥,比如 LR 模型比較穩(wěn)定,DNN 模型擅長做特征交叉昙沦。每個模型都有自己的特點(diǎn)载荔,需要根據(jù)模型的特點(diǎn)去最大化利用它盾饮。我就這個領(lǐng)域詳細(xì)介紹一下。
首先介紹一下CTR預(yù)估的流程:首先搜集原始數(shù)據(jù)懒熙,包括查詢請求和點(diǎn)擊信息丘损,這兩項(xiàng)每天都會實(shí)時產(chǎn)生并且量級很大;有這些之后就可以做特征的抽取工扎,比如查詢相關(guān)特征徘钥,用戶查詢詞是什么?他所處哪個地域?今天是星期幾拘荡?還有廣告特征粉臊,廣告本身的標(biāo)題是什么而晒?描述是什么?客戶購買的關(guān)鍵詞是什么春塌,以及這個廣告和查詢詞之間的匹配相關(guān)性锅必。有了特征之后會進(jìn)行線下模型訓(xùn)練终娃。圖 5 中有兩類模型恨憎,一個是線性模型,一個是非線性模型橘荠,線性模型主要指LR ,非線性模型主要是指 GBDT撬呢、DNN等荷愕。模型訓(xùn)練完畢之后會加載到線上茁帽,同時線上 Server 會把整個特征抽取流程在線完成透硝,而后會進(jìn)行模型計(jì)算,然后形成 CTR 預(yù)估的完整結(jié)果磺浙。最后 Online 本身會產(chǎn)生實(shí)時日志府怯,形成完整的流程肖揣。
CTR預(yù)估涉及技術(shù)
大家知道宰衙,跟CTR預(yù)估有關(guān)的主要有三個因素,一個是數(shù)據(jù)、一個是特征募闲、一個是模型。平臺是承載這三點(diǎn)的基礎(chǔ)愿待。具體到平臺而言浩螺,我們通常會用多天的數(shù)據(jù)進(jìn)行訓(xùn)練靴患,這種情況下單機(jī)是跑不完的,因此需要一個并行計(jì)算平臺來同時處理大數(shù)據(jù)量要出。如圖 6 左邊列出來的幾個平臺都是較為常用的平臺:第一個是 MPI鸳君,如果做科學(xué)計(jì)算的話就會比較熟悉,這是比較早期的患蹂,這個平臺會偏底層一些或颊,需要修改不少代碼才能實(shí)現(xiàn)工作,現(xiàn)在大家不大會用传于,因?yàn)樽銎饋肀容^繁瑣囱挑;第二種是XgBoost,主要是做 GBDT 相關(guān)的東西沼溜;然后是 MxNet看铆,在深度學(xué)習(xí)中的應(yīng)用比較多,像亞馬遜就在利用這個平臺做些事情盛末;最后是 TensorFlow弹惦,谷歌最近一兩年做出來的,主要是提供跨平臺的深度學(xué)習(xí)計(jì)算工具悄但。
在模型方面:首先有線性模型棠隐,LR 模型又有一些細(xì)分算法,實(shí)時(FTRL)和特征自動組合(FM)檐嚣;非線性的模型是有GBDT助泽,是決策樹的變體,可以看作多個決策樹的組合嚎京;然后是深度學(xué)習(xí)模型嗡贺, 如DNN;
以及模型融合鞍帝,剛才講到怎么樣能把不同模型的優(yōu)點(diǎn)都集中在一起诫睬,具體的做法有多種:第一種是 Bagging,比較實(shí)用簡單帕涌,就是有多個模型摄凡,每個模型都有個結(jié)果,怎么樣把多個結(jié)果放在一起呢蚓曼?直接加權(quán)平均一下就可以了亲澡,這個方法很簡單;其次是級聯(lián)模型纫版,級聯(lián)模型相對復(fù)雜一些床绪,這個做法不是把最終的評估結(jié)果放在一起,而是說每一個模型中間產(chǎn)生的數(shù)據(jù)也可以送到另外一個模型中去,這樣做起來就比較麻煩癞己,但操作空間比較大裹匙,而且可以有多種組合方法;最后一個是 Wide&Deep末秃,這是谷歌去年提出的思路,它跟前面兩種都不一樣籽御,前面兩種每個模型訓(xùn)練都是獨(dú)立的练慕,即使有先后順序,但是 Wide&Deep 是針對兩個模型同時交互訓(xùn)練技掏,我們認(rèn)為它相比其他兩個效果會更好一些铃将。
數(shù)據(jù)模塊:首先要有一個日志收集模塊,會收集到最原始的數(shù)據(jù)哑梳,需要進(jìn)行去噪劲阎,是因?yàn)樵紨?shù)據(jù)也會有一些噪聲點(diǎn),比如同一個用戶同一個查詢詞連續(xù)搜索兩次鸠真,第一次沒點(diǎn)廣告悯仙,但第二次點(diǎn)了,第一次沒點(diǎn)到底是因?yàn)閺V告出的不好吠卷,還是因?yàn)橛脩舢?dāng)時不在狀態(tài)锡垄,根本沒有看到廣告呢。
其次是特征祭隔,在搜索廣告領(lǐng)域里面特征是非常重要的货岭。有一個專有名詞叫特征工程,主要包括特征的設(shè)計(jì)疾渴、選擇千贯、組合:所謂設(shè)計(jì),就是概率論搞坝,你認(rèn)為哪些因素對用戶選擇廣告有影響搔谴,這時你就要把它找到并設(shè)計(jì)一些新特征出來;單單有這個還不夠桩撮,我們需要判斷這種新特征是否有效己沛,這就涉及到特征選擇,特征選擇需要進(jìn)行仔細(xì)的分析距境,看看能不能用申尼;最后是特征組合,也就是交叉特征垫桂,有的時候單個因素出現(xiàn)并不能說明問題师幕,而兩個因素一塊出現(xiàn)時,可能就代表了特殊的含義。
特征設(shè)計(jì)
關(guān)于特征設(shè)計(jì)大體上可以分為兩類:一類是離散特征霹粥,所謂離散特征是指灭将,比如一天 24 個小時,下午16 點(diǎn)整后控,我認(rèn)為 16 點(diǎn)整在一天 24 小時當(dāng)中會占據(jù)一個位置庙曙,把時間刻畫為長度為24的向量,其中 16 點(diǎn)就會占據(jù)這個向量中的一個位置浩淘。這種設(shè)計(jì)方法有幾個特點(diǎn):首先比較容易設(shè)計(jì)捌朴,不管什么樣的特征,只要它有一個取值就可以映射到系統(tǒng)里张抄,實(shí)現(xiàn)特征的產(chǎn)生砂蔽;還有一個特點(diǎn),就是特征空間非常大署惯,百億或者上千億的量級左驾,但對于任何一個樣本最后只有幾百個特征是有效的,其他的特征都沒有取值极谊,它的稀疏性非常明顯诡右,特征空間非常大,這樣會導(dǎo)致模型復(fù)雜度比較受限制轻猖。如果模型過于復(fù)雜稻爬,比如你把每一個離散特征都連接到DNN輸入層的話,參數(shù)就會非常多蜕依,訓(xùn)練時間會非常長桅锄,結(jié)果也不一定好。這是離散特征样眠。
其次是連續(xù)特征友瘤,跟離散特征反著過來的。像上邊那個時間的例子檐束,如果說 24 個小時刻畫成離散特征是 24 個點(diǎn)的話辫秧,連續(xù)特征就是一個值,16 點(diǎn)就是 16被丧,13 點(diǎn)就是 13盟戏,它只會占據(jù)一個位置,但是那個位置的取值范圍可以有 24 種甥桂,而不僅僅是0和1柿究,跟離散特征正好反過來。像這種特征一般來說需要做一個比較仔細(xì)的設(shè)計(jì)才行黄选,大家都知道連續(xù)特征每一個特征只會占一個位置蝇摸,不像離散特征那樣隨意占據(jù)大量的空間。它的特點(diǎn)是定長,每個特征取值只能有一個貌夕,像離散特征中有個特征叫當(dāng)前查詢詞分詞之后的term分布律歼,如果這個查詢詞比較長,它的term分布就長一些啡专,占據(jù)的位置就多一些险毁;如果只是一個短的查詢,占據(jù)的位置就比較少们童,是變長的畔况,這點(diǎn)和連續(xù)特征區(qū)別很大。此外病附,基本上每個連續(xù)特征都有值。有上面這幾個特點(diǎn)亥鬓,就會導(dǎo)致連續(xù)特征量相對小一些完沪,差不多幾百維的向量就搞定了,它可以用比較復(fù)雜的模型進(jìn)行訓(xùn)練嵌戈,像DNN 這種大概只有幾百個輸入節(jié)點(diǎn)覆积,相比圖像處理還是比較小兒科的。
模型類別
關(guān)于模型熟呛,剛才提到分為線性和非線性宽档,線性模型中最典型的就是 LR,邏輯斯特回歸庵朝,這個模型比較簡單吗冤,它的公式大概是一個權(quán)重分量×特征分量+偏置,而后再做一個變換得到最終結(jié)果九府,它比較簡單椎瘟,比較適合處理離散特征,而且穩(wěn)定性比較好侄旬。但它有一個缺點(diǎn)肺蔚,LR 本身沒法做特征交叉,只能通過線下分析儡羔,嘗試兩種特征的交叉是否可以改善線下指標(biāo)宣羊,這樣才能得到比較好的結(jié)果。這件事情很多公司都有自動化的學(xué)習(xí)平臺汰蜘,會自動進(jìn)行特征的交叉并評估哪個特征比較好仇冯,盡管如此,這些工作還是比較耗時間的族操。
非線性模型有特別明顯的優(yōu)點(diǎn)赞枕,能夠自動學(xué)習(xí)特征之間的交叉關(guān)系,如哪兩個特征交叉在一起比較好,模型會幫你實(shí)現(xiàn)炕婶。比如說 DNN 輸入 100 維特征姐赡,隱藏層中每層都有交叉關(guān)聯(lián)。如果兩個特征之間有很強(qiáng)的依賴關(guān)系柠掂,且對結(jié)果有影響的話项滑,在權(quán)重分量上會有相應(yīng)的側(cè)重,最后會達(dá)到特征自動交叉的目的涯贞,這就是為什么 DNN 出來之后用戶非常廣泛的原因枪狂。像剛才 LR 這種特征組合,非常耗費(fèi)人力和精力宋渔,可能一個公司一個特征組有幾個人或十幾個人州疾,都在做這件事情,大家都在研究哪些特征會好皇拣,或者交叉在一起會好严蓖。但如果用非線性模型的話就會相對規(guī)避這一點(diǎn),從這一點(diǎn)來看它比較適合做新領(lǐng)域的探索氧急,可能效果會好一些颗胡。
但因?yàn)橛猩厦鎯?yōu)點(diǎn)的存在,它就會有一些缺點(diǎn)吩坝,模型比較復(fù)雜毒姨,計(jì)算比較耗時。這點(diǎn)對于在線計(jì)算任務(wù)就比較關(guān)鍵一些钉寝,像做廣告CTR預(yù)估弧呐,每天有幾億次查詢,每次查詢有成百上千條廣告需要處理嵌纲,查詢配對在千億量級泉懦,對計(jì)算資源的要求非常高。如果模型太復(fù)雜的話疹瘦,就需要把計(jì)算資源擴(kuò)充一些崩哩,買機(jī)器這些都要考慮,最后收益怎么樣言沐,到底值不值得邓嘹,這是比較有風(fēng)險的一點(diǎn)。
模型融合
上邊提到险胰,因?yàn)槊總€模型都有優(yōu)點(diǎn)汹押,比如說 LR 模型最突出的優(yōu)點(diǎn)是簡單、可靠起便、文本類特征處理比較好棚贾,但又不具備交叉能力窖维;而DNN有這種能力,但沒有前邊說的優(yōu)點(diǎn)妙痹,怎么把它們?nèi)诤显谝黄鹉刂罚恳虼藭玫侥P腿诤希?/p>
CTR bagging 將多個模型的輸出 CTR 加權(quán)平均,實(shí)現(xiàn)方法簡單怯伊,模型之間不會產(chǎn)生耦合琳轿,但是可調(diào)參數(shù)有限,改進(jìn)空間相對較小耿芹。
再有模型融合崭篡,每個模型中間的結(jié)果或者是輸出結(jié)果可以作為另外一個模型的輸入,這個模型會學(xué)習(xí)上一個模型哪個地方處理的好或者不好吧秕,自動做出調(diào)整琉闪。實(shí)現(xiàn)的方法比較復(fù)雜,因?yàn)槟P椭g有依賴關(guān)系砸彬。但優(yōu)點(diǎn)是實(shí)現(xiàn)方案較多颠毙,改進(jìn)空間大一些。
由于第一種方式 (CTR bagging) 的空間有限拿霉,我們就選擇第二種吟秩。并針對性的做了一些設(shè)計(jì)咱扣,這些跟工程設(shè)計(jì)的關(guān)系大一些绽淘。如何做這件事情?要定一個目標(biāo)闹伪,要做成什么樣子來達(dá)成這個目的沪铭?首先希望這個東西能支持多個模型的加載的和計(jì)算;第二點(diǎn)偏瓤,可支持模型之間的交叉和 CTR 的 Bagging杀怠;第三點(diǎn),可通過配置項(xiàng)隨時調(diào)整模型融合方案厅克;第四點(diǎn)赔退,避免不必要的重復(fù)操作,以降低時間復(fù)雜度证舟。根據(jù)這 4 個要求我們做了個解決方案硕旗,核心理念是引入了ModelFeature 的概念,即把模型本身看做一個特征女责,模型通過計(jì)算得到新的特征漆枚,對于模型輸出可作為 CTR,也可以作為特征為其它模型使用抵知。限定 ModelFeature 的計(jì)算順序墙基,即可實(shí)現(xiàn) Bagging 和模型交叉等功能软族。
但是必須要注意數(shù)據(jù)一致性,線上依賴的數(shù)據(jù)源是否跟線下完全一致残制,如果數(shù)據(jù)不一致立砸,所有的結(jié)論和實(shí)驗(yàn)都是空中樓閣沒有根基。我們之前碰到過一個問題痘拆,做了一個特征線下效果很好仰禽,但線上效果不怎么樣,可能就會有數(shù)據(jù)不一致的問題纺蛆。拿剛才時間的例子吐葵,如果線下計(jì)算離散值時,比如說是 0 點(diǎn)占到第一個位置桥氏,1 點(diǎn)占到第二個位置温峭,24 點(diǎn)占到第 24 個位置,但是線上有一個錯誤字支,0 點(diǎn)占到第 24 個位置凤藏,24 點(diǎn)占到第一個位置,就給它反過來堕伪,雖然線下做的很好揖庄,但是線上的使用效果會很差。
第二點(diǎn)欠雌,流程的穩(wěn)定性蹄梢,如果設(shè)計(jì)一個很復(fù)雜的流程,包括融合模型操作的話富俄,流程之間就會有很強(qiáng)的依賴性弹沽,任何一個前面的流程失敗涕癣,后面的流程就跑不下去,所以你的流程必須要穩(wěn)定,要有機(jī)制保證吼畏。
如圖 11 是一個流程圖龙亲,線下流程會把這些數(shù)據(jù)重組抽取特征進(jìn)行訓(xùn)練昵骤。在線下會訓(xùn)練一個 LR 模型宵睦,這個結(jié)果反饋到 DNN 模型里再進(jìn)行訓(xùn)練。到了線上之后浅妆,針對每個查詢請求都會抽取這些特征望迎,得到特征值后進(jìn)行 LR 模型計(jì)算,LR 模型產(chǎn)生的最終結(jié)果放在特征池里面狂打,后續(xù)的 DNN 模型也會依賴這個東西計(jì)算擂煞。通過這套架構(gòu)設(shè)計(jì),基本上保證了剛才提到的要點(diǎn)趴乡。這套框架在線上跑了快一年時間对省,比較穩(wěn)定蝗拿。
模型效果評估
線下做實(shí)驗(yàn),以及線上上線蒿涎,必須要評價一下這套流程是好還是壞哀托。所以有一套模型效果的評估方法,用來判定新特征到底是好還是壞劳秋?
一仓手、如圖 12的 AUC,這是搜索廣告領(lǐng)域以及現(xiàn)在的信息流推薦中常用的指標(biāo)玻淑,只要涉及到排序結(jié)果通常都會用到 AUC嗽冒,這個指標(biāo)表征排序能力,用于分析模型是不是把一些好的排在前面差的排在后面补履,它不一定能反映出數(shù)據(jù)的絕對值添坊。AUC 還是比較穩(wěn)定的,據(jù)有些人講箫锤,只要這個指標(biāo)在線下提升到一定幅度贬蛙,線上一定會有效果。如果線上沒有效果的話谚攒,通常來講肯定是某一塊出了問題阳准,包括剛才講的線上線不一致等。
二馏臭、最直接的評估方法野蝇,上線收益。如果線下發(fā)現(xiàn) AUC 是有提升的位喂,要到線上去看最終收益有沒有漲浪耘,看到底多賺多少錢乱灵?這兩個指標(biāo)有一定的關(guān)聯(lián)性塑崖,AUC 比較高的話收益一定會漲,也有一些例外的情況痛倚。為什么線下效果很好规婆,到了線上之后沒有變化?通常從兩個角度來看:特征的覆蓋率蝉稳,你這個特征如果非常好抒蚜,但覆蓋的東西很有限,線上 100 個指征只覆蓋了 2 個耘戚,即使這兩個獲得很大的提升嗡髓,最終的收益也比較有限;Survival Bias收津,線下訓(xùn)練時用到的數(shù)據(jù)都是自動篩選過的結(jié)果饿这,一般凡是能展現(xiàn)的廣告通常都是之前系統(tǒng)認(rèn)為比較好的廣告浊伙,在這個數(shù)據(jù)集上表現(xiàn)比較好,不代表你在真正放到線上之后表現(xiàn)好长捧。因?yàn)檎嬲暇€之后你會對所有的廣告進(jìn)行掃描計(jì)算嚣鄙,這時把壞廣告干掉的能力就會顯得比較關(guān)鍵。這兩點(diǎn)可能會導(dǎo)致線上和線下不一致串结,其實(shí)做別的事情也會有同樣的問題哑子,一個是理論一個是實(shí)際,這兩個如果不一致時肌割,應(yīng)該想一想到底哪一塊出了問題卧蜓?
并行化訓(xùn)練
此外,我們還需要并行化訓(xùn)練把敞,因?yàn)閱螜C(jī)不可能處理這么大的數(shù)據(jù)量烦却。
數(shù)據(jù)量小的時候波動很大,做的很多改進(jìn)沒有效果先巴,一些小修改效果反而好其爵。數(shù)據(jù)量變大之后,模型收益會更高而且比較可控伸蚯。
我們選擇的深度學(xué)習(xí)并行化訓(xùn)練方案是 MxNet摩渺,它支持多機(jī)多卡,使用成本比較低剂邮。我們每天都需要進(jìn)行模型更新摇幻,對時效性要求很高,如果把 MxNet 直接用過來的話挥萌,效果不一定好绰姻,訓(xùn)練時間比較久,需要優(yōu)化引瀑,比如 怎么樣做調(diào)度來提升GPU的加速比等狂芋。
現(xiàn)狀和計(jì)劃
我們目前已經(jīng)實(shí)現(xiàn)了 LR+DNN 融合模型的上線,收益比好憨栽。但是受限于線上計(jì)算資源帜矾,模型復(fù)雜度有限,線下訓(xùn)練流程有依賴關(guān)系屑柔,繁瑣易出錯屡萤。
我們針對這幾點(diǎn)情況做了個計(jì)劃。
一掸宛、做一個線上服務(wù)拆分死陆,跟深度學(xué)習(xí)的模塊獨(dú)立出來,采用低功耗的 GPU 加速唧瘾。這個現(xiàn)在做的差不多了措译,區(qū)別還是很明顯的迫像。按目前線上 CPU 版本的服務(wù)器,其實(shí)它做這種工作時非常吃力瞳遍,負(fù)載量不夠闻妓,但上了 GPU 之后,就能處理的很好掠械。
二由缆、支撐更寬、更深猾蒂、更復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)均唉,GPU 在處理已有線上任務(wù)時的負(fù)載量在 5% 左右,利用率很低肚菠,未來能支撐更寬更深更復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)舔箭。
三、采用 Wide & Deep蚊逢,線下訓(xùn)練流程解耦层扶,因?yàn)橹暗脑诰€計(jì)算能力有限,如果GPU 運(yùn)轉(zhuǎn)良好的話烙荷,可以采用 Wide&Deep 替換镜会,使線下訓(xùn)練流程解耦。
Wide Deep
這是接下來打算做的事情终抽,大家如果感興趣可以看谷歌 2016 年 6 月份發(fā)表的相應(yīng)論文戳表。大概的思路如圖 14所示, Wide 部分可以理解為 LR昼伴,Deep就是 DNN匾旭,這兩個模塊會把它的結(jié)果同時反饋到最終輸出節(jié)點(diǎn)上,來跟最終的結(jié)果進(jìn)行差值比對圃郊,它的誤差都會同時回傳价涝,回傳之后進(jìn)行同步更新。這樣有一個好處描沟,:LR 跟 DNN 模型是同時訓(xùn)練出來的飒泻,線下維護(hù)一個流程實(shí)現(xiàn)兩個模型的訓(xùn)練鞭光,正確性包括各種錯誤率都能得到很好的保證吏廉。
該方法的優(yōu)點(diǎn)比較明顯,首先它比較穩(wěn)定惰许,一次訓(xùn)練出兩個模型席覆,如果兩個模型同時訓(xùn)練的話,兩個模型會互相影響汹买,兩個模型的權(quán)重分配會更好一些佩伤。大家現(xiàn)在都在朝這個方向發(fā)展聊倔,我們剛開始做沒有多久,目前來看有好的效果生巡,相比之前最好的效果再好一些耙蔑,但因?yàn)楝F(xiàn)在的TensorFlow 平臺不支持大規(guī)模訓(xùn)練,接下來還需要在這一塊持續(xù)投入改進(jìn)孤荣,如果有更新的結(jié)果會跟大家分享下甸陌。
Q & A
現(xiàn)場提問:論文中的方法(CSR)在英文語料上的效果怎么樣?
舒鵬:效果差不多盐股,比如說英文單詞在幾十萬百萬的量級钱豁,如果在線應(yīng)用的話要加載幾十萬個字符和向量的映射關(guān)系,如果采用這種方法的話疯汁,大概 幾十個字符牲尺,加載 幾十 個vector 就實(shí)現(xiàn)這個功能。
現(xiàn)場提問:字的編碼怎么編的幌蚊?
舒鵬:總共 26 個字母加上大小寫以及標(biāo)點(diǎn)符號和數(shù)字不到 100 種谤碳,每個對應(yīng)一個向量。漢字看哪個庫溢豆,如果常用漢字大概幾千個估蹄,其實(shí)這個矩陣并不大。
現(xiàn)場提問:你剛才說的 MxNet你能介紹一下調(diào)度的優(yōu)化嗎沫换?
舒鵬:我們這邊有一些工程團(tuán)隊(duì)支持臭蚁,具體他們那邊熟悉一些⊙渡停總體來講垮兑,首先I/O方面,我們的訓(xùn)練數(shù)量比較大漱挎,在幾十億量級系枪,首先多臺機(jī)器可以并行加載,怎么樣把I/O和后面的計(jì)算錯開磕谅,這是關(guān)鍵的私爷。還要看網(wǎng)絡(luò)結(jié)構(gòu)怎么設(shè)計(jì),深度學(xué)習(xí)訓(xùn)練也是每一個節(jié)點(diǎn)做完一輪BP之后會把系數(shù)拿在一起做個平均計(jì)算膊夹,怎么去設(shè)計(jì)機(jī)制來盡量縮短時間衬浑,主要是這些方面。
現(xiàn)場提問:我想問一下論文中使用的訓(xùn)練數(shù)據(jù)規(guī)模大概多少放刨?
舒鵬:我們當(dāng)時做論文時訓(xùn)練數(shù)據(jù)規(guī)模比較小工秩,是基于公開的庫,大概不超過一百萬,比較小的庫助币。線上訓(xùn)練要看應(yīng)用場景浪听,我們有好幾種數(shù)據(jù),有一種是人工標(biāo)注過的眉菱。除此之外迹栓,還有自動數(shù)據(jù),例如用戶提交query之后俭缓,下面會出十條自然結(jié)果迈螟,點(diǎn)擊哪條結(jié)果能一定程度上表征query的一些屬性。query點(diǎn)擊的數(shù)據(jù)量很大尔崔,在百億量級答毫。但第一種標(biāo)注數(shù)據(jù)的話,量級比較小一些季春,主要取決于你的應(yīng)用洗搂。
現(xiàn)場提問:請問CTR預(yù)估模型效果評估中的準(zhǔn)確率度如何計(jì)算?
舒鵬:剛才沒有列出來载弄,直觀想象下大概有個準(zhǔn)確率計(jì)算方法耘拇。假設(shè)每個廣告系統(tǒng)有個預(yù)估CTR,假如是 0.10宇攻,可以把所有預(yù)測CTR是 0.10 的廣告放在一起惫叛,這些廣告就會有實(shí)際的點(diǎn)擊率,這個實(shí)際的點(diǎn)擊率和 0.10 的差距會有個監(jiān)控逞刷,這個就是準(zhǔn)確率嘉涌。
現(xiàn)場提問:你剛剛在演講當(dāng)中提到有一個 SurvivalBias 問題,想問一下具體怎么解決這個問題的夸浅?
舒鵬:這個主要是說這個模型在碰到之前沒有見到的一些樣本時如何處理仑最。關(guān)鍵點(diǎn)在于特征設(shè)計(jì),尤其是特征泛化性帆喇,所謂泛化性警医,比如說一個新廣告,雖然廣告是新的坯钦,但廣告標(biāo)題和舊廣告差不多预皇,只要你的特征能捕捉到這些經(jīng)常出現(xiàn)的東西,例如查詢詞和廣告標(biāo)題的匹配度婉刀,這種泛化性能保證的話吟温,這個 SurvivalBias 就不會很差。反過來講路星,如果你的模型中所有特征都跟跟通用性特征沒有關(guān)聯(lián)溯街,這個模型的 SurvivalBias 就會很差诱桂。舉個例子洋丐,如果你的模型訓(xùn)練時依賴的特征是昨天模型的預(yù)估點(diǎn)擊率呈昔,你的模型就會變得很簡單,而且 AUC不會低友绝,但實(shí)際上到了線上之后這個特征會缺失堤尾,然后效果就會很差,大概是這個意思迁客。
今天就介紹到這里郭宝,謝謝!