一文梳理主流的排序模型,淺談深度學習在花椒直播排序算法中的應用

將門創投 發佈 2020-01-24T21:36:39+00:00

近十年間,業界排序模型的發展可以說是一日千里,從千篇一律的LR,到2010年FM的提出,再到2014年Facebook提出的樹模型GBDT,這幾年可以看成是現代推薦系統的上半場;而2015年至今可以看成是飛速發展的下半場,幾年之間,以DNN等模型為代表的深度學習網絡,如雨後春筍般

本文經授權轉載自公眾號:花椒技術

關於作者

王洋,南洋理工大學碩士畢業。現於花椒智能工程組擔任算法工程師。主要負責直播推薦算法研發,直播圖像識別算法研發等工作。對推薦排序算法有很深的理解。

排序算法概述

現代推薦系統一般分為召回和排序兩個階段。召回階段一般會用一些成本低、速度快的模型從十萬、百萬量級的候選集中初步篩選,留下千、百個;然後在排序階段用更加精細的特徵和複雜的模型來進行精排,最終留下topK個。

近十年間,業界排序模型的發展可以說是一日千里,從千篇一律的LR,到2010年FM的提出,再到2014年Facebook提出的樹模型GBDT,這幾年可以看成是現代推薦系統的上半場

2015年至今可以看成是飛速發展的下半場,幾年之間,以DNN等模型為代表的深度學習網絡,如雨後春筍般出現,各種模型架構、特徵交叉方式層出不窮,各種新的idea、trick令人眼花繚亂,而深度學習也逐漸成為了CTR、推薦領域的主流方法

本文將沿著這一路線,對這些排序模型進行簡單的介紹、梳理和總結。

一、傳統模型

1. LR

在深度學習崛起之前,LR以其簡單、速度快、可解釋性強的優勢,幾乎壟斷了早期的CTR、推薦領域。

  • 直觀來講,LR模型目標函數的形式就是各特徵的加權和,再通過sigmoid函數將結果映射到0-1之間來表達用戶點擊某個物品的機率,簡單易懂,而且實現時可以並行,速度快。

  • 此外,通過觀察學習到的各特徵權重,我們可以輕易得知哪些特徵比較「重要」,在預測出現偏差的時候,也可以很容易看出哪些因素影響了結果,這就是為什麼說它可解釋性強的原因。

  • 然而LR的缺點也很明顯:由於它是簡單的線性模型,就不能處理特徵和目標之間的非線性關係,而且特徵之間並不是完全獨立的,有些特徵交叉使用會有特別的效果。因此為了讓模型有一定的非線性,當時的數據科學家需要手工做很大量的特徵工程,比如連續特徵離散化、特徵之間的交叉等。但想要提取出高效的交叉特徵,需要充分了解數據和場景,人力成本較高,而且再有經驗的工程師也難以窮盡所有的特徵交叉組合。

既然手工很難,能不能自動尋找特徵交叉組合或者藉助模型進行呢?後幾年中出現了以FM、GBDT為代表的兩種自動特徵交叉方法。

2. FM/FFM

針對LR中特徵交叉的問題,有人提出了下面的多項式模型:

從公式可以看出,模型對所有特徵進行了兩兩交叉,並對所有的特徵組合賦予了權重。

但這種暴力的方法存在著下面兩個問題:

  • 現代推薦系統中往往包含大量稀疏的特徵(如id類),而交叉特徵的維度是原始特徵維度的乘積,並且若且唯若兩個特徵值都為非0時,其對應的組合權重才會被更新到,這會使得大部分交叉特徵的權重缺乏有效的數據進行訓練,無法收斂,而且權重參數的數量直接上升,極大增加了訓練複雜度。

  • 無法泛化到未曾在訓練樣本中出現過的特徵組合中

針對上面兩個問題,2010年德國康斯坦茨大學的Steffen Rendle提出了FM(Factorization Machine)

類似於矩陣分解(MF)的思路,FM為每個特徵學習了一個隱權重向量(latent vector),在特徵交叉時,使用兩個特徵隱向量的內積作為交叉特徵的權重,而不是單一的權重。

通過引入特徵隱向量的方式,直接把原先

級別的權重數量減低到了nkk為隱向量維度,

)。在訓練過程中,又可以通過優化二階項的計算過程,使FM的訓練複雜度進一步降低到nk級別,極大降低訓練開銷。而且FM解決了上面多項式模型中的數據稀疏問題。從公式可以看出,所有包含「

的非零組合特徵」(存在某個

,使得

)的樣本都可以用來學習隱向量

,這很大程度上避免了數據稀疏性造成的影響。

而且隱向量的引入也使得模型可以泛化到未曾出現過的特徵組合中,兼顧了模型的記憶性和泛化性。

