1. 程式人生 > >FM和FFM的區別

FM和FFM的區別

FM+FFM

FM旨在解決稀疏資料下的特徵組合問題,具有線性的計算複雜度;(矩陣分解方式處理引數,不僅能減少引數數量,還能處理由於稀疏性帶來的引數不好訓練的問題一般的線性模型壓根沒有考慮特徵間的關聯(組合)。為了表述特徵間的相關性,我們採用多項式模型。觀察大量的樣本資料可以發現,某些特徵經過關聯之後,與label之間的相關性就會提高。例如,“USA”“Thanksgiving”“China”“Chinese New Year”這樣的關聯特徵,對使用者的點選有著正向的影響。

資料稀疏性普遍存在的實際應用場景中,二次項引數的訓練是很困難的。原因是,每個引數wij的訓練需要大量 xi 

 xj 都非零的樣本;由於樣本資料本來就比較稀疏,滿足xi  xj 都非零的樣本將會非常少。訓練樣本的不足,很容易導致引數wij 不準確,最終將嚴重影響模型的效能。

如何解決二次項引數的訓練問題呢?矩陣分解提供了一種解決思路。model-based的協同過濾中,一個rating矩陣可以分解為user矩陣和item矩陣,每個useritem都可以採用一個隱向量表示。比如在下圖中的例子中,我們把每個user表示成一個二維向量,同時把每個item表示成一個二維向量,兩個向量的點積就是矩陣中useritem的打分。

具體來說,xhxi  xixj 的係數分別為vh,vi

vi,vj,它們之間有共同項 vi。也就是說,所有包含“xi 的非零組合特徵(存在某個 j≠i,使得 xixj≠0)的樣本都可以用來學習隱向量 vi,這很大程度上避免了資料稀疏性造成的影響。而在多項式模型中,whi  wij 是相互獨立的。

FFM:通過引入field的概念,FFM把相同性質的特徵歸於同一個field

“Day=26/11/15”“Day=1/7/14”“Day=19/2/15”這三個特徵都是代表日期的,可以放到同一個field中。同理,商品的末級品類編碼生成了550個特徵,這550個特徵都是說明商品所屬的品類,因此它們也可以放到同一個field中。簡單來說,同一個categorical

特徵經過One-Hot編碼生成的數值特徵都可以放到同一個field,包括使用者性別、職業、品類偏好等。在FFM中,每一維特徵 xi,針對其它特徵的每一種field fj,都會學習一個隱向量 vi,fj。因此,隱向量不僅與特徵相關,也與field相關。也就是說,“Day=26/11/15”這個特徵與“Country”特徵和“Ad_type”特徵進行關聯的時候使用不同的隱向量,這與“Country”“Ad_type”的內在差異相符,也是FFM“field-aware”的由來。

假設樣本的 n 個特徵屬於 f field,那麼FFM的二次項有 nf個隱向量。而在FM模型中,每一維特徵的隱向量只有一個。FM可以看作FFM的特例,是把所有特徵都歸屬到一個field時的FFM模型。根據FFMfield敏感特性,可以匯出其模型方程。


其中,fj 是第 j 個特徵所屬的field。如果隱向量的長度為 k,那麼FFM的二次引數有 nfk 個,遠多於FM模型的 nk 個。此外,由於隱向量與field相關,FFM二次項並不能夠化簡,其預測複雜度是 O(kn2)

為了使用FFM方法,所有的特徵必須轉換成“field_id:feat_id:value”格式field_id代表特徵所屬field的編號,feat_id是特徵編號,value是特徵的值。數值型的特徵比較容易處理,只需分配單獨的field編號,如使用者評論得分、商品的歷史CTR/CVR等。categorical特徵需要經過One-Hot編碼成數值型,編碼產生的所有特徵同屬於一個field,而特徵的值只能是01,如使用者的性別、年齡段,商品的品類id等。除此之外,還有第三類特徵,如使用者瀏覽/購買品類,有多個品類id且用一個數值衡量使用者瀏覽或購買每個品類商品的數量。這類特徵按照categorical特徵處理,不同的只是特徵的值不是01,而是代表使用者瀏覽或購買數量的數值。按前述方法得到field_id之後,再對轉換後特徵順序編號,得到feat_id,特徵的值也可以按照之前的方法獲得。

在訓練FFM的過程中,有許多小細節值得特別關注。

第一,樣本歸一化FFM預設是進行樣本資料的歸一化,即 pa.norm 為真;若此引數設定為假,很容易造成資料inf溢位,進而引起梯度計算的nan錯誤。因此,樣本層面的資料是推薦進行歸一化的。

第二,特徵歸一化CTR/CVR模型採用了多種型別的源特徵,包括數值型和categorical型別等。但是,categorical類編碼後的特徵取值只有01,較大的數值型特徵會造成樣本歸一化後categorical類生成特徵的值非常小,沒有區分性。例如,一條使用者-商品記錄,使用者為性,商品的銷量是5000個(假設其它特徵的值為零),那麼歸一化後特徵“sex=male”(性別為男)的值略小於0.0002,而“volume”(銷量)的值近似為1。特徵“sex=male”在這個樣本中的作用幾乎可以忽略不計,這是相當不合理的。因此,將源數值型特徵的值歸一化到 [0,1] 是非常必要的。

第三,省略零值特徵。從FFM模型的表示式(4)可以看出,零值特徵對模型完全沒有貢獻。包含零值特徵的一次項和組合項均為零,對於訓練模型引數或者目標值預估是沒有作用的。因此,可以省去零值特徵,提高FFM模型訓練和預測的速度,這也是稀疏樣本採用FFM的顯著優勢