天天看點

[044]利用FFM做新聞源評級一算法調研

FFM簡介

源碼使用台灣大學LIBFFM

http://www.csie.ntu.edu.tw/~cjlin/libffm/

LIBFFM是一個解決領域感覺分解機的開放源碼工具( field-aware factorization machines (FFM))。它已經赢得了最近的兩個點選率預測( click-through rate prediction)比賽冠軍。

它支援:l2正則化logistics損失函數(l2-regularized logistic loss)。

主要特點:

1)隻用SSE結構來加速向量運算

2)使用交叉驗證做參數選擇

3)在硬碟上學習,比在記憶體中處理更大的資料

下載下傳:

注意:FFM容易過拟合,在使用之前先閱讀README。

下載下傳連結:

zip

tar.gz

github

README

過拟合和早停止

為了避免過拟合,我們推薦提供一個驗證集,使用-p參數,可以使用‘–auto-stop’參數,來在程式疊代到最好的驗證損失的時候停止。

> ffm-train -p va.ffm -l  --auto-stop tr.ffm
           

安裝

要求:LIBFFM 是用C++ 寫的,需要C++11和OpenMP運作環境。

資料格式:

LIBFFM的資料格式為:

<label> <field1>:<index1>:<value1> <field2>:<index2>:<value2> ...
.
.
.
           

field和index都是非負整數。

訓練和預測

- `ffm-train'
  usage: ffm-train [options] training_set_file [model_file]
  options常用參數:
  -l 正則化參數(預設.)
  -t 疊代次數
  -s 線程數
  -p 驗證集路徑
  -v 交叉驗證分數
  --auto-stop 達到最好的驗證損失時停止,必須有-p選項
           
-   `ffm-predict'

    usage: ffm-predict test_file model_file output_file
           

使用

Google過程中發現美團點評技術團隊,也會用FFM算法做ctr預估,并效果很好,更主要的該團隊将技術以部落格的形式分享給大家,并講述的很詳細,值得稱贊!

美團點評的點選率CTR(click-through rate)和轉化率CVR(conversion rate)使用了該模型。

其在資料量比較大并且特征稀疏的情況下,仍然能夠得到優秀的性能和效果。美團點評技術團隊在搭建DSP(Demand Side Platform)的過程中,探索并使用了FM和FFM模型進行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]。

核心思想:

所有categorical類型的特征,需要經過獨熱編碼(One-Hot Encoding)轉換成數值型特征。大部分樣本資料特征是比較稀疏的。

多項式模型是包含特征組合的最直覺的模型。對于二階多項式模型,組合特征的參數一共有n*(n-1)/2個,任意兩個參數都是獨立的。然而,在資料稀疏性普遍存在的實際應用場景中,二次項參數的訓練是很困難的。

是以,所有二次項參數 wij 可以組成一個對稱陣 W(為了友善說明FM的由來,對角元素可以設定為正實數),那麼這個矩陣就可以分解為 W=VTV,V 的第 j 列便是第 j 維特征的隐向量。換句話說,每個參數 wij=⟨vi,vj⟩,這就是FM模型的核心思想。

此FFM模型采用logistic loss作為損失函數,和L2懲罰項,是以隻能用于二進制分類問題。

詳細介紹可進美團點評技術團隊 檢視。

繼續閱讀