工程方面,FM同樣可以用梯度下降進行學習的特點使其不失實時性和靈活性。相比之後深度學習模型複雜的網絡結構,FM比較容易實現的inference過程也使其沒有serving的難題,直到現在也常被應用於召回階段。

3. GBDT + LR

FM雖然綜合效果很好,但是也只能夠做二階的特徵交叉,如果要繼續提高特徵交叉的維度,不可避免的會發生組合爆炸和計算複雜度過高的情況。那麼有沒有其他的方法可以有效的處理高維特徵組合和篩選的問題?

2014年Facebook在論文中提出了一種級聯結構的樹模型,用於解決這個問題。

思想很簡單:

先訓練一個GBDT模型,每棵樹自上而下,每個節點的分裂是一個自然的特徵選擇的過程,而多層下來自然進行了有效的特徵組合,這樣每個葉子節點就對應了樹的一條路徑,也代表不同的特徵交叉組合,這樣後面就可以將所有葉子節點進行編號作為新的特徵,再結合原始特徵,輸入LR訓練最終的模型。

樹模型的特徵組合可以不像FM那樣局限於2階交叉:例如,每棵樹的深度為5,那麼通過4次節點分裂,最終的葉節點實際上是進行了4階特徵組合後的結果。但也不能因此就說GBDT比FM的效果好,因為樹模型也有自身的缺點,比如容易過擬合高維稀疏數據,比如不能並行速度慢、比如泛化性差等。

GBDT+LR的重要的意義在於,

  • 它提出了一種用模型自動進行特徵工程、特徵交叉的思想,某種意義上來說,之後深度學習的崛起,以及embedding的廣泛應用,各種五花八門的網絡結構,都是這一思想的延續和繼承。

  • 它還提出了一種級聯結構,並且每個模型可以分步更新。樹模型訓練慢可以每天甚至每周進行一次大型訓練,而LR模型可以在線上進行分鐘級別甚至秒級別的實時更新。這也為後面的模型提供了一種可以借鑑的serving的想法。

小結

從最早的人工規則排序,發展到人工進行特徵組合的LR模型,再發展到自動進行二階特徵組合的FM模型,到後面高階特徵自動組合的LR+GBDT,這基本就是早期推薦系統排序模型的主脈絡。

再往後,DNN模型的引入,標誌著以深度學習為主的排序模型的崛起。純粹的簡單DNN模型本質上其實是在FM模型的特徵Embedding化基礎上,添加MLP隱層來進行隱式、特徵非線性自動組合。

下面我們將重點介紹近年來獨領風騷的深度學習模型。

二、深度模型

2015年之後,以DNN為代表的一系列深度學習模型逐漸出現,個人認為他們可以歸結為兩類:

  • Wide&Deep為代表的一系列模型,它們的共同特點是自動學習從原始特徵交叉組合新的高階特徵,它們的區別在於wide部分或者deep進行了部分改動。
  • 以多任務學習為基礎的聯合訓練模型,以ESMM、MMOE等模型為代表。

1. Wide&Deep類模型

這類模型的特點是雙塔結構,即一邊是以LR為代表的淺層模型(wide部分)用以學習低階特徵的表達,強調的是「記憶性」;另一邊是以MLP為代表深層模型(deep部分),強調的是「泛化性」,deep部分的結構也大多可以分為下面幾個模塊:

  • raw input->embedding: 把稀疏特徵映射為低維稠密的embedding向量的過程。

  • input_layer:在這一層通常會對各特徵的embedding會做一些聚合操作。

  • input_layer->output: 通常會用幾層MLP的全連接框架連接到softmax作為輸出層。

大多數模型在deep部分的區別只在於input_layer這一塊,不同的模型在交叉方式(隱式/顯式,元素級/向量級),或者特徵之間的連接方式(concatenate/weighted sum/product/BI-interaction/attention 等)或顯示特徵交叉的階數(二階/高階)之間會有所不同,以Wide&Deep、(x)DeepFM、DCN、DIN為例,下面會簡要介紹這幾種模型。

這裡先簡單介紹下特徵交互的方式:

  • 一種是類似於MLP的方式,因其特殊的結構天然就具有學習高階特徵組合的能力,並且引入了一定的非線性;但至於怎麼發生交互組合的,發生了多少階的交叉,我們並不清楚,而且這種建模是元素級的(bit-wise),也就是說同一個域對應的embedding向量中的元素也會相互影響。因此我們說這種特徵交叉方式是「隱式的、元素級的」。

  • 另一種與之對應的是類似於DeepFM, xDeepFM的方式,在模型結構中,明確設計一些子網絡或者子結構,可以對任意高階的特徵組合進行表征。以FM為例,就是向量級的方式明確對特徵二階組合進行建模,這種我們稱之為「顯式的、向量級的」。

