FM和FFM模型是最近幾年提出的模型,憑藉其在數據量比較大而且特徵稀疏的狀況下,仍然可以獲得優秀的性能和效果的特性,多次在各大公司舉辦的CTR預估比賽中得到不錯的戰績。美團點評技術團隊在搭建DSP的過程當中,探索並使用了FM和FFM模型進行CTR和CVR預估,而且取得了不錯的效果。本文旨在把咱們對FM和FFM原理的探索和應用的經驗介紹給有興趣的讀者。github
前言
在計算廣告領域,點擊率CTR(click-through rate)和轉化率CVR(conversion rate)是衡量廣告流量的兩個關鍵指標。準確的估計CTR、CVR對於提升流量的價值,增長廣告收入有重要的指導做用。預估CTR/CVR,業界經常使用的方法有人工特徵工程 + LR(Logistic Regression)、GBDT(Gradient Boosting Decision Tree) + LR[1][2][3]、FM(Factorization Machine)[2][7]和FFM(Field-aware Factorization Machine)[9]模型。在這些模型中,FM和FFM近年來表現突出,分別在由Criteo和Avazu舉辦的CTR預測競賽中奪得冠軍[4][5]。算法
考慮到FFM模型在CTR預估比賽中的不俗戰績,美團點評技術團隊在搭建DSP(Demand Side Platform)[6]平臺時,在站內CTR/CVR的預估上使用了該模型,取得了不錯的效果。本文是基於對FFM模型的深度調研和使用經驗,從原理、實現和應用幾個方面對FFM進行探討,但願可以從原理上解釋FFM模型在點擊率預估上取得優秀效果的緣由。由於FFM是在FM的基礎上改進得來的,因此咱們首先引入FM模型,本文章節組織方式以下:編程
- 首先介紹FM的原理。
- 其次介紹FFM對FM的改進。
- 而後介紹FFM的實現細節。
- 最後介紹模型在DSP場景的應用。
FM原理
FM(Factorization Machine)是由Konstanz大學Steffen Rendle(現任職於Google)於2010年最先提出的,旨在解決稀疏數據下的特徵組合問題[7]。下面以一個示例引入FM模型。假設一個廣告分類的問題,根據用戶和廣告位相關的特徵,預測用戶是否點擊了廣告。源數據以下[8]windows
Clicked? | Country | Day | Ad_type |
---|---|---|---|
1 | USA | 26/11/15 | Movie |
0 | China | 1/7/14 | Game |
1 | China | 19/2/15 | Game |
"Clicked?"是label,Country、Day、Ad_type是特徵。因爲三種特徵都是categorical類型的,須要通過獨熱編碼(One-Hot Encoding)轉換成數值型特徵。多線程
Clicked? | Country=USA | Country=China | Day=26/11/15 | Day=1/7/14 | Day=19/2/15 | Ad_type=Movie | Ad_type=Game |
---|---|---|---|---|---|---|---|
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 |
由上表能夠看出,通過One-Hot編碼以後,大部分樣本數據特徵是比較稀疏的。上面的樣例中,每一個樣本有7維特徵,但平均僅有3維特徵具備非零值。實際上,這種狀況並非此例獨有的,在真實應用場景中這種狀況廣泛存在。例如,CTR/CVR預測時,用戶的性別、職業、教育水平、品類偏好,商品的品類等,通過One-Hot編碼轉換後都會致使樣本數據的稀疏性。特別是商品品類這種類型的特徵,如商品的末級品類約有550個,採用One-Hot編碼生成550個數值特徵,但每一個樣本的這550個特徵,有且僅有一個是有效的(非零)。因而可知,數據稀疏性是實際問題中不可避免的挑戰。ide
One-Hot編碼的另外一個特色就是致使特徵空間大。例如,商品品類有550維特徵,一個categorical特徵轉換爲550維數值特徵,特徵空間劇增。函數
同時經過觀察大量的樣本數據能夠發現,某些特徵通過關聯以後,與label之間的相關性就會提升。例如,「USA」與「Thanksgiving」、「China」與「Chinese New Year」這樣的關聯特徵,對用戶的點擊有着正向的影響。換句話說,來自「China」的用戶極可能會在「Chinese New Year」有大量的瀏覽、購買行爲,而在「Thanksgiving」卻不會有特別的消費行爲。這種關聯特徵與label的正向相關性在實際問題中是廣泛存在的,如「化妝品」類商品與「女」性,「球類運動配件」的商品與「男」性,「電影票」的商品與「電影」品類偏好等。所以,引入兩個特徵的組合是很是有意義的。性能
多項式模型是包含特徵組合的最直觀的模型。在多項式模型中,特徵 xixi 和 xjxj 的組合採用 xixjxixj 表示,即 xixi 和 xjxj 都非零時,組合特徵 xixjxixj 纔有意義。從對比的角度,本文只討論二階多項式模型。模型的表達式以下
其中,nn 表明樣本的特徵數量,xixi 是第 ii 個特徵的值,w0w0、wiwi、wijwij 是模型參數。
從公式(1)(1)能夠看出,組合特徵的參數一共有 n(n−1)2n(n−1)2 個,任意兩個參數都是獨立的。然而,在數據稀疏性廣泛存在的實際應用場景中,二次項參數的訓練是很困難的。其緣由是,每一個參數 wijwij 的訓練須要大量 xixi 和 xjxj 都非零的樣本;因爲樣本數據原本就比較稀疏,知足「xixi 和 xjxj 都非零」的樣本將會很是少。訓練樣本的不足,很容易致使參數 wijwij 不許確,最終將嚴重影響模型的性能。
那麼,如何解決二次項參數的訓練問題呢?矩陣分解提供了一種解決思路。在model-based的協同過濾中,一個rating矩陣能夠分解爲user矩陣和item矩陣,每一個user和item均可以採用一個隱向量表示[8]。好比在下圖中的例子中,咱們把每一個user表示成一個二維向量,同時把每一個item表示成一個二維向量,兩個向量的點積就是矩陣中user對item的打分。
相似地,全部二次項參數 wijwij 能夠組成一個對稱陣 WW(爲了方便說明FM的由來,對角元素能夠設置爲正實數),那麼這個矩陣就能夠分解爲 W=VTVW=VTV,VV 的第 jj 列即是第 jj 維特徵的隱向量。換句話說,每一個參數 wij=⟨vi,vj⟩wij=⟨vi,vj⟩,這就是FM模型的核心思想。所以,FM的模型方程爲(本文不討論FM的高階形式)
其中,vivi 是第 ii 維特徵的隱向量,⟨⋅,⋅⟩⟨⋅,⋅⟩ 表明向量點積。隱向量的長度爲 kk(k<<nk<<n),包含 kk 個描述特徵的因子。根據公式(2)(2),二次項的參數數量減小爲 knkn個,遠少於多項式模型的參數數量。另外,參數因子化使得 xhxixhxi 的參數和 xixjxixj 的參數再也不是相互獨立的,所以咱們能夠在樣本稀疏的狀況下相對合理地估計FM的二次項參數。具體來講,xhxixhxi 和 xixjxixj 的係數分別爲 ⟨vh,vi⟩⟨vh,vi⟩ 和 ⟨vi,vj⟩⟨vi,vj⟩,它們之間有共同項 vivi。也就是說,全部包含「xixi 的非零組合特徵」(存在某個 j≠ij≠i,使得 xixj≠0xixj≠0)的樣本均可以用來學習隱向量 vivi,這很大程度上避免了數據稀疏性形成的影響。而在多項式模型中,whiwhi 和 wijwij 是相互獨立的。
顯而易見,公式(2)(2)是一個通用的擬合方程,能夠採用不一樣的損失函數用於解決迴歸、二元分類等問題,好比能夠採用MSE(Mean Square Error)損失函數來求解迴歸問題,也能夠採用Hinge/Cross-Entropy損失來求解分類問題。固然,在進行二元分類時,FM的輸出須要通過sigmoid變換,這與Logistic迴歸是同樣的。直觀上看,FM的複雜度是 O(kn2)O(kn2)。可是,經過公式(3)(3)的等式,FM的二次項能夠化簡,其複雜度能夠優化到 O(kn)O(kn)[7]。因而可知,FM能夠在線性時間對新樣本做出預測。
咱們再來看一下FM的訓練複雜度,利用SGD(Stochastic Gradient Descent)訓練模型。模型各個參數的梯度以下
其中,vj,fvj,f 是隱向量 vjvj 的第 ff 個元素。因爲 ∑nj=1vj,fxj∑j=1nvj,fxj 只與 ff 有關,而與 ii 無關,在每次迭代過程當中,只需計算一次全部 ff 的 ∑nj=1vj,fxj∑j=1nvj,fxj,就可以方便地獲得全部 vi,fvi,f 的梯度。顯然,計算全部 ff 的 ∑nj=1vj,fxj∑j=1nvj,fxj 的複雜度是 O(kn)O(kn);已知 ∑nj=1vj,fxj∑j=1nvj,fxj 時,計算每一個參數梯度的複雜度是 O(1)O(1);獲得梯度後,更新每一個參數的複雜度是 O(1)O(1);模型參數一共有 nk+n+1nk+n+1 個。所以,FM參數訓練的複雜度也是 O(kn)O(kn)。綜上可知,FM能夠在線性時間訓練和預測,是一種很是高效的模型。
FM與其餘模型的對比
FM是一種比較靈活的模型,經過合適的特徵變換方式,FM能夠模擬二階多項式核的SVM模型、MF模型、SVD++模型等[7]。
相比SVM的二階多項式核而言,FM在樣本稀疏的狀況下是有優點的;並且,FM的訓練/預測複雜度是線性的,而二項多項式核SVM須要計算核矩陣,核矩陣複雜度就是N平方。
相比MF而言,咱們把MF中每一項的rating分改寫爲 rui∼βu+γi+xTuyirui∼βu+γi+xuTyi,從公式(2)(2)中能夠看出,這至關於只有兩類特徵 uu 和 ii 的FM模型。對於FM而言,咱們能夠加任意多的特徵,好比user的歷史購買平均值,item的歷史購買平均值等,可是MF只能侷限在兩類特徵。SVD++與MF相似,在特徵的擴展性上都不如FM,在此再也不贅述。
FFM原理
FFM(Field-aware Factorization Machine)最初的概念來自Yu-Chin Juan(阮毓欽,畢業於中國臺灣大學,如今美國Criteo工做)與其比賽隊員,是他們借鑑了來自Michael Jahrer的論文[14]中的field概念提出了FM的升級版模型。經過引入field的概念,FFM把相同性質的特徵歸於同一個field。以上面的廣告分類爲例,「Day=26/11/15」、「Day=1/7/14」、「Day=19/2/15」這三個特徵都是表明日期的,能夠放到同一個field中。同理,商品的末級品類編碼生成了550個特徵,這550個特徵都是說明商品所屬的品類,所以它們也能夠放到同一個field中。簡單來講,同一個categorical特徵通過One-Hot編碼生成的數值特徵均可以放到同一個field,包括用戶性別、職業、品類偏好等。在FFM中,每一維特徵 xixi,針對其它特徵的每一種field fjfj,都會學習一個隱向量 vi,fjvi,fj。所以,隱向量不只與特徵相關,也與field相關。也就是說,「Day=26/11/15」這個特徵與「Country」特徵和「Ad_type"特徵進行關聯的時候使用不一樣的隱向量,這與「Country」和「Ad_type」的內在差別相符,也是FFM中「field-aware」的由來。
假設樣本的 nn 個特徵屬於 ff 個field,那麼FFM的二次項有 nfnf個隱向量。而在FM模型中,每一維特徵的隱向量只有一個。FM能夠看做FFM的特例,是把全部特徵都歸屬到一個field時的FFM模型。根據FFM的field敏感特性,能夠導出其模型方程。
其中,fjfj 是第 jj 個特徵所屬的field。若是隱向量的長度爲 kk,那麼FFM的二次參數有 nfknfk 個,遠多於FM模型的 nknk 個。此外,因爲隱向量與field相關,FFM二次項並不可以化簡,其預測複雜度是 O(kn2)O(kn2)。
下面以一個例子簡單說明FFM的特徵組合方式[9]。輸入記錄以下
User | Movie | Genre | Price |
---|---|---|---|
YuChin | 3Idiots | Comedy, Drama | $9.99 |
這條記錄能夠編碼成5個特徵,其中「Genre=Comedy」和「Genre=Drama」屬於同一個field,「Price」是數值型,不用One-Hot編碼轉換。爲了方便說明FFM的樣本格式,咱們將全部的特徵和對應的field映射成整數編號。
Field name | Field index | Feature name | Feature index |
---|---|---|---|
User | 1 | User=YuChin | 1 |
Movie | 2 | Movie=3Idiots | 2 |
Genre | 3 | Genre=Comedy | 3 |
Price | 4 | Genre=Drama | 4 |
Price | 5 |
那麼,FFM的組合特徵有10項,以下圖所示。