深度學習新技術在搜狗搜尋廣告中的深化應用
配套PPT下載,請識別底部二維碼關注社群公眾號,後臺回覆【 1212 】
分享嘉賓: 舒鵬 搜狗 專家研究員
編輯整理: 王彥斐
內容來源: DataFun AI Tal k《 深度學習新技術在搜狗搜尋廣告中的深化應用 》
出品社群: DataFun
注:歡迎轉載,轉載請註明出處。
大家好,我是來自搜狗搜尋廣告應用策略研究組的舒鵬,目前主要負責搜尋廣告演算法研究工作,今天的題目是深度學習新技術在搜狗搜尋廣告中的深化應用。深度學習技術已經出現很多年,它在各個場景中都有應用,本次演講的重點是在特定的一些任務方向,在我們覺得比較合適的一些任務上的典型使用方法,而不是關於深度學習本身的基礎演算法。
本次演講的內容主要分為幾個部分:第一個部分是搜尋廣告的背景知識;然後我們會挑兩個比較典型的場景來講述一下它的大概應用,一個是自動化創意,這個大家可能會比較陌生,我待會再講解什麼叫創意以及什麼叫自動化創意;另一個典型場景是點選率預估,前兩位老師都講了很多關於這方面的內容,我主要介紹一下我們搜狗在搜尋廣告點選率預估模型上的整個演化過程,給大家提供一個參考,最後是我的一些思考。
這個是我們搜狗搜尋廣告的一個典型流程。首先我們在查詢之前一般都會有一個資訊需求,你想了解某些東西或者想查證一些知識,然後你才會用搜索引擎來進行一個搜尋的行為,它一般來說是以查詢詞的形式來體現你的搜尋意圖,現在也會有一些語音搜尋,或者說圖片搜尋產品,但這種基於文字的查詢仍然是一個主要形態。我們的客戶會覺得,他既然提交了一個查詢請求,那麼可能就會有商業意圖。所謂商業意圖,就是指這個行為本身是有商業價值的,它不單單是說使用者的購買傾向,也可能會是其它的一些形式,比如說下載傾向,或者說諮詢傾向都可以稱為商業意圖。當有了這個商業意圖之後,我們會進行後續的一系列處理。跟資訊流廣告或其他型別廣告不同,搜尋廣告客戶通過關鍵詞來表達投放訴求,比如一個賣蛋糕和鮮花的客戶,就會買些關鍵詞,蛋糕購買或者鮮花速遞,通過這些詞來表達訴求,這樣就會形成廣告庫,所有客戶所有廣告的結構化集合。有了廣告庫,第一步是要從中選出哪些客戶的投放訴求跟當前的查詢需求匹配,一般稱為廣告召回。然後我們會做一個點選率預估,用來評價具體的投放訴求對當前查詢的吸引程度,基於它來做後續的排序和計費,並對最終結果進行渲染展示。使用者可能會感興趣並點選瀏覽,我們會把整個過程用日誌完整記錄下來,用於後續優化。在這個過程中,我們會貫穿一個思想,自動化,不是指單純利用機器完成整個拍賣過程,而是如何把客戶表達投放訴求、使用者表達查詢意圖,以及兩者的匹配做成一個完整的自動化流程,儘量減少人工干預。大家可以想一下廣告的本質是什麼,就是收取客戶費用幫他達成一定目的。搜尋廣告客戶是通過關鍵詞的一個個投放來表達不同訴求,本身是一種很複雜的業務形態,有很多問題需要研究,為此專門成立了 SEM這個學科。對於一些中小廣告主或者說資源不是很充足的客戶來說,他沒有精力去維護優化這麼龐大的投放系統,更需要廣告平臺來幫他做一些加快投放效率的工作,我們稱之為自動化,後續會進行詳細的介紹。
這是搜尋廣告技術和機制理論上涉及到一些東西:首先是自然語言理解,這個大家應該都能想到,使用者提交一個查詢請求,到底想表現什麼意圖。語言本身是一個高度精煉的表述,有很多歧義:比如搜 “蘋果”,可能是指水果,也可能是手機;還有一個典型case,mac,可能是筆記本,對吧,也可能是一款口紅。我們需要知道查詢本身的意圖是什麼,解決這個 問題的基石就是自然語言理解。後續很多種任務,都以它做為基礎。然後會對使用者查詢做一個深入的分析,對客戶需求也會做很多分析,就會形成我們的檢索和推薦系統,來解決很多實際問題:比如剛才提到的廣告召回、點選率預估、相關性、 badcase過濾、 排序機制以及自動化創意等。當然,在技術層面之外,搜尋廣告的市場份額主要來自商業模式的創新,也就是競價博弈機制:一個東西大家都想要,那到底給誰?我們通過競價博弈機制來解決:客戶通過價格來表達他對這個使用者查詢的渴望程度,然後系統會據此並結合廣告質量來綜合排序,達到平臺、使用者、客戶三方利益的平衡點。使用者得到比較優質且免費的搜尋服務,客戶得到推廣效果,平臺獲得收入進而優化系統以提供更好的服務。總之,搜尋廣告會涉及客戶競價行為的研究、使用者體驗的分析保證、點選轉化效果的評價、博弈機制的設計,這些會對檢索和推薦系統提供整體指導。
如果大家真實投放過廣告,可能會知道搜尋廣告和資訊流廣告的投放模式完全不同,著眼點不同,要求也不一樣。總體來講,搜尋廣告體系非常複雜,我們今天時間有限,只是講其中一兩個比較典型的任務,例如自動化創意,我們先拿它來給大家來做一個深入的闡述。這個自動化創意就是剛才提到的,如何幫助客戶提高他的投放效率,同時幫助我們提高廣告質量,達到一個雙方共贏的最大化收益。
這是自動化創意的一個基本流程。我先解釋一下什麼叫創意:創意這個名詞很早就出現了,不知道大家看沒看過一部美劇,廣告狂人,講的是 20世紀60年代美國廣告行業的發展過程。這部美劇 主要涉及電視廣告,把一個點子或者說一種想法稱為一個創意,就是指如何把投放目的融合到行為當中並展現出來。拿搜尋廣告來講,創意就是廣告本身的文案,標題怎麼寫,描述怎麼寫,配什麼圖片,配什麼子鏈,目的都是為了帶來更多的流量,讓使用者對商家經營的業務提前有更多的瞭解,形成更高效的轉化。右圖是廣告示例,但這個圖不是客戶原始廣告的模樣。一個普通廣告,一般只有一行標題、一行描述和顯示連結等資訊,蛋糕圖片和下方三行子鏈都是沒有的,這是系統自動做的配置:哪些素材跟當前廣告比較匹配,系統會自動配上去。具體怎麼做呢?大體上分為四步:首先,要想做這個工作,必須得有素材來源,所謂來源,就是指候選創意集合,有一些比較好的圖片、或比較好的文字片段、子鏈,才能做後續的優化工作。那這個候選創意集合怎麼來的呢?大概會有兩種方式:一個是創意挖掘,現在有的東西把它找過來,會有些來源,包括從客戶著陸頁網站來挖掘,以及從客戶行為或使用者行為層面來獲取;還有一個,創意生成,就是創造一些之前沒有的素材,讓系統自動寫出一些比較符合當前意圖的描述或者片段,這種方式大家應該也聽過,比如讓機器來自動寫一些詩歌,譜一些曲子,或者畫一些漫畫,有一些技術已經在應用,我們也會用到這個系統裡去。有了來源之後,我們會做第二步,匹配,所謂匹配就是指創意候選集非常多的情況下,哪些跟當前廣告是比較相關的。會涉及兩個問題:一個是短文字相關性,就是這兩者是不是一回事,短文字相關性非常重要,語言本身非常複雜,而且有歧義的存在,所以通常來講,機器很難判斷出來兩者到底是不是相關,需要有些特定的演算法來解決這個問題;其次是圖文匹配,就是圖片和文字到底是否匹配。匹配之後呢?我們會有樣式優選,這個樣式優選怎麼做?假設當前有很多創意,最終選哪種樣式的創意?這個任務跟創意匹配不太一樣,創新匹配是說樣式確定的情況下,如何選擇創意片段。樣式優選是指,前一步確定完之後,多種樣式可以出,最終選擇哪種樣式。這些工作做完之後會做一個創新展示,就是素材的組裝渲染,達到右圖這樣一個效果。這個圖片跟我們當前線上的不太一致,國家法規已經不允許使用這種灰色字樣的標記,此處僅為示例,用來說明總體的流程。
下面會對各個步驟分別闡述。
第一個是創意來源,剛才講創意來源有兩大類:創意挖掘,創意生成。對於創意挖掘,列了三項,都有豐富的內涵:一個是使用者行為分析,搜尋引擎每天都會收到大量查詢,因為國內常用的搜尋引擎並不多,也就三四家的樣子,每天的查詢量一般都是在億這個數量級之上,這麼多使用者的行為是有高度價值的,我們如何從這裡面做一些挖掘,這就是使用者行為分析;其次,落地頁分析,就是客戶的投放網站分析,比如客戶買了一個詞叫 “鮮花快遞”,那對應的落地頁中通常來講是有相關內容的,不會是賣車的,不然對客戶來講也達不到預期的效果,所以落地頁中肯定會有一些內容跟鮮花速遞這個詞是匹配的,可以以此做一個來源;最後是購買行為分析,同一個業務很多 時候不止一個商家來做,會有多個廠家同時做一塊業務,他們的關鍵詞購買既有競爭關係也有關聯關係,如何利用這種行為資料來做一個拆解,獲得我們想要的東西,這就是購買行為分析。然後再講創意生成,創意生成最近這些年才比較流行,其實很多年前就有類似的事情,例如 MSRA做了一個對聯生成系統,你出上聯我出下聯,這個實際上也是一種基於生成式思想的產品。只是原來用的不是深度學習,深度學習流行了之後,就會有很多種方式來做這件事情:典型的比如GAN,這也是前幾年剛出現的;還有一些基於seq2seq 的翻譯模型; CVAE也是生成式模式的一種變種。這幾種方法的目標就是基於給定物料形成一種模式,而後根據輸入來動態的定製化結果。我們最近提出了一個基於CVAE的升級版框架,可用於關鍵詞拓展,大概可分為左半部分和右半部分:左邊可以看作傳統seq2seq 的一種改進,一個編碼器加註意力機制加持的 decoder ;右邊這塊呢,我們希望這個系統具備一些在限定領域生成相關內容的功能,這裡面有幾個關鍵點,一個是限定領域,一個是相關。同時我們又不希望輸出和輸入完全一樣,還是以 “鮮花速遞”為例,如果輸出的結果還是“鮮花速遞”,對我們是沒有價值的,這兩個是一樣的、重疊的,我們希望能得到一些類似“蛋糕”這樣 的結果,一般來說送鮮花可能過生日,使用者可能有購買蛋糕的需求,所以我們需要有些變化,但又不能變化太多,這就涉及到一些度的控制,這個系統裡的一些模組就是做這個事情,比如 Domain Classifiier 就是表達這個訴求的一個分類器, “生成的結果,是不是屬於同樣的一個域”,最後還會用強化學習的思想, 也就是 Reward Estimator 來做這個工作,來評價生成結果的離散程度,生成結果的集中度越低,我認為效果可能越好,因為後邊還會有相似性來保證結果裡面到底有哪些合格哪些不好。這個專案的相關工作,我們今年寫了篇論文,剛投到 WWW2019 會議上,從效果上來看,相比傳統的 seq2seq 效果要更好一些。
創意挖掘是指如何從海量資訊中挑出有價值的東西,這裡選一個場景來介紹, “Session切分”, 使用者行為分析的一個子任務。做過搜尋的同學對這個估計比較熟悉,所謂 Session切分是指,一個使用者在一定 時間之內,在搜尋框中連續輸入並提交了多次查詢,這些查詢本身可能會有一定關聯性,如何識別這種關聯性。比如說使用者先搜了 “王者榮耀”,接下來搜了“李白”,這個李白肯定不是寫詩那個李白對吧?更可能指的是遊戲中的一個英雄,兩個查詢詞就會形成一定的關聯性。這個資訊是使用者輸入的,價值非常高,可以讓我們的系統不斷更新,由於這是使用者自發的行為,會把很多新的東西或者說使用者以為的東西提交到系統中,相當於有了一個源源不斷的素材庫。那如何做這個工作,把這個Session 切分開,怎麼判斷這個使用者前後的搜尋是相關的呢?還拿剛才那個例子,有多種可能:使用者是個小學生在剛玩遊戲的時候先搜個遊戲的介紹,突然間被媽媽叫去寫作業了,他需要找一下詩人的相關介紹;還是說使用者是一個剛下班的碼農,先搜個遊戲,然後又想檢視其中一個角色的介紹。這些都需要做一個切分,也就是 Session 切分,來評價前後兩次輸入是否關聯。傳統的方法會基於一些特徵構建模型來進行分類,我們提出了一種基於 LSTM 和 Attention 機制的 Session切分方式,會考慮這個使用者的連續輸入,用LSTM 網路生成一個編碼,再利用 Attention做隱向量的權重分派 ,對應最終的一個 label,就是說這兩個輸入是不是一回事要不要做區分,模型訓練完之後就可以幫我們來做Session切分的工作。當時取的效果還不錯,比傳統方法有幾個點的提升,相關內容已經發表在2018 年的 SIGIR 會議上,是一篇 poster ,大家如果感興趣可以去看一下。雖然只是用來做使用者行為分析,但有了高質量的片段,以及哪些相關,或者說哪些相似,我們就可以用來做廣告召回,做相關性,都會有一些應用。
接下來講文字相關性,前面主要是做了創意生成,必須得有機制來保證這個內容是符合我們預期的,這裡面都會牽涉到一點,文字相關性計算。文字相關性計算屬於資訊檢索領域最基本的一個課題,大家可以看一看,涉及的研究文獻還是非常多的。它的發展也經歷了好多階段:最早的一個階段,字串匹配,在經典的資料探勘類書籍中多半都有介紹,比如 TF-IDF 、 BM25 以及後續的一些升級等典型檢索演算法。例如基於廣告庫的字串賦權演算法,根據樣本庫可以得到每個分詞片段的權重,來了兩個 query之後,可以對兩者做一個匹配,如果匹配的權重高,相關度就高,權重低,相關度就低,可以得到得分, 據此進行排序,定義閾值之後就會得到一個相關性演算法。但這個演算法是有缺陷的,只是基於字面的匹配,例如 “英雄聯盟”和“LOL”,肯定算不出來,認為相關性是零,但其實是同一個遊戲。第二階段就是語義匹配,會有些topic model 的主題模型,比如 LDA ,或者統計翻譯、同義模板歸一化,還有實體識別來做這個工作,就能解決前面的一些問題,但這樣也不能做到百分之百全覆蓋。然後就是意圖匹配,基於使用者行為資料,比如每天的檢索總共好幾億次或者上 10億次,每個查詢都會有後續的一系列點選行為,兩個不同 的 query ,如果點選的網頁列表非常相似,這兩個 query 是不是一回事,可以採用二部圖挖掘或者 SVD++來挖掘這種關聯關係,這是意圖匹配。第四階段就是深度學習,自從深度學習出來之後,這個方向就非常火,而且看起來也很酷,大家乾的事情都差不多,從網上下一個模型然後跑一下,跑通之後換成這個資料灌一下,然後看結果對不對,如果對就上線,不對就換個模型再試一次,或者把引數調一調。雖然描述一下是這樣子,但實際上大家還是需要有一些理解。也不是說深度學習出來之後傳統方法就沒有意義,它照樣是有作用的,典型的深度學習演算法效率一般比較低,如果任務本身是一個QPS非常高,計算複雜度非常高的場景,可能會需要有一些比較簡單的方法來做一些初級的篩選,包括剛才提到 的字串匹配,這個功能現在還是很有用,只不過需要對它做一些新技術的加持,而不是直接把它拋棄。如果單純的靠深度學習可能好多工還是解決不了,或者解決的不夠好。具體到這裡面涉及到的幾個技術, seq2seq 及神經機器翻譯,基於一個素材庫,在已經有語料的情況下,如何構建一個模型框架,基於資料訓練出一些表達網路,而後進行 query 的描述,或者其他內容的描述,然後進行一個匹配計算。
這是我們 16年發表 的一篇論文,提出了一種不需要分詞的問答系統匹配演算法。早些時候,做中文文字相似性計算,或者檢索相關的任務,都需要先做一個分詞,需要先將 query切分成若干term片段,然後再對term進行後續操作。這樣會有一些問題,比如典型的word2vec 演算法,對於中文語料庫來講,分完詞之後, term 粒度至少在百萬量級才夠用,而每個 termID可能會對應一個50維或100維的向量,這樣會導致單純向量檔案就有兩三個G這麼大,記憶體開銷會比較大,那麼有沒有好一些的辦法?其實這個思想已經大規模的在用了,不知道大家有沒有試過。深度學習特別好的一點,就在於不需要特別繁瑣的過程,端到端 ,特別簡單粗暴。具體到這個任務,中文也好英文也好,直接把 query 輸入進去,對每個字母、每個數字、每一個標點符號,或者每個漢字,都直接基於向量查表的方式來進行學習,只要模型或者網路設計的足夠好,那麼對單個字元也能學習到不錯的一種結果。有了這個結果之後呢,就可以進行後續的一些計算,常用漢字,高中畢業或初中畢業需掌握的水平,可能也就 2000個字,加上一些比較難的字,生僻的字, 也不會超過 1萬個,這樣一個大概1萬行50列或一百列的矩陣就能把這個資訊儲存下來,後續再做一些文字相關性計算時,可以結合字元的權重來做query的編碼,進行後續的任務,這樣記憶體消耗就可以降下來。當時的結論,相比原來需要分詞的演算法,效果上來講應該是基本持平,但是可以降低記憶體,還能降低演算法流程的複雜度。原來可能需要分詞,然後做後面的操作,假如分詞本身做了一個升級,後面很多東西都需要變,但如果採用這種方式的話,就可以把這部分繞過去,流程得到簡化,故障就會減少,這是它的一個意義所在。這個成果當時發表在CIKM上,是一篇短文。
這頁 ppt主要講圖文 匹配,非常典型的演算法,大家應該都用過,我也就不多講了。
然後就是樣式優選,流程比較複雜,大家如果不做廣告,可能不太理解是做什麼的,我稍微解釋一下。我們任何一種演算法要上線,必須得跟實際的業務場景進行結合,對於搜尋廣告來講,它的場景非常典型,位置很有限,按主管部門規定,一個頁面當中廣告的佔比不能超過 30%。同時有很多種樣式,我們的產品會做很多的設計,每個樣式有不同 的特點,比如說有些樣式獨佔,同一個頁面最多出一次,有些樣式只能出在首條。在這種業務限制下,我們如何設計一種機制,選出最佳的廣告組合。這個流程是一個基於貪心的設計,本質上來講,先選首條,再選後續的結果。理論上應該把所有組合都把它給列出來,挨個計算,選擇最優的,但這種方式在線上不可用,計算資源消耗非常高。假設你的 QPS 或一天流量在幾個億這個規模,每次一個 query 過來,可能會召回上百條廣告,每天就有百億以上的計算,所以說不允許採用太過複雜的方式。大家如何能夠設計出一種非常清晰的描述,在做什麼事情之前要想清楚到底要幹什麼,只有這樣,後面才能做好,而不是說單純的為了上線,或者單純的上一個演算法。
上面講的任務場景很多,跟相關性、召回觸發、文字生成都有關係,那麼關鍵點在哪?我理解關鍵點就是資料,前兩位老師應該也都強調過,我根據他們說的稍微作一點補充。我理解資料一般有兩個維度,一個是規模,一個是質量,這兩個維度通常不可兼得,規模大了之後質量一般會下降,或者質量高規模一般不會太大。比如說我們現在想要一些文字相關的資料,可能需要找眾包或者自己招勞務做標註,不知道大家是不是瞭解這個價格,通常來講如果任務稍微複雜一點,一條標註就需要兩毛錢甚至一塊錢,還是很貴的。比如 100萬條樣本,其實是一個比較小的資料集,卻需要很多資金才能完成,尤其有些時候很難證明資料規模上去之後演算法一定會好,那怎麼去申請這個預算。所以大家首先要搞清楚到底有哪些資料,要積極尋找當前產品的關聯資料,你做廣告,那麼使用者行為能不能 用到,雖然是做商業的,但使用者產品的行為我能不能用到,客戶購買行為能不能用到,要找一些跟現有資料來源不太一樣的東西,這個其實就是盤點可用的資料資產;然後需要積累更長時間的資料,有效利用,這是資料規模。還有資料質量,資料質量是指兩方面:一方面是如何在低質量資料下做一些比較高效的演算法,其實就是需要探索一些基於大規模無標籤資料的有效演算法,資料規模上去之後,即使有些噪音,但規模大也能緩解這些問題。在文字相關性演算法中有個 DSSM模型,應用非常廣泛, 也有很多改進,利用 query 和 title 之間的偏序關係進行訓練,模型設計並不複雜,但之所以有好的效果,就因為可以利用大量無標籤偏序樣本。例如一天網頁查詢有十個億,平均頁面點選率百分之百,就有十億條點選。而點選了的 title 和沒有點選的 title ,就能構造成一對偏序樣本,可簡單認為點選的要比不點選的好,一天就有十億條樣本,再加入一些隨機負樣本,就會更多,積累幾天,可能就在百億規模以上。即使我的演算法框架不是很複雜,也可以做到比較好的效果。我們一定要想一下,看當前有哪些比較好的還沒有利用的資料想辦法利用上。另外,單純靠這一點,很多問題解決不來,例如一些典型的場景,像品牌詞識別,需要知道客戶填的物料中哪些是品牌詞,然後識別出來,才能去除,或者做一些變換,給其他客戶來用,這種問題一般高度依賴人的經驗,或者說需要補充一些知識庫來解決疑難雜症。如果發現模型訓練之後效果很不好,特別在一些典型 case上效果不好,那就可以考慮加一些針對性的樣本,可能就會得到改善,這個是資料質量 。
前面講的是自動化創意方向,對於搜尋廣告來講,自動化創意這個方向我理解非常重要,其他廠商應該也在做,效果都很好,可以讓客戶從繁重的工作中解脫出來,那麼他就有精力去幹別的事情,沒準加點預算就可以把收入做上去。接下來再講一個典型任務,點選率預估。
點選率預估前兩個老師都講了,有些地方我會講得快一些。這是一個大概的模式,大家應該也都瞭解,我們首先要有 data,一般來自於查詢日誌和點選日誌;然後構建一些特徵,可能會有好多類,比如查詢的特徵、廣告的特徵或者匹配的特徵;基於這個來進行模型的訓練,包括線性和非線性的;然後進行線上部署,線上的流程其實跟線下基本一致,也包括特徵抽取、點選率預估和排序,大概這幾個模組。
搜狗搜尋廣告經過了很長時間的演化,最早的點選率預估模型,主要基於 liblinear ,大概是 08年一個臺灣老師提出的,有些同學可能比較清楚,這個工具包當時還是非常好用的,後來才有了LR模型的大規模應用。包括特徵工程,以及FTRL、FM等LR模型的變種 。到現在為止, LR還是非常有效的,因為它非常簡單,就是一個線性模型,原理和公式,一般人看兩遍基本上都能看懂,不像深度學習,大家看完不知道它說的是什麼。接著大家繼續探索,就有了非線性模型,包括GBDT、 DNN以及一些級聯融合模型, LR+GBDT或LR+DNN。最後是深度融合模型,包括Wide&Deep和NFM這些。上面提到的我們都嘗試過,或者說在線上上線過,逐步迭代。
這頁我會挑重要的介紹一下。一個是級聯融合模型,剛才羅老師也講過,怎麼做模型融合,我介紹的是搜狗線上的一個模組,如何把這個想法在線上實現。這裡的關鍵點是 ModelFeature的概念,就是把模型本身當成一個特徵。這頁PPT是LR和DNN的級聯融合,分online和offline兩部分:比如offline的時候,有PV、Click和Session,形成Sample, 也就是樣本,經過 FeatureMaker也就是特徵抽取,會形成兩類,一類是one-hot這種離散特徵,然後做LR Train得到LR Model,LR Model 反過來會把它的結果也就是模型特徵放到裡邊,包括 ctr的特徵和模型中間結果,經過DNN Train得到DNN Model,部署到線上。
這時候就有兩個模型, DNN和LR。在線上我們的工作也類似,前端收到流量進行召回,然後到QS ,也就是排序Server,首先抽取OneCase,也 就是一個樣本,然後會得到離散特徵,並進入特徵池,可以做一個查表, 通過 CTR Table 得到 COEC特徵,就會得到DNN ModelFeature的輸入 ,而後把結果和 LR回饋的結果結合作為最後的CTR輸出。如此就可以通過配置項 靈活上線,包括兩個模型各個權重多少,那麼就會得到一個最終的結果。這種方式能夠保證靈活上線。
接下來講 wide&deep 模型,剛才講的 LR+DNN模型應該是16年左右推到線上,wide&deep 是 17年, 也就是去年的工作。這個模型是 16年穀歌應用商店推出來的,用來做APP檢索排序。這個模型大家很喜歡, 我覺得主要是因為名字起的特別好, wide這個是寬,就是說廣度非常大,deep就深,就是說深不可測,大家一般都喜歡一個人瞭解的又多又深,這個名字一聽就懂,所以我覺得這個模型很流行,名字起了 很大作用。具體到搜狗搜尋廣告來說,我們用的是 Mxnet 的實驗框架,不知道有沒有人熟悉,這是亞馬遜主推的一個框架,是中國一個同學在博士生期間寫的。現在大家可能主要用的是 Tensorflow,我說一下當時選MxNet 的理由, 16年我們在做DNN 模型上線時,面臨一個問題,模型怎麼去訓練,搜尋廣告本身跟展示廣告不太一樣,特徵空間會大一些,因為涉及很多文字特徵,會有大量特徵來表述查詢詞和廣告 keyword,以及一些交叉特徵和匹配特徵。 如果特徵規模非常大,同時樣本量也非常大,一天可能有數億樣本,一般用60天或90天的資料, 而且每天都要更新,就會涉及到訓練效率的問題。 16 年解決大規模樣本訓練時,也想過 TensorFlow,但是它剛釋出,用的時候,會發現很多 問題,資料載入不了,或者訓練完退出不了,我們就在 TensorFlow的官網上發個帖問一下,有沒有碰到類似的問題,後面就會有一些回帖,說也碰到同樣的問題,但沒有解答,這是當時的一些情況。所以我們後來就用了MxNet ,它的實現方式相對簡單一些, TensorFlow大家現在用的很多,但對底層體系其實是沒有更多瞭解的,比如日誌列印,除錯時想往裡面加程式碼, TensorFlow用起來不是很方便, 因為需要基於 google的那套日誌體系 ,至少當時是這樣子,但 MxNet就會好很多,這是我們當時選擇它的理由。16年的時候我們把LR+DNN 上到線上,效率還可以,拿了十幾臺 GPU機器聯合起來,大概幾個小時能跑出來幾十億樣本上的結果,到去年我們做Wide&Deep的時候,因為慣性,或者說17年的時候TensorFlow也還沒準備好,我們就也用了MxNet。
推一個新模型上線,是比較複雜的一個過程,尤其是比較大的模型改造,牽涉很多工作:比如怎麼保證模型的穩定性,上線的正確性,以及訓練的時效性,至少每天更新,或者說一定時間範圍滿足這個條件。在上線之前,我們用 TensorFlow也做過一版實驗,它的價值還是 很大的,我們可以在一個小的樣本集比如千萬、 5000萬或者1000萬這個樣本集上試一下,看Wide&Deep模型的 效果,因為有開源實現直接調庫就能做這個事情。 TensorFlow 上的小樣本實驗表明,相比 LR+DNN融合模型,wide&deep 在 AUC上是漲的,做這個事情是 有價值的,接下來要考慮怎麼進一步解決大樣本訓練的問題。用 MxNet有幾個關鍵點:第一,原生系統只支援稠密特徵,也就是浮點值,深度學習涉及 的向量基本上每位都是有值的,是稠密的, MxNet 是基於這種情況來設計的,而搜尋廣告有很多文字類特徵都是離散的,量非常大又很稀疏,所以需要把 MxNet 改造一下來支援 Sparse Tensor ,這是第一步的工作,不做這個後面是沒法繼續的;第二是需要深度定製 Embedding層,原來的DNN模型不用做Embedding的工作,線下已經做好了,利用word2vec進行融合,或者COEC這種特徵直接放進去,就沒Embedding這層,但Wide&Deep卻會牽扯到MxNet 的 Embedding層效率是不是夠的問題,需要對它進行定製來提高訓練速度;第三,原本parameter server的 引數更新是在 CPU中,會牽扯到CPU和GPU的資料交換,非常浪費時間,所以我們挪一下位置,放到GPU裡來減少中間開銷;第四,這一點一般人不會碰到,不知道大家用的伺服器網絡卡都是什麼配置?通常來講都是千兆或者萬兆網絡卡,其實還有非常好的網路 裝置,就是 IB卡,速度能達到56Gb 每秒,這是官方標稱的,我也測過,能達到類似的水平,比萬兆網絡卡還要快 5倍左右。網路規模上去之後,引數量非常大,訓練過程中需要不斷進行引數的交換,如果網速太慢,會導致訓練效率很低,所以我們就用了IB卡,滿足了這個需求。一開始我們在訓練的時候發現網絡卡經常是滿負荷的狀態,導致訓練一直不充分,效率非常慢,訓練一小批資料就需要十個小時甚至更長,達不到我們的要求,當時本來想跟運維提個申請,把網絡卡升級一下,運維那邊答覆網絡卡不太好換,又找了更資深的同事來問,發現我們還有更厲害的IB卡,改了一個ip之後,訓練速度比原來提高了十倍。所以大家在做事情時可以思維發散一些,很多時候不是必須通過演算法優化來解決問題,有時候換一下機器,或者買一個裝置, 解決更快,總之需要有一些想法,來解決實際中的一些問題;最後一點,我們需要進行優化演算法的選擇和引數的調優,加大 embedding維度, 使訓練更充分。這五點做完之後呢,還會面臨一些問題,拿十二臺 512G記憶體的 機器來訓練,只能載入 30天的資料,這時記憶體就滿了,該怎麼辦?可能就需要流式載入,配合Hadoop來不斷的從網路獲取資料,讀入記憶體,然後交換資料這麼一個過程,來解決多天資料訓練時記憶體不足的問題。這幾個問題都解決掉之後,最後能達到一個效果,在百億規模樣本、十億特徵空間的情況下,能夠在5到8個小時內訓練一個模型,推到線上供我們使用,上線之後效果還是 很不錯的。
那麼如何評價一個模型效果的好壞呢?剛才羅老師也講到了,我再補充一下自己的看法。第一個就是 AUC,搞模型的應該都比較熟悉,這個AUC應該是漲了就好,跌了就不好。可能會有些經驗說法,比如AUC只要提升三個千分點以上,那麼上線一定是有效果的,但前提是做的正確的情況下。再一個就是上線收益,做廣告的都知道,只要有錢賺好多事情都好辦,比如你跟老闆說能漲收入,那麼機器也能給你,人員也能給你,所以說最關鍵的評價指標就是上線收益,上線之後是好是壞。但是,一般是人和機器投入 了,工作做完了才會上線。可能最後發現效果不行,原來跟老闆說上線漲 5%,結果上線之後持平或者下跌,這時我該怎麼辦?線下線上會有不一致的問題,首先需要懷疑的就是上線到底是正確還是錯誤的,這個非常重要,當初設計的一些目的在線上到底有沒有被正確地實現,簡單來說就是有沒有bug,這是第一點;第二點就是Survival Bias的問題,這個問題比較典型,還拿搜尋廣告舉一下例子,線下訓練的樣本都是在線上展示過的廣告,對吧?展示過的廣告本身就 有些特殊,一次查詢最終可能只有三個位置能夠展示,而候選集可能在幾百上千或者上萬個,能夠展示就說明它是比較優秀的,要不然也不會展示,所以線上下的時候,我們碰到的都是篩選之後的資料,但上線之後呢?候選集不再是這些比較好的,需要面臨最原始的那幾千條廣告,會有很多問題之前是沒碰到過的,對吧?這會導致效果出現問題,其實就是特徵泛化性,到底能不能把很多問題都考慮到,在很多場景都能用,而不是隻針對小批量資料。另外就是特徵的覆蓋率,一個特徵線上下能覆蓋 80%的樣本,到線上能不能覆蓋這麼多?考慮這幾件事情,才能進一步分析上完線之後是好還是壞,跟預期是不是一致。這幾個點裡面,一般來說後兩種情況的理論分析比較常見,但實際上來說,還是需要先確認有沒有bug,這個是最重要的一點,做對了其實比做的更炫要重要一些。這是模型效果的評估。
然後是模型這塊我們目前的現狀和計劃。我們已經實現了 Wide&Deep模型的全流量上線而且收益比較好。但受限於線上計算資源,模型複雜度是受限的。接下來我們打算做線上服務拆分,用低功耗GPU來加速,剛才也強調 過,當你黔驢技窮的時候就換機器。好機器一定會比之前效果要好一些,計算速度更快,就可以支援更復雜的網路,嘗試更高階的模型,比如 NFM來提升我們的特徵組合能力。這是關於模型的現狀和計劃。
上面的兩部分,就是深度學習的兩個典型應用場景,一個是自動化創意,一個是點選率預估,跟大家都簡單介紹了一下,最後講一下我的思考。
大家在工作中通常會面臨一些選擇,要不要做探索。一般來說,新技術肯定有它的用處,大家需要做仔細的篩選。解決問題一般有一些思路或者傾向,一種是把模型變得更寬更深更復雜,做自動交叉,注意力機制,或者強化學習,這些都是概念,但到底能否起效,大家可以從巨集觀上來想一下。有些專案在做之前就有一個大概的感覺,能不能用最簡單的邏輯來解釋你做的事情:如果簡單邏輯能說明方法有效,那麼最終多半來說比較有效;如果邏輯鏈條很長,那就說明依賴的條件非常多,而這些條件不見得像你想的那麼可靠,結果可能不一定好。所以大家可以多從巨集觀上想一下事情,在做優先順序調配的時候,先做那些一看就漲收入的專案,而不是說把一個複雜技術用進去,它就能得到提升,需要用其它的方式來證明我們的思路是正確的。給大家舉個例子, 18年的www上淘寶發了篇文章,用強化學習來做訓練,實現GMV的增長。手淘裡面有兩種搜尋,一個是全域性搜尋,就是在手淘首頁上直接進行搜尋,是全站的搜尋,再一個是進入商家之後,在商家內部的搜尋,比如進入服裝店鋪在服裝店內部的搜尋結果。原來的時候,這兩個搜尋是分開的,兩個模型本身獨立,訓練過程獨立,這篇論文用強化學習的思想把兩個資料來源打通,兩個模型同時訓練,內外 兩個搜尋系統能進行連通,這個想法上線之後,得出一個實驗效果, GMV漲了1到2個百分點,就這麼大的體量而言 ,提升是非常可觀的。大家可能需要思考一個問題,這裡的提升來自於強化學習的有多少?把資料來源打通這件事情的貢獻大,還是引入新演算法的貢獻大,一般來說寫文章要有一個新的想法,才好被大家接受。實際專案中還是要有一些思考,直接把資料來源打通,用一些簡單的方式來做,還是用複雜方法來做。複雜方法就意味著不可控,更容易產生 bug。
還有一點,大家有沒有考慮過,實際工作中面臨很多工需要處理,理論上限是什麼?假設我盡了全力,用最優秀的人最好的機器來做,它可能達到一個什麼效果?現在效果如何,中間有個偏差,這個偏差是我們能夠努力來改變的。一般來說突破不了上限,那該怎麼辦呢?能不能換一種別的方式來做?廣告一般有預算分配的問題,可以設計一個演算法來做平滑,保證客戶預算利用的更充分。這是技術層面的問題,有沒有別的方式,比如幫運營和業務做一些更好的報表,讓他們找客戶提一下預算,後面這種方式的效果可能更好,對吧,我們直接把上限提高,而不只是逼近上限。
最後一點,暴力計算是否可行?廣告系統裡有個召回模組,之所以存在的意義,就是做一個初篩,從大量候選集中提前選出一些比較好的,來減少後續模組的壓力。如果我的場景裡可以把所有的候選集都算一遍,是不是就不需要召回模組了?比如某些小 APP的開屏廣告,一個請求來了之後,如果候選集就幾百個廣告,那還要不要做召回?其實可以不用做,直接把這幾百個廣告和當前使用者挨個計算,選擇預估 點選率最高的,這樣沒準也能達到很好的效果。總之,大家在實際工作中可以多一些巨集觀層面的思考,而不是單純侷限於演算法方面的優化或者新演算法的引入,最後達到的效果可能會更好一些。
我今天講的基本上就這 些內容,感謝大家的聆聽。
作者介紹
舒鵬 搜狗專家研究員
舒 鵬 , 搜狗專家研究員 。碩 士畢業於清華大學計算機系, 2010年開始接觸廣告演算法,目前在搜狗負責搜尋廣告的策略研究工作,對於搜尋廣告中涉及的相關核心技術有著深入理解。推動深度學習等新技術應用於搜狗搜尋廣告的線上業務,取得較好成效,並帶領團隊在國際頂級會議上發表相關論文多篇 。
內推職位
公司: 搜狗
地點: 北京
職位: 演算法研究員
郵箱: [email protected],標題註明“搜狗搜尋廣告招聘演算法研究員”
詳細資訊:
演算法研究員
工作地點:
北京
工作職責:
1、負責搜狗搜尋廣告系統的變現能力提升及收入穩定性保障;
2、主要方向:搜尋廣告演算法研究,包括廣告檢索、排序、CTR預估模型研究等;
3、將業界前言技術(深度學習、強化學習等)應用於線上系統,提升收益。
工作要求:
1、熟悉大規模資料探勘、機器學習、自然語言處理中一項或多項技術;
2、工作兩年以上,有大資料量下廣告相關的研究經驗;
3、對於廣告召回、文字相關性計算、點選率預估模型、排序機制等任務中的一項或多項有實際工作經驗。
——END——
DataFun演算法交流群歡迎您的加入,感興趣的小夥伴歡迎加管理員微信:
文章推薦:
「行知」鑲嵌在網際網路技術上的明珠:漫談深度學習時代點選率預估技術進展
看官點下「好看」再走唄! :point_down: