在推薦系統的排序環節中,我們經常使用CTR(Click-Through Rate)預估的方式來構建排序模型。在業界的實際應用上,如何通過大規模資料提取出有效特徵對使用者行為建模、泛化一直是研究人員的工作方向,由於在推薦系統的實際應用中,資料通常非常稀疏,如何從大規模的稀疏特徵中提取出有效的泛化特徵是CTR預估模型的一個重大挑戰。本文我們首先介紹了CTR預估模型的演變歷史,並介紹如何使用DNN在推薦系統的排序情景進行CTR預估,通過特殊的網路結構得到高效的泛化特徵提高模型的預測能力

DNN在推薦系統中的應用

2.1 點選率預估模型

在新聞推薦系統中,想得到使用者最可能點選的新聞,給定某使用者及新聞的集合,通過提取特徵我們可以得到三種特徵:

  1. 使用者特徵(使用者興趣、年齡、性別等)
  2. 上下文特徵(機型、網路等)
  3. 待預估新聞特徵(類別、標籤等)

我們需要計算出使用者對待預估新聞的點選率,通過對預估點選率的降序排序得出使用者最可能點選的前K個新聞。

最開始做點選率預估的模型為LR(Logistic Regression),將上述特徵代入LR模型可以得到一個簡單的點選率預估模型。然而,在推薦情景中,使用者的行為是稀疏的,即一個使用者能看到的新聞是有限的,如何從使用者有限的瀏覽中推測出使用者可能喜歡的新聞,就是推薦工作的重點,在這裡使用LR如果只是簡單的對上述特徵進行建模,是無法得到特別好的效果的,原因是LR模型本身無法對特徵進行泛化,它只能對某特徵直接計算其相應的權重?,如果想使得LR具備泛化能力,則需要我們在資料端”手動泛化”,例如:

將使用者的興趣與待估新聞的類別進行組合,得到一個interact特徵,假如使用者喜歡看科比相關的新聞,則待排新聞為體育類別的新聞應該比娛樂類別的新聞的值應該更高,因此我們能構造出特徵使用者喜歡科比且待排新聞為體育類,並且通過業務理解,我們能知道這個特徵一定比使用者喜歡科比且待排新聞為娛樂類在LR模型中得到的權重高。

則模型收斂後理應可得到:

通過這種特徵工程的方法,我們使得LR能預測使用者對沒看過的新聞的偏好程度,即具備了一定的泛化能力,同時由於LR模型的簡單構造,我們可以由業務理解去判斷模型訓練是否正確,特徵提取是否正確,即提高了我們的debug能力。

 

2.2 更強的泛化能力

從上面的做法中我們不難看出這麼做的優勢與劣勢,優勢是我們可以快速除錯出可用模型,如果訓練不符合預期可以直接從訓練得到的權重中看出問題,並通過分析特徵權重幫助特徵工程做更強的泛化特徵。劣勢是由於模型本身表達能力有限,我們只能通過人工的特徵工程滿足泛化能力,而這種特徵工程往往需要龐大的精力來調研、分析、實驗,每一步都有可能因為不慎或馬虎導致結果不符合預期,因此我們希望通過增強模型自身的泛化能力,來減少後期研發人員的做特徵工程的複雜度。

2.1.1 FM(Factorization Machine)

邏輯迴歸的F(x)的計算方式只包含線性關係,限制了模型的表達能力,可以通過增加非線性關係來增強模型的表達能力,具體地,FM模型公式如下:

FM模型使用了一個矩陣作為隱含特徵 ,每個特徵?都會對應一個?維的?向,通過計算兩兩特徵的隱含向量?的內積,得到了兩個特徵間的相關性。如果使用者喜歡科比,而新聞標籤含有NBA,則在模型收斂後,這兩個特徵的隱含向量內積應該比較大。

通過梯度下降方法更新?,?收斂得到模型引數。相比於LR,增加了一個隱含矩陣來表示特徵的兩兩交叉關係,如果特徵有?個,隱含矩陣維度為?,則矩陣空間複雜度為?(??),通過簡化計算可知計算的時間複雜度為?(?✱?),其中?為特徵非0的個數,並沒有增加很大的運算量。內積的方式可以使模型具有預測能力:即便有兩個特徵在訓練資料中從未在一個樣本中同時出現,我們也可以通過隱含向量知道兩個特徵的相關性。

FM模型實際可擴充套件為高階,然而只有二階可以簡化計算,三階及以上計算複雜度過高,實際業界基本不會使用,但FM闡述了一個重要思想,通過引入隱含矩陣,以內積的方式表示特徵之間的關係,由此提升了模型的泛化能力,鑑於其泛化的思想及模型簡潔而有效的能力,FM模型在實際使用中大受歡迎,而後續發展的DNN相關的ctr預估模型也有不少借鑑了FM的思想。

