推荐系统面试100问(一)-Wide&Deep

Wide&Deep:

推荐下面的参考资料,讲解非常详细,包括自己对于Wide&Deep和推荐系统的看法。

1. Wide&Deep论文的贡献:

  • 联合训练Wide&Deep框架,分别为带有Embedding层的前向NN和带有特征变换的线性模型;
  • 在Google Play进行实现和应用,作者进行了AB测试,相比Wide模型带来了3.9%的提升;
  • TensorFlow开源实现;
    (这个贡献我也是醉了)

2. 搜索推荐任务想要解决的两个问题:

  • Memorization(记忆能力):
    记忆能力定义为了解物品或特征的共现频率,以及探索历史数据中的潜在关系。类比人类自己,可以认为是,日常中认识,记忆知识和常识的过程。
  • Generalization(泛化能力):
    模型能够基于现有联系,来探索新的特征组合,即使这些在过去很少或者从未出现。可以类别是一种推理能力。

3. Wide&Deep整体框架是什么:

推荐系统面试100问(一)-Wide&Deep_第1张图片
Wide&Deep由两部分构成,左边的Wide部分,也就是一个我们常见的线性模型,可以认为是LR。右边是Deep部分,也就是NN,将类别特征的Embedding输入,然后经过一系列隐藏层。Wide和Deep部分后面拼接在一起,一起联合训练。
其实这个图和Google最终采用的结构不同,可以借助此图意会,很多教程拿这个图讲解,其实并不精确。

4. Wide部分详细是什么:

Wide部分也就是上图的左边,可以认为是一个泛华的线性模型,线性模型形式为: y = w T x + b y = w^Tx + b y=wTx+b

  • y y y:预测输出;
  • x = [ x 1 , x 2 , . . . x d ] x=[x_1, x_2,...x_d] x=[x1,x2,...xd]:d维的特征向量;
  • w = [ w 1 , w 2 , . . . w d ] w = [w_1, w_2,...w_d] w=[w1,w2,...wd]:模型参数;
  • b b b:偏差

Wide的输入,除了原始特征,还包括一些转换的联合交叉特征(Cross-product transformation features),可以定义为:
ϕ k ( x ) = ∏ i = 1 d x i c k i c k i ∈ { 0 , 1 } \phi_{k}(\mathbf{x})=\prod_{i=1}^{d} x_{i}^{c_{k i}} \quad c_{k i} \in\{0,1\} ϕk(x)=i=1dxickicki{0,1}
也就是我们常见的特征工程中的交叉特征。其实最终Google的实现和部署仅仅采用了User Installed AppImpression App这两个特征。不过在实际应用中,我们可以自行尝试其他的特征交叉,但是可能会使维度很大。

5. Deep部分详细是什么:

Deep部分即上图的右边,是一个前馈神经网络。输入是类别特征,每一个稀疏高纬的稀疏特征首先转换为低纬的稠密实值嵌入向量,嵌入向量的维度一般在 O ( 10 ) O(10) O(10) O ( 100 ) O(100) O(100)数量级。嵌入向量首先被随机初始化,然后通过最小化损失函数训练模型,和模型的其他参数一样来进行训练。

这部分和NLP中词嵌入向量几乎是完全一样的,在word2vec等预训练词向量出现之前,就是对模型进行随机初始化,然后利用模型来进行训练。

6. Wide&Deep是如何联合训练的:

模型将Wide部分和Deep部分拼接(Concat)在一起,然后通过BP进行联合训练,实验中使用了 L 1 L1 L1正则化,以及AdaGrad优化算法。模型的最终预测输出为:
P ( Y = 1 ∣ x ) = σ ( w w i d e T [ x , ϕ ( x ) ] + w deep T a ( l f ) + b ) P(Y=1 | \mathbf{x})=\sigma\left(\mathbf{w}_{w i d e}^{T}[\mathbf{x}, \phi(\mathbf{x})]+\mathbf{w}_{\text {deep}}^{T} a^{\left(l_{f}\right)}+b\right) P(Y=1x)=σ(wwideT[x,ϕ(x)]+wdeepTa(lf)+b)

  • Y Y Y:二分类标签;
  • σ \sigma σ:sigmoid激活函数;
  • ϕ ( x ) \phi(x) ϕ(x):交叉特征变换;
  • w w i d e w_{wide} wwide:wide模型参数向量;
  • w d e e p w_{deep} wdeep:deep部分的参数;

7. 模型的输入是什么:

此处给出推荐系统的流程概览:
推荐系统面试100问(一)-Wide&Deep_第2张图片
模型的数据输入,分为类别特征和数值特征,两个分开进行考虑。
对于类别特征,将其转化为ID,建立一个字典存储。
对于连续的实值特征,进行归一化到 [ 0 , 1 ] [0,1] [0,1]区间。此处并没有采用常见的的MinMacScaler和StandScaler。而是得到x的累积分布,然后根据分位值求解。第 i i i分位值,归一化后之的值为 i − 1 n q − 1 \frac{i-1}{n_q-1} nq1i1

8. 模型的具体结构:

推荐系统面试100问(一)-Wide&Deep_第3张图片
看这个图要清晰的多,输入输出分别是什么,交叉特征是什么,Deep部分和Wide部分到底是什么拼接的。

模型的输入依然是前面讲过的,Wide部分的输入是全部的原始特征和交叉特征(只有User Installed APP和Impression APP这两个特征),Deep部分是全部的类别特征。类比特征嵌入到大小为32的稠密向量中。

数值型特征和Embedding层,拼接在一起得到一个大约1200维的稠密向量,再经过三层全连接得到输出。

参考资料:
Paper-Wide & Deep Learning for Recommender Systems
计算广告CTR预估系列(四)–Wide&Deep理论与实践
Wide and Deep on TensorFlow (notebook style)
Wide and Deep on Pytorch
pytorch-widedeep

你可能感兴趣的:(数据挖掘,机器学习)