深入理解FFM原理与实践
原文:http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html
深入理解FFM原理與實(shí)踐
del2z, 大龍?·2016-03-03 09:00
FM和FFM模型是最近幾年提出的模型,憑借其在數(shù)據(jù)量比較大并且特征稀疏的情況下,仍然能夠得到優(yōu)秀的性能和效果的特性,屢次在各大公司舉辦的CTR預(yù)估比賽中獲得不錯的戰(zhàn)績。美團(tuán)點(diǎn)評技術(shù)團(tuán)隊(duì)在搭建DSP的過程中,探索并使用了FM和FFM模型進(jìn)行CTR和CVR預(yù)估,并且取得了不錯的效果。本文旨在把我們對FM和FFM原理的探索和應(yīng)用的經(jīng)驗(yàn)介紹給有興趣的讀者。
前言
在計(jì)算廣告領(lǐng)域,點(diǎn)擊率CTR(click-through rate)和轉(zhuǎn)化率CVR(conversion rate)是衡量廣告流量的兩個關(guān)鍵指標(biāo)。準(zhǔn)確的估計(jì)CTR、CVR對于提高流量的價(jià)值,增加廣告收入有重要的指導(dǎo)作用。預(yù)估CTR/CVR,業(yè)界常用的方法有人工特征工程 + 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近年來表現(xiàn)突出,分別在由Criteo和Avazu舉辦的CTR預(yù)測競賽中奪得冠軍[4][5]。
考慮到FFM模型在CTR預(yù)估比賽中的不俗戰(zhàn)績,美團(tuán)點(diǎn)評技術(shù)團(tuán)隊(duì)在搭建DSP(Demand Side Platform)[6]平臺時,在站內(nèi)CTR/CVR的預(yù)估上使用了該模型,取得了不錯的效果。本文是基于對FFM模型的深度調(diào)研和使用經(jīng)驗(yàn),從原理、實(shí)現(xiàn)和應(yīng)用幾個方面對FFM進(jìn)行探討,希望能夠從原理上解釋FFM模型在點(diǎn)擊率預(yù)估上取得優(yōu)秀效果的原因。因?yàn)镕FM是在FM的基礎(chǔ)上改進(jìn)得來的,所以我們首先引入FM模型,本文章節(jié)組織方式如下:
FM原理
FM(Factorization Machine)是由Konstanz大學(xué)Steffen Rendle(現(xiàn)任職于Google)于2010年最早提出的,旨在解決稀疏數(shù)據(jù)下的特征組合問題[7]。下面以一個示例引入FM模型。假設(shè)一個廣告分類的問題,根據(jù)用戶和廣告位相關(guān)的特征,預(yù)測用戶是否點(diǎn)擊了廣告。源數(shù)據(jù)如下[8]
| 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類型的,需要經(jīng)過獨(dú)熱編碼(One-Hot Encoding)轉(zhuǎn)換成數(shù)值型特征。
| 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 |
| 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 |
由上表可以看出,經(jīng)過One-Hot編碼之后,大部分樣本數(shù)據(jù)特征是比較稀疏的。上面的樣例中,每個樣本有7維特征,但平均僅有3維特征具有非零值。實(shí)際上,這種情況并不是此例獨(dú)有的,在真實(shí)應(yīng)用場景中這種情況普遍存在。例如,CTR/CVR預(yù)測時,用戶的性別、職業(yè)、教育水平、品類偏好,商品的品類等,經(jīng)過One-Hot編碼轉(zhuǎn)換后都會導(dǎo)致樣本數(shù)據(jù)的稀疏性。特別是商品品類這種類型的特征,如商品的末級品類約有550個,采用One-Hot編碼生成550個數(shù)值特征,但每個樣本的這550個特征,有且僅有一個是有效的(非零)。由此可見,數(shù)據(jù)稀疏性是實(shí)際問題中不可避免的挑戰(zhàn)。
One-Hot編碼的另一個特點(diǎn)就是導(dǎo)致特征空間大。例如,商品品類有550維特征,一個categorical特征轉(zhuǎn)換為550維數(shù)值特征,特征空間劇增。
同時通過觀察大量的樣本數(shù)據(jù)可以發(fā)現(xiàn),某些特征經(jīng)過關(guān)聯(lián)之后,與label之間的相關(guān)性就會提高。例如,“USA”與“Thanksgiving”、“China”與“Chinese New Year”這樣的關(guān)聯(lián)特征,對用戶的點(diǎn)擊有著正向的影響。換句話說,來自“China”的用戶很可能會在“Chinese New Year”有大量的瀏覽、購買行為,而在“Thanksgiving”卻不會有特別的消費(fèi)行為。這種關(guān)聯(lián)特征與label的正向相關(guān)性在實(shí)際問題中是普遍存在的,如“化妝品”類商品與“女”性,“球類運(yùn)動配件”的商品與“男”性,“電影票”的商品與“電影”品類偏好等。因此,引入兩個特征的組合是非常有意義的。
多項(xiàng)式模型是包含特征組合的最直觀的模型。在多項(xiàng)式模型中,特征?xixi?和?xjxj?的組合采用?xixjxixj?表示,即?xixi?和?xjxj?都非零時,組合特征?xixjxixj?才有意義。從對比的角度,本文只討論二階多項(xiàng)式模型。模型的表達(dá)式如下
?
y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1nwijxixj(1)(1)y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1nwijxixj?
其中,nn?代表樣本的特征數(shù)量,xixi?是第?ii?個特征的值,w0w0、wiwi、wijwij?是模型參數(shù)。
從公式(1)(1)可以看出,組合特征的參數(shù)一共有?n(n?1)2n(n?1)2?個,任意兩個參數(shù)都是獨(dú)立的。然而,在數(shù)據(jù)稀疏性普遍存在的實(shí)際應(yīng)用場景中,二次項(xiàng)參數(shù)的訓(xùn)練是很困難的。其原因是,每個參數(shù)?wijwij?的訓(xùn)練需要大量?xixi?和?xjxj?都非零的樣本;由于樣本數(shù)據(jù)本來就比較稀疏,滿足“xixi?和?xjxj?都非零”的樣本將會非常少。訓(xùn)練樣本的不足,很容易導(dǎo)致參數(shù)?wijwij?不準(zhǔn)確,最終將嚴(yán)重影響模型的性能。
那么,如何解決二次項(xiàng)參數(shù)的訓(xùn)練問題呢?矩陣分解提供了一種解決思路。在model-based的協(xié)同過濾中,一個rating矩陣可以分解為user矩陣和item矩陣,每個user和item都可以采用一個隱向量表示[8]。比如在下圖中的例子中,我們把每個user表示成一個二維向量,同時把每個item表示成一個二維向量,兩個向量的點(diǎn)積就是矩陣中user對item的打分。
類似地,所有二次項(xiàng)參數(shù)?wijwij?可以組成一個對稱陣?WW(為了方便說明FM的由來,對角元素可以設(shè)置為正實(shí)數(shù)),那么這個矩陣就可以分解為?W=VTVW=VTV,VV?的第?jj?列便是第?jj?維特征的隱向量。換句話說,每個參數(shù)?wij=?vi,vj?wij=?vi,vj?,這就是FM模型的核心思想。因此,FM的模型方程為(本文不討論FM的高階形式)
?
y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1n?vi,vj?xixj(2)(2)y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1n?vi,vj?xixj?
其中,vivi?是第?ii?維特征的隱向量,??,????,???代表向量點(diǎn)積。隱向量的長度為?kk(k<<nk<<n),包含?kk?個描述特征的因子。根據(jù)公式(2)(2),二次項(xiàng)的參數(shù)數(shù)量減少為?knkn個,遠(yuǎn)少于多項(xiàng)式模型的參數(shù)數(shù)量。另外,參數(shù)因子化使得?xhxixhxi?的參數(shù)和?xixjxixj?的參數(shù)不再是相互獨(dú)立的,因此我們可以在樣本稀疏的情況下相對合理地估計(jì)FM的二次項(xiàng)參數(shù)。具體來說,xhxixhxi?和?xixjxixj?的系數(shù)分別為??vh,vi??vh,vi??和??vi,vj??vi,vj?,它們之間有共同項(xiàng)?vivi。也就是說,所有包含“xixi?的非零組合特征”(存在某個?j≠ij≠i,使得?xixj≠0xixj≠0)的樣本都可以用來學(xué)習(xí)隱向量?vivi,這很大程度上避免了數(shù)據(jù)稀疏性造成的影響。而在多項(xiàng)式模型中,whiwhi?和?wijwij?是相互獨(dú)立的。
顯而易見,公式(2)(2)是一個通用的擬合方程,可以采用不同的損失函數(shù)用于解決回歸、二元分類等問題,比如可以采用MSE(Mean Square Error)損失函數(shù)來求解回歸問題,也可以采用Hinge/Cross-Entropy損失來求解分類問題。當(dāng)然,在進(jìn)行二元分類時,FM的輸出需要經(jīng)過sigmoid變換,這與Logistic回歸是一樣的。直觀上看,FM的復(fù)雜度是?O(kn2)O(kn2)。但是,通過公式(3)(3)的等式,FM的二次項(xiàng)可以化簡,其復(fù)雜度可以優(yōu)化到?O(kn)O(kn)[7]。由此可見,FM可以在線性時間對新樣本作出預(yù)測。
?
∑i=1n∑j=i+1n?vi,vj?xixj=12∑f=1k??(∑i=1nvi,fxi)2?∑i=1nv2i,fx2i??(3)(3)∑i=1n∑j=i+1n?vi,vj?xixj=12∑f=1k((∑i=1nvi,fxi)2?∑i=1nvi,f2xi2)?
我們再來看一下FM的訓(xùn)練復(fù)雜度,利用SGD(Stochastic Gradient Descent)訓(xùn)練模型。模型各個參數(shù)的梯度如下
?
??θy(x)=?????1,xi,xi∑nj=1vj,fxj?vi,fx2i,ifθisw0ifθiswiifθisvi,f??θy(x)={1,ifθisw0xi,ifθiswixi∑j=1nvj,fxj?vi,fxi2,ifθisvi,f?
其中,vj,fvj,f?是隱向量?vjvj?的第?ff?個元素。由于?∑nj=1vj,fxj∑j=1nvj,fxj?只與?ff?有關(guān),而與?ii?無關(guān),在每次迭代過程中,只需計(jì)算一次所有?ff?的?∑nj=1vj,fxj∑j=1nvj,fxj,就能夠方便地得到所有?vi,fvi,f?的梯度。顯然,計(jì)算所有?ff?的?∑nj=1vj,fxj∑j=1nvj,fxj的復(fù)雜度是?O(kn)O(kn);已知?∑nj=1vj,fxj∑j=1nvj,fxj?時,計(jì)算每個參數(shù)梯度的復(fù)雜度是?O(1)O(1);得到梯度后,更新每個參數(shù)的復(fù)雜度是?O(1)O(1);模型參數(shù)一共有?nk+n+1nk+n+1?個。因此,FM參數(shù)訓(xùn)練的復(fù)雜度也是?O(kn)O(kn)。綜上可知,FM可以在線性時間訓(xùn)練和預(yù)測,是一種非常高效的模型。
FM與其他模型的對比
FM是一種比較靈活的模型,通過合適的特征變換方式,FM可以模擬二階多項(xiàng)式核的SVM模型、MF模型、SVD++模型等[7]。
相比SVM的二階多項(xiàng)式核而言,FM在樣本稀疏的情況下是有優(yōu)勢的;而且,FM的訓(xùn)練/預(yù)測復(fù)雜度是線性的,而二項(xiàng)多項(xiàng)式核SVM需要計(jì)算核矩陣,核矩陣復(fù)雜度就是N平方。
相比MF而言,我們把MF中每一項(xiàng)的rating分改寫為?rui~βu+γi+xTuyirui~βu+γi+xuTyi,從公式(2)(2)中可以看出,這相當(dāng)于只有兩類特征?uu?和?ii?的FM模型。對于FM而言,我們可以加任意多的特征,比如user的歷史購買平均值,item的歷史購買平均值等,但是MF只能局限在兩類特征。SVD++與MF類似,在特征的擴(kuò)展性上都不如FM,在此不再贅述。
FFM原理
FFM(Field-aware Factorization Machine)最初的概念來自Yu-Chin Juan(阮毓欽,畢業(yè)于中國臺灣大學(xué),現(xiàn)在美國Criteo工作)與其比賽隊(duì)員,是他們借鑒了來自Michael Jahrer的論文[14]中的field概念提出了FM的升級版模型。通過引入field的概念,FFM把相同性質(zhì)的特征歸于同一個field。以上面的廣告分類為例,“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”這三個特征都是代表日期的,可以放到同一個field中。同理,商品的末級品類編碼生成了550個特征,這550個特征都是說明商品所屬的品類,因此它們也可以放到同一個field中。簡單來說,同一個categorical特征經(jīng)過One-Hot編碼生成的數(shù)值特征都可以放到同一個field,包括用戶性別、職業(yè)、品類偏好等。在FFM中,每一維特征?xixi,針對其它特征的每一種field?fjfj,都會學(xué)習(xí)一個隱向量?vi,fjvi,fj。因此,隱向量不僅與特征相關(guān),也與field相關(guān)。也就是說,“Day=26/11/15”這個特征與“Country”特征和“Ad_type"特征進(jìn)行關(guān)聯(lián)的時候使用不同的隱向量,這與“Country”和“Ad_type”的內(nèi)在差異相符,也是FFM中“field-aware”的由來。
假設(shè)樣本的?nn?個特征屬于?ff?個field,那么FFM的二次項(xiàng)有?nfnf個隱向量。而在FM模型中,每一維特征的隱向量只有一個。FM可以看作FFM的特例,是把所有特征都?xì)w屬到一個field時的FFM模型。根據(jù)FFM的field敏感特性,可以導(dǎo)出其模型方程。
?
y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1n?vi,fj,vj,fi?xixj(4)(4)y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1n?vi,fj,vj,fi?xixj?
其中,fjfj?是第?jj?個特征所屬的field。如果隱向量的長度為?kk,那么FFM的二次參數(shù)有?nfknfk?個,遠(yuǎn)多于FM模型的nknk?個。此外,由于隱向量與field相關(guān),FFM二次項(xiàng)并不能夠化簡,其預(yù)測復(fù)雜度是?O(kn2)O(kn2)。
下面以一個例子簡單說明FFM的特征組合方式[9]。輸入記錄如下
| YuChin | 3Idiots | Comedy, Drama | $9.99 |
這條記錄可以編碼成5個特征,其中“Genre=Comedy”和“Genre=Drama”屬于同一個field,“Price”是數(shù)值型,不用One-Hot編碼轉(zhuǎn)換。為了方便說明FFM的樣本格式,我們將所有的特征和對應(yīng)的field映射成整數(shù)編號。
| User | 1 | User=YuChin | 1 |
| Movie | 2 | Movie=3Idiots | 2 |
| Genre | 3 | Genre=Comedy | 3 |
| Price | 4 | Genre=Drama | 4 |
| ? | ? | Price | 5 |
那么,FFM的組合特征有10項(xiàng),如下圖所示。
?v1,2,v2,1??1?1+?v1,3,v3,1??1?1+?v1,3,v4,1??1?1+?v1,4,v5,1??1?9.99+?v2,3,v3,轉(zhuǎn)載于:https://www.cnblogs.com/zhizhan/p/5238415.html
總結(jié)
以上是生活随笔為你收集整理的深入理解FFM原理与实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七天学会ASP.NET MVC (五)—
- 下一篇: 《Build your own Angu