Wide&Deep

  • 模型wide部分長處在於學習樣本中的高頻部分,「記憶性」好,對於樣本中出現過的高頻低階特徵能夠用少量參數學習。但因為是LR模型,仍需人工進行特徵交叉組合。

  • 模型deep部分用於學習特徵之間的高階交叉組合關係,引入了「泛化性」。是一種隱式、元素級的特徵交叉。

  • 這種雙塔框架結構的提出極大的促進了後續模型的發展

DeepFM

  • Wide&Deep框架固然強大,但由於wide部分是個LR模型,仍然需要人工特徵工程。DeepFM模型將wide部分替換為FM,可以自動進行特徵的二階交叉。但它的局限也在於只有二階交叉,而沒有更高階的交叉。

  • FM和deep部分共享embedding層,雙邊共同更新權重矩陣。這種share bottom的思想在後面模型中也很常見。

DCN

想要得到任意高階的特徵交叉組合,而不僅僅是二階,但是又要避免產生組合爆炸的維數災難,導致網絡參數過於龐大而無法學習,同時也會產生很多的無效交叉特徵,需要設計一種有「壓縮」能力的,並且足夠高效的網絡結構。DCN就是其中的一種:

向量交叉方式如下:

  • 在保留了MLP結構的基礎上,還額外引入了cross layer network,理論上可以表達任意高階組合,同時每一層保留低階組合,參數的向量化以及獨特的網絡結構也控制了模型的複雜度是線性增長的,不至於隨著交叉階數的增大而發生維度爆炸。

  • 但在xDeepFM論文中指出,DCN的特徵交叉是限定在一種特殊的形式上的,並且還是以bit-wise的方式構建的。

xDeepFM

xDeepFM模型是自動構建交叉特徵且能夠端到端學習的集大成者,它有效的解決了DCN中提到的問題,實現自動學習顯式的高階特徵交互,同時使得交互發生在向量級上。

模型設計了一種獨特的CIN結構,經過外積、卷積等操作來提取特徵的交叉。

並且可以通過控制CIN的層數來顯式控制特徵交叉的階數,並且計算的時空複雜度是線性增長的,而不會出現組合爆炸導致參數爆炸而無法訓練的情況。

  • 集成的CIN和DNN兩個模塊能夠幫助模型同時以顯式和隱式,元素級和向量級的方式學習任意高階的特徵交互,並且保持線性複雜度。

DIN

  • 特點在於拿到當前物品以及用戶所有交互過物品的embedding,之後通過attention network,對每個興趣表示賦予不同的權值,之後進行weighted sum,得到一個匯總的embedding作為針對當前物品的用戶興趣的表示,相當於增加了一步自動特徵選擇。

  • 也反映了模型是服務於場景的這一理念。先觀察到用戶興趣的多峰分布以及部分對應的數據特點,再因地制宜的提出合適的模型進行擬合。

小結

2. 多任務類模型

推薦系統的多目標優化,是目前業界的主流之一,也是很多公司的研發現狀。以花椒直播為例,可以優化的目標有點擊、觀看、送禮、評論、關注、轉發等等。

多任務模型旨在平衡不同目標的相互影響,儘量能夠做到所有指標同步上漲,即使不能,也要儘量做到在某個優化目標上漲的情況下,不拉低或者將儘量少拉低其它指標,力求達到全局最優的效果。

這裡主要介紹ESMM和MMOE兩個模型。

ESMM

論文指出,完整的日誌流程應該包括:

樣本空間如下圖所示:

傳統的CVR任務,只考慮從瀏覽到轉化的過程,即

而本模型還考慮了點擊的過程,並引入了瀏覽轉化率(pCTCVR)的概念,即為在瀏覽的條件下既點擊又轉化的機率,即

也就是下面的公式:

根據這個公式設計的模型如下圖:

  • 用兩個任務共享底層embedding的方式,然後將各自的logit進行相乘來擬合pCTCVR的過程。

樣本的構建為:

模型特點:

在全樣本空間進行建模,避免了「樣本選擇偏差」問題,充分利用了業務數據。

共享底層embedding向量,因為推薦中轉化率是很低的,對應的數據很少,這種共享特徵表示的機制使CVR網絡也能夠從只曝光沒點擊的樣本中更新embedding向量,有利於緩解CVR訓練數據稀疏的問題。

ESMM中的子網絡可以不止局限於本文中的MLP,可以隨意替換成其他模型,也就是說本文為我們提供了一種可擴展的多任務模型架構。阿里後面還有一篇

的論文也是類似的套路。

MMOE

論文指出:一般的多任務模型結構如上圖(a)所示,即對於不同的任務,底層的參數和網絡結構是共享的,然後上層經過不同的神經網絡得到對應任務的輸出,缺點是模型的效果取決於任務的相關性,如果多任務之間關聯較小,採用這種結構甚至會出現互相拖後腿的情況。