2.1.2 DNN

隨著近年計算能力的提升,DNN重新回到大眾視野,由於DNN具備非常強的擬合能力,在各個領域都取得了優秀的效能提升。人們首先通過研究DNN在NLP、影像領域的應用,進而發展到推薦領域,2016年Google提出的Wide & Deep Learning for Recommender Systems⁽¹⁾提供了一種思路,將多層全連線網路定義為Deep Model, 額外增加一個形似LR的 Wide Model,利用兩者各自的優勢得到一個融合模型。

由於DNN引數數量龐大,而推薦情景下大部分特徵為稀疏特徵,如果將原始特徵拼接(concatenate)起來作為輸入層直接輸入DNN,會出現訓練引數規模過大而無法訓練的問題,因此需要一個嵌入層(Embedding)將大規模稀疏特徵首先對映到一個低維密集(dense)的空間中,再與其他特徵拼接到一塊作為輸入層輸入DNN。

除了DNN,wide&deep模型額外新增了一個wide模型,實際上就是將上文中LR的特徵組合過程作為一個獨立模組加入模型中,例如上圖所示,將使用者安裝過的App與當前曝光展現的App做一個組合特徵作為wide model的其中一個特徵,這裡又可以結合業務知識去做特徵組合,獲得一些強泛化能力的特徵。

最後將DNN的隱含層最後一層與wide特徵拼接到一塊,通過Logistic得到一個[0, 1]值,通過梯度更新收斂得到ctr預估模型。wide&deep模型通過DNN獲得了特徵之間高階的非線性關係,提高了模型的泛化能力,但DNN這種結構去學習簡單的低階交叉實際上是比較低效的,通過在DNN外加入一個wide層,人工引入業務相關的組合特徵,可以使模型快速學習到有效的低階交叉特徵,這些特徵由於有人們對業務的認識,對業務情景往往具備較強的擬合能力,與DNN合併後效果會比單一DNN更好。

到這裡我們希望能進一步擴充套件,能否讓DNN模型像FM一樣不需要通過人工組合特徵,讓模型自己學到低階的交叉特徵呢?這就是接下來我們要講到的Deep & Cross Network所做到的事情。

03
Deep & Cross Network

Deep & Cross Network(DCN)⁽²⁾是由Google於2017年提出的推薦模型,相比於普通的多層全連線網路,多出一個Cross Netork,乍一聽很唬人,實際是通過矩陣來進行特徵交叉,利用殘差思想構造深層網路的一個模型模組,通過模型而不是人工組合得到高階組合特徵,下面我們具體介紹DCN模型。

3.1 模型結構

DCN模型結構如上圖所示,其基本結構和wide&deep網路類似,輸入層對稀疏類別型特徵採用Embedding的方式對映到一個低維密集向量,與數值型特徵直接拼接起來作為網路輸入特徵。由於這是一個CTR預估模型,樣本是0/1的二分類監督問題,所以輸出層採用sigmoid將輸出限定在[0,1]之間表示模型預估點選率。

網路中間分為兩塊:Cross network與Deep network。其中deep網路就是多層的全連線網路,而cross網路則是cross layer通過一系列計算輸出結果。

3.2 Cross Network

Cross Network的具體計算公式為:

用圖來表示這個公式:

公式中,作為列向量,表示cross層的第層,第層輸出,則函式可以看作擬合第層與第層的殘差。

這種特殊的結構可以使得交叉特徵的階(degree)隨著cross層增加,對於第層,交叉特徵相對於的階為。整個cross網路的引數量為:2,這裡?為輸入列向量?₀的維度,?為cross network的網路層數,每一層包含一組?,?,因此乘2。DNN由於全連線,隱含層的第一層的權重?就需要與輸入層做笛卡爾積,而相對於全連線網路,cross網路引入的引數量非常小,與輸入層特徵維度呈線性關係。

3.2.1 深入理解Cross Network

我們可以將cross網路理解為每一個cross層,都將與了一次pairwise互動,然後再通過高效的方式轉回輸入層的特徵維度。分析一下上圖的Feature Crossing的過程,令,其中,這個公式實際可以這麼看:

我們將原式的前兩項相乘,這裡面得到的每一個值都可以看作當前cross層特徵與輸入特徵做了一次bit-wise的乘積,並且我們可以看作得到了一個?²的行向量,再乘以一個塊對角矩陣,其中列向量,將結果投影回了維,這個過程做了一次特徵交叉,特徵維度通過壓縮回輸入特徵的大小?²→?,大大減少了空間複雜度。

