分解机

"Factorization Machines."

Posted by Jiale Chen on March 24, 2018

在基于Model-Based的协同过滤中,一个rating矩阵可以分解为user矩阵和item矩阵,每个user和item都可以采用一个隐向量表示。如下图所示。

<img src="https://github.com/starfolder/MarkdownPic/blob/Razor_Atmel/ffm_mf.png?raw=true", alt=" "/>

上图把每一个user表示成了一个二维向量,同时也把item表示成一个二维向量,两个向量的内积就是矩阵中user对item的打分。

解读第(1)步到第(2)步,这里用A表示系数矩阵V的上三角元素,B表示对角线上的交叉项系数。由于系数矩阵V是一个对称阵,所以下三角与上三角相等,有下式成立:

Field-aware Factorization Machine

场感知分解机(Field-aware Factorization Machine ,简称FFM)最初的概念来自于Yu-Chin Juan与其比赛队员,它们借鉴了辣子Michael Jahrer的论文中field概念,提出了FM的升级版模型。

通过引入field的概念,FFM吧相同性质的特征归于同一个field。在FM开头one-hot编码中提到用于访问的channel,编码生成了10个数值型特征,这10个特征都是用于说明用户PV时对应的channel类别,因此可以将其放在同一个field中。那么,我们可以把同一个categorical特征经过one-hot编码生成的数值型特征都可以放在同一个field中。

在FFM中,每一维特征,针对其它特征的每一种”field” ,都会学习一个隐向量。因此,隐向量不仅与特征相关,也与field相关。 假设每条样本的n个特征属于个field,那么FFM的二次项有$nf$个隐向量。而在FM模型中,每一维特征的隐向量只有一个。因此可以吧FM看作是FFM的特例,即把所有的特征都归属到一个field是的FFM模型。根据FFM的field敏感特性,可以导出其模型表达式: \

其中,是第个特征所属的field。如果隐向量的长度为,那么FFM的二交叉项参数就有个,远多于FM模型的个。此外,由于隐向量与field相关,FFM的交叉项并不能够像FM那样做化简,其预测复杂度为

例如有以下数据:

User Movie Genre Price
YuChin 3Idiots Comedy,Drama $9.9

Price是数值型特征,实际应用中通常会把价格划分为若干个区间(即连续特征离散化),然后再one-hot编码,这里假设$9.99对应的离散化区间tag为”2”。当然不是所有的连续型特征都要做离散化,比如某广告位、某类广告/商品、抑或某类人群统计的历史CTR(pseudo-CTR)通常无需做离散化。 该条记录可以编码为5个数值特征,即User^YuChin, Movie^3Idiots, Genre^Comedy, Genre^Drama, Price^2。其中Genre^Comedy, Genre^Drama属于同一个field。为了说明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
Genre^Drama 4
Price 4 Price^2 5

那么,FFM所有的(二阶)组合特征共有10项 , 即为:

Yu-Chin Juan实现了一个C++版的FFM模型,源码可从Github下载。这个版本的FFM省略了常数项和一次项,模型方程如下。 其中,是非零特征的二元组合, 是特征,属于field 是特征 对field 的隐向量。此FFM模型采用logistic loss作为损失函数,和L2惩罚项,因此只能用于二元分类问题。
其中, 是第 个样本的label, 是训练样本数量, 是惩罚项系数。模型采用SGD优化,优化流程如下。