天天看点

[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惩罚项,因此只能用于二元分类问题。

详细介绍可进美团点评技术团队 查看。

继续阅读