搜索引擎廣告是用戶獲取網絡信息的渠道之一,同時也是互聯網收入的來源之一,通過傳統的淺層模型對搜索廣告進行預估排序已不能滿足市場需求。近年來,深度學習在很多領域得到廣泛應用并已取得較好的成果,本次演講就是分享深度學習如何有效的運用在搜狗無線搜索廣告中。
本次分享主要介紹深度學習在搜狗無線搜索廣告中有哪些應用場景,以及分享了我們的一些成果,重點講解了如何實現基于多模型融合的CTR預估,以及模型效果如何評估,最后和大家探討DL、CTR 預估的特點及未來的一些方向。
一、深度學習在搜索廣告中有哪些應用場景
比較典型的深度學習應用場景包括語音識別、人臉識別、博奕等,也可以應用于搜索廣告中。首先介紹下搜索廣告的基本架構,如下圖:
首先用戶查詢。
查詢詞給Bidding Server處理,Bidding Server主要負責業務邏輯。例如某種廣告在什么情況下不能展現,或這個客戶同一個廣告在什么時間段什么地域展現。
Bidding Server請求Retriever Server,Retriever Server主要負責召回,廣告庫很龐大(搜狗的廣告庫大概在幾十億這個規模),因為數據量非常大,所以需要根據一些算法從中找出和當前查詢詞最相關的一批廣告,這就是Retriever Server做的事情。
Retriever Server處理完后,會把這些比較好的廣告回傳給Quality Server,Quality Server主要負責點擊率預估和排序,此時的候選集數量相對較少,Quality Server會采用復雜的算法針對每條廣告預估它當前場景的點擊率,并據此排序。
Quality Server將排序結果的top回傳給Retriever Server。
Retriever Server回傳給Bidding Server。
Bidding Server做封裝最后展示給用戶。
以上過程中可應用到深度學習的場景如下:
二、基于多模型融合的CTR預估2.1 CTR預估流程
CTR預估的流程圖如下:
Data是原始數據,包括點擊及查詢日志,從這些原始數據里抽出一些特征。
Feature包括查詢特征、廣告特征、匹配特征。查詢特征是和查詢詞相關的特征,查詢發生的地域、時間等。廣告特征是指廣告本身的信息,例如:來自哪個客戶,是哪個行業的,它的關鍵詞是什么,它的標題、描述、網址是什么等各種信息。匹配特征是指查詢詞和廣告的匹配關系。
然后會進行模型的訓練,包括線性和非線性。
模型在線下訓練完后會到線上,線上Server會實時做特征抽取并預估。例如:線上實時收到查詢請求后,就會知道查詢詞是什么。前面講的Retriever server,它會召回一系列廣告,并抽出相關信息,比如廣告的標題、關鍵詞、描述等信息,有了這些信息后會利用加載的模型給出預估CTR,最終會進行Rank排序,從而篩選出滿足指定條件的一些廣告進行展示。
2.2 特征設計離散特征
離散特征是指把東西分散出來表示,比如OneHot,非常直觀,例如用戶當天所處的時間段,他和最終點擊率有關系,那么我把一天24小時分成24個點,他在哪個小時就把哪個點點亮置1,這個特征就設計完了。它的刻畫比較細致,設計比較簡單,但他的特征非常稀疏,我們線上特征空間非常大,有上十億,但任何一個請求場景到來,它真正有效的特征大概只有幾百個,絕大部分都是空的。因為特征量非常大,不能設計太復雜的模型,否則無法用于線上。
離散特征總結:容易設計,刻畫細致,特征稀疏,特征量巨大,模型復雜度受限。
連續特征
還是以時間舉例,離散特征會把它變成24個點,連續特征就會變成一個值,比如1、2、3、4、5一直到24,它只會占一個位置。需要仔細設計,很難找到一個直接的方法來描述查詢詞中包括哪些東西。它是定長的,所以一個請求場景到來,它有多少特征是固定的。不像離散特征是不定長,查詢詞不一樣,有的是兩個特征或三個特征,對于特征點可能有兩個或三個,這對于我們后面的工作也有一定的影響。連續特征比較稠密,每個位置都會有值,它特征量相對較小,如果用連續特征設計的話可能需要幾百維就可以,因此可以使用多種模型來訓練。
連續特征總結:需要仔細設計,定長,特征稠密,特征量相對較小,可以使用多種模型訓練。
2.3 模型類別
線性
優點:簡單、處理特征量大、穩定性好,缺點:不能學習特征間的交叉關系,需要自己去設計。比較典型的如Logistic Regression,有開源的工具包,部署簡單且效果不錯。
非線性
優點:能夠學習特征間非線性關系,缺點:模型復雜、計算耗時。
比如LR模型就算特征再多,它只是查表加在一起做指數運算就出來了,像DNN、GBDT就會非常復雜,導致計算過程比較慢。
總結:Logistic Regression即能處理連續值又能處理離散值。DNN幾乎不能處理離散值,除非做特殊的預處理。
2.4 模型融合
前面講過每個模型都有自己的特點:Logistic Regression 處理特征量大,大概在2010年前后開始大量應用于業界,很難有模型能完全超越它;DNN可以挖掘原來沒有的東西。我們就想這兩個模型能不能將優點進行融合,揚長避短,從而得到更好的結果。
第一種方案:CTR Bagging
有多個模型,將多個模型的輸出CTR加權平均。
實現方法簡單,模型之間不產生耦合。
可調參數有限,只能調Bagging權重的參數,不能調其他東西,所以改進空間相對較小。
第二種方案:模型融合
任一模型的輸出作為另一模型的特征輸入,彼此進行交叉。
實現方法復雜,模型之間有依賴關系,因依賴關系復雜,風險也比較高。
好處是實驗方案較多,改進空間較大。
我們選了后一種方案,因為單純CTR Bagging太過簡單粗暴了。
2.5 模型融合的工程實現
目標
可支持多個不同模型的加載和計算
可支持模型之間的交叉和CTR的bagging
可通過配置項隨時調整模型融合方案
避免不必要的重復操作,減少時間復雜度
解決方法(引入ModelFeature的概念)
模型本身也看做一個抽象特征
模型特征依賴于其他特征,通過計算得到新的特征
模型特征輸出可作為CTR,也可作為特征為其他模型使用
限定ModelFeature的計算順序,即可實現bagging模型交叉等功能
2.6 模型融合模型融合流程圖如下:
首先線下,將PV、Click、Session做成一個sample。
然后把sample做成特征,包括OneHot、CTR。
分別將OneHot、CTR傳送到各自模塊的train,就會得到相應的模型。
線上,Bidding Server 會經過 Retriever Server召回廣告。
然后傳給Quality Server進行計算,它是通過One Case存儲和這個查詢相關的所有信息。
Quality Server會把One Case里的信息轉換成One Hot特征。
然后將結果存到特征池,特征池包含所有特征。
LR模型從特征池里讀取數據,而后計算出CTR,還包括其他增量信息。
將這些回送到特征池。
此外DNN模型也會讀取特征池里的信息,并將最終計算結果回傳給特征池。
CTR可以從特征池里直接取出,然后進行后續的操作。
我們去年將這套框架部署到線上,并持續進行改進,在線上運行了半年多,基本能適用于業務的發展:曾經上線了LR和DNN的交叉,還上線了LR和GBDT的融合。GBDT會將過程信息回傳給LR,由LR完成最終輸出。此架構經過生產系統的檢驗,運轉正常。
2.7 模型效果評估
期間我們會做很多實驗,比如DNN訓練比較耗時,線上也比較耗時,因此我們會進行多種優化和評估。那么就涉及到一個問題,如何評估一個模型的好壞?線下指標主要采用AUC,定義如下圖所示:
我們來分析下這個圖,選定一系列閾值將對應一系列點對,形成一條曲線,曲線下方的面積總和就是AUC的值:紅線就是純隨機的結果,對應的AUC是0.5;模型越好,曲線離左上角就越近。這個值在我們模型評估里用得非常多,該值考察的是模型預估的排序能力,它會把模型預估排序結果和實際結果進行比對運算。該值很難優化,一般而言,AUC高,模型的排序能力就強。
線下指標AUC很重要,但我們發現單純靠這指標也是有問題的,不一定是我們的線上模型出了問題,可能是其他的問題。做廣告預估,AUC是線下指標,除此之外,最核心的指標是上線收益,有時這兩個指標會有不一致的地方,我們也嘗試去定位,可能的原因主要有:
Survivorship bias問題:線下訓練時所有的數據都是線上模型篩選過的比較好的樣本,是我們展示過的比較好的廣告,一次查詢三條左右,但實際上到了線上之后,面臨的場景完全不一樣。前面講過RS篩選出最多近千條廣告,這些廣告都會讓模型去評判它的CTR大概是多少,但實際上訓練的樣本只有最終的三條,對于特別差的廣告模型其實是沒有經驗的。如果一個模型只適用于對比較好的廣告進行排序,就會在線上表現很差,因為從來沒有見過那些特別差的廣告是什么樣的,就會做誤判。
特征覆蓋率的問題,例如:我們有個特征是和這個廣告自身ID相關的,該信息在在線下都能拿到,但真正到了線上之后,因為廣告庫非常大,很多廣告是未展示過的,相關的信息可能會缺失,原有的特征就會失效,線上該特征的覆蓋率比較低,最終將不會發揮作用。
2.8、并行化訓練做DNN會遇到各種各樣的問題,尤其是數據量的問題。大家都知道模型依賴的數據量越大效果越好,因為能知道更多的信息,從而提升模型穩定性,所以我們就會涉及到并行化訓練的事情。
加大數據量,提升模型穩定性
我們做搜索廣告有一個重要指標:覆蓋率,是指此情況下是否需要顯示廣告。覆蓋率高了,用戶可能會不滿意,而且多出來那些廣告多半不太好;但如果覆蓋率很低,又等于沒賺到錢。這個指標很重要,所以我們希望融合模型上到線上后覆蓋率是可預測的。
我們發現這個融合模型會有自己的特點,上到線上之后會有些波動。例如:今天我們剛把模型覆蓋率調好了,但第二天它又變了。然后我們分析,可能是因為數據量的問題,需要在一個更大的數據集上訓練來提升模型的穩定性。
加大數據量,提升模型收益
其實就是見多識廣的意思,模型見得多,碰到的情況多,在遇到新問題的時候,就知道用什么方法去解決它,就能更合理的預估結果。
我們調研了一些方案,如下:
Caffe只支持單機單卡
TensorFlow不支持較大BatchSize
MxNet支持多機多卡,底層C++,上層Python接口
MxNet我們用得還不錯,基本能達到預期的效果。
三、若干思考
3.1 Deep Learing的強項
輸入不規整,而結果確定。
例如:圖像理解,這個圖像到底是什么,人很難描述出到底是哪些指標表明它是一個人臉還是貓或狗。但結果非常確定,任何人看一眼就知道圖片是什么,沒有爭議。
具體到我們的廣告場景,廣告特征都是有具體的含義。例如:時間信息,說是幾點就是幾點,客戶的關鍵詞信息,它寫的是什么就是什么,文本匹配度是多少,是高還是低,都有確定的含義。
3.2 CTR預估
輸入含義明確,場景相關,結果以用戶為導向。
例如:一個查詢詞,出現一條廣告,大家來評判它是好是壞,其實它的結果是因人而異的,有人覺得結果很好,而有人卻覺得一般,它沒有一個客觀度量的標準。所以我們認為CTR預估跟傳統的DL應用場景不太一樣。
我們DNN用到線上后,收益大概提升了百分之五左右,但相對Deep Learing在其他場景的應用,這個提升還是少了些。語音輸入法很早就有人做,因為準確率的問題一直沒有太大應用,但Deep Learing出來后,比如訊飛及我們搜狗的語音輸入法,用起來很不錯,準確率相比之前提高了一大截。
3.3 未來方向
Deep Learing既然有這些特性,我們會根據特定的業務場景進行應用,比如在某些情況下把它用上去效果會很好,我們還想做一些模型融合的事情。
我們做實驗發現把DNN和LR融合后,最好的結果相比LR本身,AUC大概高不到一個百分點。我們也嘗試過直接把DNN模型用到線上去,效果很差,就算在線下跟LR可比,但到線上后會有一系列問題,不管是從覆蓋率還是從最終收益都會有較大的差異,這是我們在搜狗無線搜索數據上得出的實驗結論,大家在各自的業務場景下可能有所區別。
如果你們沒有足夠經驗去手工做各種交叉特征的設計,直接用DNN可能會有好的成果。如果在非常成熟的模型上做,可能需要考慮下,收益預期不要太高。
本文來自搜狗資深研究員舒鵬在攜程技術中心主辦的深度學習Meetup中的主題演講。演講整理:余清蘭。