3.2.2 DCN與FM

FM模型內每個特徵有一個隱含向量,兩個特徵的交叉關係是通過向量內積得到的;而在DCN裡,每個特徵與標量相關聯,特徵的關係是集合和的乘積,兩者都具備特徵交叉泛化的能力。

這種引數共享的方式不但能讓模型泛化得出一些訓練樣本未出現過的特徵互動,而且能使得模型魯棒性更強,噪音資料的影響更小。在我們推薦的情景下特徵十分稀疏,假如兩個特徵幾乎從未在訓練樣本里共同出現過,則直接組合特徵並不會帶來收益,但通過引數共享的方式,我們仍能從引數乘積得到特徵組合的效果。

另外,通常我們說的FM限制了模型只能得到二階組合,超過二階計算量會以次方增長,而DCN通過巧妙的設計,將特徵交叉從單層變成了多層,獲得多階互動的同時計算量仍為線性增長。

3.2.3 已經最好了嗎?

從上文描述的Feature Crossing計算方式,我們看到了一種既能高效計算特徵間的高階交叉,又沒有帶來龐大計算量的特徵交叉方法,那這個方法已經完美了嗎,是否還有能夠改進完善的地方?首先,在推薦情景中,我們會出現許多稀疏特徵,例如使用者id、物品id等等,這類稀疏的id型特徵在DNN模型通常都需要通過embedding轉為低維密集特徵,然後我們把各個特徵拼接到一起得到了輸入特徵?₀,即我們的特徵?₀內會有好幾個都屬於使用者的embedding特徵,他們共同表示了一個使用者的屬性。

回到cross network的計算,Feature Crossing可以表示為,即?₀與兩個向量內每個元素都做乘積(bit-wise),然而我們知道內的embedding特徵是共同表示一個域(field)的,則他們內部的乘積組合並沒有太大作用,我們更需要的是不同域的embedding進行交叉組合,在這一方面,FM是做的更好的,我們可以將FM的隱含向量看作特徵的embedding,兩個隱含向量的內積實際就是兩個域的embedding向量乘積(vector-wise),並不會讓embedding內的元素進行交叉組合。

04
總結

本文主要介紹了推薦系統的關鍵環節:排序。這裡我們講述了一種業界比較通用的方法:CTR預估模型。點選率預估模型研究的問題是已知我們當前要推薦的使用者、當前所處上下文、待計算的物品,通過模型計算出使用者點選該物品的概率,將待排序物品全部計算出預估點選率,再由高至低排序輸出。

CTR預估模型經過多年發展,已經由最初的LR,升級至FM,現在又發展到了DNN模型,總的來說,這一路發展都是基於一個思路,我們希望減少人工組合特徵,增加模型的通用型,從特徵泛化走向模型泛化,研究如何讓模型的泛化能力更強。

最開始使用LR,模型本身不具備泛化能力,我們結合業務的理解,通過大量複雜的特徵工程使輸入LR的特徵本身具備了泛化能力。隨後出現FM,相比於LR每個特徵多出了一個?維隱含向量,通過對隱含向量相互求內積,我們使特徵在模型內實現了兩兩組合,由此我們的模型具備了初步的泛化能力,經過訓練樣本的訓練收斂後模型也能推測出從未共同出現的特徵間的關係。而後我們開始使用DNN來解決點選率預估問題,同樣地,為了使模型能快速訓練出組合交叉特徵的關係,在多層全連線網路外額外增加了一個交叉網路,cross network以巧妙的設計將特徵組合延伸到了多階,並且計算複雜度呈線性增長,在實踐中,我們只需要在已經完成的DNN模型直接新增cross network即可得到更好的效果,輸入層可以不做任何的特徵工程,模型可以在cross network內部計算出特徵間的組合關係。

然而,cross network雖然能線上性複雜度下獲得高階特徵交叉,其模型設計仍有值得改進的地方,由於採用直接矩陣乘積,即元素級別(bit-wise)的乘積,在計算過程模型是無法區分向量元素是否屬於同一個特徵embedding的,這樣會使計算出現一些無效的特徵交叉,如何優化模型結構使模型能在高階交叉時按照field在不同域間計算組合特徵(vector-wise)也是當前的前沿研究,去年微軟提出的xDeepFM⁽³⁾即實現了這個目標,感興趣的同學可以參考這篇論文,體會其中的思路。

參考文獻:

[1]https://arxiv.org/pdf/1606.07792.pdf

[2]https://arxiv.org/pdf/1708.05123.pdf

[3]https://arxiv.org/pdf/1803.05170.pdf

來源:搜狐