因此本論文提出了基於圖(b)的OMOE和圖(c)的MMOE兩種結構,主要思路是每個任務有一個獨立的expert中間網絡,類似於「開關」的功能,通過模型學習,不同的任務可以從相同的底層embedding中提取到側重點不同的特徵,而不是完全共享底層,即達到了「各取所需」的效果,有點類似於上面提到的attention網絡。

之後每個任務接各自的tower模型,得到logit,再和label一起計算loss,然後多目標的loss直接可以用類似weighted sum的方式結合起來組成總的loss。

小結

推薦系統的多任務模型,雖然是排序模型的一大發展趨勢,但多目標學習的難處在於,每個目標的樣本比例是不同的,訓練時如何融合loss、何時停止訓練以及線上各目標的分數如何組合、A/B test如何衡量總體效果等方面,都要經過比較複雜的衡量和考慮,這些都還有很大的發展空間,需要我們來嘗試。

三、排序模型在花椒直播中的實踐

近兩年來,花椒直播緊跟業界潮流,在排序階段進行了多種多樣的嘗試,如(GBDT+)LR,Wide&Deep,(x)DeepFM,DIN,ESMM,MMOE等。下面以Wide&Deep模型為例,簡單介紹下我們的整個排序系統。

首先是離線部分,我們主要用spark/hdfs來處理、存儲數據。主要包括用戶數據、主播數據、實時數據、行為序列等等。下面是我們用到的部分特徵:

生產好用戶、主播畫像後,還要生產一個基於用戶主播交互數據的標籤集,可以是多標籤以便於多任務模型使用,比如用戶瀏覽過哪些主播,是否發生了觀看、打賞、評論、關注等行為,如果發生了,還可以把如看播時長等程度數據作為權重,以便後面進行加權訓練時使用。

之後將標籤集和畫像join起來,就形成了一天的數據集,可以用多天的訓練集共同組成最終的整體數據集來滿足數據量和覆蓋度的要求,這裡要小心不要發生數據穿透。最終的數據集是T級別的,存儲在HDFS上。在訓練階段,單機多卡的配置也滿足不了速度上的要求,因此我們採用了360私有雲的hbox分布式訓練平台,來完成日常深度模型的訓練。

下面是我們的模型結構圖:

下面是我們部分模型的效果:

離線:

線上:熱門頻道接入個性化推薦後人均觀看時長漲幅>80%

後 記

本文只是對業內近年來常用的模型進行的簡單的介紹和總結,實際上每個模型除了其典型的結構外,還有許多非常珍貴的細節,比如公式推導,參數的選擇,工程上的trick等等,這些建議大家還是要精讀下相關模型論文。

並且要注意的是,沒有「最好的模型」,只有「最適合的模型」,並不是說模型越fancy越複雜,線上效果就會越好。比如阿里提出了DIN模型,是因為工程師們首先發現了數據中的現象:

用戶在瀏覽電商網站的過程中顯示出的興趣是十分多樣性的,並且只有部分歷史數據會影響到當次推薦的物品是否被點擊,而不是所有的歷史記錄,即「多峰分布」、「部分激活」。

正是這種特定場景的需要,才使得阿里研發了DIN模型,來捕獲用戶興趣的進化,取得了突破的效果。

所以做推薦正確的順序應該是先有特定的「場景」,然後再基於用戶行為和數據的特點,對應地開發適用於這個場景的模型;而不是先拍板一個模型,再去數據中進行試驗,就本末倒置了。

關於我門

將門是一家以專注於發掘、加速及投資技術驅動型創業公司的新型創投機構,旗下涵蓋將門創新服務、將門技術社群以及將門創投基金。將門成立於2015年底,創始團隊由微軟創投在中國的創始團隊原班人馬構建而成,曾為微軟優選和深度孵化了126家創新的技術型創業公司。

將門創新服務專注於使創新的技術落地於真正的應用場景,激活和實現全新的商業價值,服務於行業領先企業和技術創新型創業公司。

將門技術社群專注於幫助技術創新型的創業公司提供來自產、學、研、創領域的核心技術專家的技術分享和學習內容,使創新成為持續的核心競爭力。

將門創投基金專注於投資通過技術創新激活商業場景,實現商業價值的初創企業,關注技術領域包括機器智能、物聯網、自然人機互動、企業計算。在近四年的時間裡,將門創投基金已經投資了包括量化派、碼隆科技、禾賽科技、寬拓科技、杉數科技、迪英加科技等數十家具有高成長潛力的技術型創業公司。

如果您是技術領域的初創企業,不僅想獲得投資,還希望獲得一系列持續性、有價值的投後服務,歡迎發送或者推薦項目給我「門」: bp@thejiangmen.com

關鍵字: