推荐系统-重排序-CTR-DeepFM等DNN模型

2019-06-02  本文已影响0人  莱昂纳多91

概述

关键词:特征组合
LR:缺乏特征组合能力,需人工做特征工程
GBDT+LR:特种组合能力不强,对高维的稀疏特征应对乏力
FM:具有较强的二阶特征组合能力,高阶特征组合应对乏力
Wide&Deep:较好地利用了低阶和高阶组合特征。但是wide部分依旧需要特征工程,其二阶特征组合需要人工挑选
DeepFM :其实是Wide&Deep的变体,把wide部分由LR转变为FM。所以更好地利用了低阶和高阶的组合特征。而且免去了人工特种组合。

说到底,为什么CTR领域,特征组合如此被强调?
首先,CTR领域特征基本属于离散类别特征。
而不同的特征之间可能存在某种联系。例如:

像第一种组合,可能很容易就能想出来,甚至不需要数据的支持
而第二种组合,就不太容易能想出来,但可能通过简单的数据分析而发现此规律
但像第三种组合,几乎只能通过数据发掘出来。
这就提示我们,数据中可能存在很多难以人工发掘甚至不能通过简单数据分析而得出的有用的组合特征这些组合特征可能是低阶的也可能是高阶的,而且高低阶组合特征都很重要。
所以要尽可能做特征组合。
其实在NLP中,n-gram也属于特征组合。只不过会带来更高的特征维度。因为1,词表太大,2,词不分field。最终会导致词的embedding矩阵太大。

DeepFM

模型

DeepFm
如上图所示:
其实DeepFM就是把Wide&Deep模型的wide部分改为了FM。
黑色线---带权重的连接
红色线---不带权重的连接
蓝色线---稀疏特征向稠密特征转换的embedding向量,并且这个embedding会随着训练而学习更新

FM层的探究

FM

对于onehot编码来说,
x_i特征对应着向量[0,0...1...0...0]其中第i位=1,其他=0;
x_i特征对应着向量[0,0...0...1...0]其中第j位=1,其他=0;
所以x_i的隐向量=v_i等价于[0,0...1...0...0]被编码成v_i
v_i=transform([0,0...1...0...0])
x_i*x_j表示两特征交叉,其权重w_{ij}则被FM表示成了两隐向量的內积<v_i·v_j>
<v_i·v_j>x_i*x_j=transform([0,0...1...0...0])·transform([0,0...0...1...0])
注意式子
\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}<v_i·v_j>x_ix_j \tag{4.1}
虽然看似有o(n^2)的复杂度,但实际上x_ix_j绝大多数时候都=0,这表示对于每一个样本,式(4.1)计算量远达不到o(n^2)。对于一个特定的样本,式(4.1)退化成
\sum_{i=1}^{\overline{n} -1}\sum_{j=i+1}^{\overline{n}}<v_i·v_j>x_ix_j \tag{4.2}
\overline{n}表示该样本的稀疏特征中1的数量。

\begin{alignedat}{2} \sum_{i=1}^{\overline{n} -1}\sum_{j=i+1}^{\overline{n}}<v_i·v_j>x_ix_j = \sum_{i=1}^{\overline{n} -1}\sum_{j=i+1}^{\overline{n}}transform([0,0...1...0...0])·transform([0,0...0...1...0]) \end{alignedat}

在DeepFM的FM层中,对于特定的样本,二阶特征组合被表示成了
\sum\sum<Dense_{ia}·Dense_{ja}>
Dense_{ia},Dense_{ja}表示样本a分别在filed i和j的具体Dense特征。这其实就是FM的隐向量v_i,v_j
\sum\sum<Dense_{ia}·Dense_{ja}> =\sum\sum<v_i·v_j>
而要使这个等式成立,需要满足如下条件:

如果要解决multihot的问题,就需要把每一个特征化为一个field。但这样会带来一个问题,就是DenseEmbedding层维度太高(相当于稀疏编码的k倍!),造成神经网络参数过多影响速度,所以DeepFM也算是一种折中(但结果还是有提高的)
在DeepFM的论文中,特征只使用了onehot编码,巧妙地规避了这个问题。

而反观wide&deep模型,是使用了multihot编码的(user installed app,impression app),在转化为dense embedding时可能用了求和或平均然后送入Deep模块;但同时模型把稀疏的multihot编码做了人工特征挑选和交叉后送入了Wide模块。所以可以认为wide&deep模型反而比DeepFM模型多做了field内特征交叉的工作(但是是非自动化的,亦非全部field的)。所以在multihot编码问题上,DeepFM还有提升空间。例如对于multihot特征,单独使用一个FM做field内交叉。

其它FM与神经网络组合模型

FNNPNN.png

FNN

使用FM初始化DenseEmbedding层,然后直接输入全连接网络。
需要预训练。在神经网络训练后,高阶组合特征得到了较好地训练,但可能因而使得低阶特征被忽略

PNN

从稀疏层到DenseEmbedding层是类似DeepFM的随机初始化+后续训练。只不过在DenseEmbedding层到隐层之间,又多了一层Product层。这个Product层用于组合DenseEmbedding层中不同field的特征。怎么组合呢?
看上图中,在Product层,有两部分组成:

NFM

像PNN,在DenseEmbedding层和隐层之间加一层FM层做特征组合。其实比PNN简单

AFM

引入注意力机制
待续

参考

DeepFM: A Factorization-Machine based Neural Network for CTR Prediction
https://cloud.tencent.com/developer/article/1164785

上一篇 下一篇

猜你喜欢

热点阅读