100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 推荐系统组队学习——WideDeep

推荐系统组队学习——WideDeep

时间:2020-09-14 07:54:13

相关推荐

推荐系统组队学习——WideDeep

文章目录

一、点击率预估简介二、Wide&Deep原理三、代码实现四、深度学习推荐系统以后的发展

一、点击率预估简介

点击率预估是对每次广告点击情况作出预测,可以输出点击或者不点击,也可以输出该次点击的概率,后者有时候也称为pClick.

点击率预估问题就是一个二分类的问题,在机器学习中可以使用逻辑回归作为模型的输出,其输出的就是一个概率值,我们可以认为输出的这个概率值是某个用户点击某广告的概率。

广告点击率预估是需要得到某个用户对某个广告的点击率,然后结合广告的出价用于排序;而推荐算法很多大多数情况下只需要得到一个最优的推荐次序,即TopN推荐的问题。当然也可以利用广告的点击率来排序,作为广告的推荐。

二、Wide&Deep原理

FM模型存在如下缺点:当query-item矩阵是稀疏并且是high-rank的时候(比如user有特殊的爱好,或item比较小众),很难非常效率的学习出低维度的表示。这种情况下,大部分的query-item都没有什么关系。但是dense embedding会导致几乎所有的query-item预测值都是非0的,这就导致了推荐过度泛化,会推荐一些不那么相关的物品。

Memorization 和 Generalization是推荐系统很常见的两个概念,其中Memorization指的是通过用户与商品的交互信息矩阵学习规则,而Generalization则是泛化规则。Memorization只需要使用一个线性模型即可实现,而Generalization需要使用DNN实现。

FM算法就是很好的Generalization的例子,它可以根据交互信息学习到一个比较短的矩阵 V,其中 vi 储存着每个用户特征的压缩表示(embedding)。协同过滤与SVD都是Memorization 的例子,他们都靠记住用户之前与哪些物品发生了交互从而推断出的推荐结果,这两者推荐结果当然存在一些差异。Wide&Deep模型就能够融合这两种推荐结果做出最终的推荐,得到一个比之前的推荐结果都好的模型。

上面是wide&deep模型的结构图。

左边的wide部分是一个广义的线性模型,输入的特征主要有两部分组成,一部分是原始的部分特征,另一部分是原始特征的交互特征。交互特征可以定义为:

对于wide部分训练时候使用的优化器是带 L1 正则的FTRL算法(Follow-the-regularized-leader),而L1 FTLR是非常注重模型稀疏性质的,也就是说W&D模型采用L1 FTRL是想让Wide部分变得更加的稀疏,即Wide部分的大部分参数都为0,这就大大压缩了模型权重及特征向量的维度。Wide部分模型训练完之后留下来的特征都是非常重要的右边的Deep部分是一个DNN模型,输入的特征主要分为两大类,一类是数值特征(可直接输入DNN),一类是类别特征(需要经过Embedding之后才能输入到DNN中)。

DNN模型随着层数的增加,中间的特征就越抽象,也就提高了模型的泛化能力。对于Deep部分的DNN模型作者使用了深度学习常用的优化器AdaGrad,这也是为了使得模型可以得到更精确的解。

W&D模型是将两部分输出的结果结合起来联合训练,将deep和wide部分的输出重新使用一个逻辑回归模型做最终的预测,输出概率值。联合训练的数学形式如下:

wide&deep模型尽管在模型结构上非常的简单,但是如果想要很好的使用wide&deep模型的话,还是要深入理解业务,确定wide部分使用哪部分特征,deep部分使用哪些特征,以及wide部分的交叉特征应该如何去选择

三、代码实现

Tensorflow的库中是已经内置了Wide-Deep model

# 全局实现tf.keras.experimental.WideDeepModel(linear_model, dnn_model, activation=None, **kwargs)

linear_model = LinearModel()dnn_model = keras.Sequential([keras.layers.Dense(units=64),keras.layers.Dense(units=1)])combined_model = WideDeepModel(linear_model, dnn_model)pile(optimizer=['sgd', 'adam'], 'mse', ['mse'])# define dnn_inputs and linear_inputs as separate numpy arrays or# a single numpy array if dnn_inputs is same as bined_model.fit([linear_inputs, dnn_inputs], y, epochs)# or define a single `tf.data.Dataset` that contains a single tensor or# separate tensors for dnn_inputs and linear_inputs.dataset = tf.data.Dataset.from_tensors(([linear_inputs, dnn_inputs], y))combined_model.fit(dataset, epochs)

四、深度学习推荐系统以后的发展

以上内容来自datawhale推荐系统组队学习

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。