基于RNN的个性化电影推荐尝试

原创 2016年09月23日 18:34:52

基于RNN的个性化电影推荐尝试

随着深度学习在工业界的应用越来越多,优酷土豆尝试在视频推荐领域中利用深度学习方法,提高视频推荐的准确性,为用户提供优质的视频推荐服务。本次为大家分享在个性化电影推荐上的尝试,利用RNN的序列模型进行用户电影推荐。

视频推荐问题

目前常用的个性化推荐包括:基于关联规则的推荐算法、基于内容的推荐算法和基于协同过滤的推荐算法。在视频网站中的个性化推荐中,基于协同过滤的个性化推荐算法为主要的推荐算,它能够过滤难以进行机器自动基于内容分析的信息,能够基于一些复杂的难以表达的概念(信息质量、品位)进行过滤。但是协同过滤算法无法处理用户的观看序列信息,不能根据用户的观看序列进行视频的推荐,只是考虑了用户单个观看行为信息。那么如何挖掘用户的观看序列信息,对用户进行更为准确的个性化视频推荐?
目前的序列模型中,比较火和使用的为RNN模型,其在语音识别机器翻译文本处理等领域中取到了较好的结果。因此,我们采用了RNN模型进行用户观看序列的建模和预测。

RNN模型

本文RNN介绍借鉴了循环神经网络(RNN, Recurrent Neural Networks)介绍,下面部分图和解释来自博客。

RNN

RNN模型主要是用来处理序列问题,在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。

流程图

RNNs包含输入单元(Input units),输入集标记为{x0,x1,…,xt,xt+1,…},而输出单元(Output units)的输出集则被标记为{y0,y1,…,yt,yt+1.,..}。RNN还包含隐藏单元(Hidden units),我们将其输出集标记为{s0,s1,…,st,st+1,…},这些隐藏单元完成了最为主要的工作。你会发现,在图中:有一条单向流动的信息流是从输入单元到达隐藏单元的,与此同时另一条单向流动的信息流从隐藏单元到达输出单元。在某些情况下,RNNs会打破后者的限制,引导信息从输出单元返回隐藏单元,这些被称为“Back Projections”,并且隐藏层的输入还包括上一隐藏层的状态,即隐藏层内的节点可以自连也可以互连。

LSTM

由于在RNN中,更新参数采用的是BPTT方式,当序列长度边长时,会产生梯度消失的问题。为了解决这个问题,产生了LSTM模型。在LSTM模型中,隐藏层变为一个复杂的block,其中记忆结构被称为cells,可以把cells看作是黑盒用以保存当前输入xt之前的保存的状态ht−1,这些cells更加一定的条件决定哪些cell抑制哪些cell兴奋。它们结合前面的状态、当前的记忆与当前的输入。已经证明,该网络结构在对长序列依赖问题中非常有效。LSTMs的网络结构如下图所示。对于LSTMs的学习,参见 Understanding-LSTMs
流程图

电影推荐应用

以上是关于RNN的简单介绍,如要详细了解,可以参考具体的文献和代码。接下来主要介绍我们如何在优酷土豆电影推荐中使用RNN进行个性化推荐。
在电影推荐中,我们要解决的是根据用户历史观看的视频预测用户未来观看的电影,如下图所示:
电影推荐

训练样本

为了解决以上问题,那么我们现在可以拿到用户的数据有什么?显而易见,用户的观看历史我们是可以获得。因此,对于模型的训练数据可以结构化为his(u)={v1,v2,v3,..vn}.其中,v为用户观看的视频,v1,v2.为用户观看时间上的序列。当然,为了数据的准确性,进行了观看历史的清洗,如用户观看视频的播放完成率等。
其实,对于用户和视频数据而言,可用的数据还有用户的画像和视频的画像。为了模型的简化和训练时间的考虑,实验中只采用了用户的观看历史。

模型目标

有了上面的数据,接下来就需要对模型进行训练。
首先,定义目标函数,用交叉熵函数定义目标函数:

E=1Nnylogp+(1y)log(1p)

其中,y为label数据,p为用户下一个视频的预测概率。
具体训练流程如图,将视频预测问题转换为序列预测问题,如用户观看历史为v1,v2,v3, 当模型输入为v1,v2时,目标则是最大化视频v3的概率。
电影推荐

用户预测

用了模型之后如何使用呢?其实在上面的模型的目标设定时就可以看出。作为一个序列的模型,在进行用户视频预测时,输入用户历史的观看序列,选出用户可能观看的视频(按照预测的概率进行排序)即可。如图所示:
电影推荐

实验结果

我们选取了百万级的用户进行采样,构建训练集。并采用tensorflow进行编码实现。由于RNN模型训练周期时间较长,我们使用阿里云的HPC作为训练机器,在M40上进行加速训练。
试验中样本数量为千万级,视频数为千级别,采用1个LSTM层,50个cell,迭代次数为60。在此配置上,训练时间为40minue。
为了验证其效果,我们在优酷土豆上进行AB小流量测试,发现RNN点击率的收益效果明显。

总结

虽然RNN在目前的实验中有一定效果,但是由于RNN训练复杂,对于大规模的数据而言计算还是比较困难,对于大规模使用还需要很长的路要走。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

IRGAN(学习笔记part一)

-IRGAN: A Minimax Game for Unifying Generative and Discriminative Information Retrieval Models

协同过滤之 三、基于RBM的推荐算法

1、RBM用于协同过滤算法介绍 Ruslan Salakhutdinov首次提出了使用RBM求解Netflix竞赛中的协同过滤问题。其首先假设协同过滤系统中共有M个用户以及N个项目,用户对于某一个项目...

基于RNN的个性化电影推荐尝试

基于RNN的个性化电影推荐尝试随着深度学习在工业界的应用越来越多,优酷土豆尝试在视频推荐领域中利用深度学习方法,提高视频推荐的准确性,为用户提供优质的视频推荐服务。本次为大家分享在个性化电影推荐上的尝...

序列标注问题中将分类标签引入RNN网络结构的尝试

本文讲了讲我们在解决序列标注问题中将分类标签引入RNN网络结构的一次不成功的尝试。...

序列标注问题中将分类标签引入RNN网络结构的尝试

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/                                       author: 张俊林,黄通文,沈磊,薛...

百度地图api新手尝试,个性化定制,查询定位

刚开始学js的百度地图api,尝试了一下,把自己的第一个新手例子贴出来 一、首先得申请一个AK 二、官方有许多的demo,可以熟悉下                        body...
  • ee99ppq
  • ee99ppq
  • 2017年07月02日 10:22
  • 479

一次用爬虫扒取豆瓣电影条目信息的尝试

最近做个电影的东西,突发奇想把豆瓣的电影条目扒下来一点,看了下,现在大概有140个左右的条目,这些条目分得比较细,连某个人的电影都分了出来,所以重复的也比较多,当然这些我都还没细弄,只是大致扒了一点,...

聊聊淘宝天猫个性化推荐技术演进史

原文链接 聊聊淘宝天猫个性化推荐技术演进史 博文视点 2017-05-09 14:09:52 浏览28 评论0 双11 个性化推荐 阿里 摘要: 个性化推荐技术直面...

个性化推荐算法和二部图-论文学习

本文为学习论文《Bipartite network projection and personal recommendation》的简要备忘笔记。 0,一般来说,一个推荐系统由用户user和商品obj...

如何实现基于内容和用户画像的个性化推荐

基于内容和用户画像的个性化推荐,有两个实体:内容和用户。需要有一个联系这两者的东西,即为标签。内容转换为标签即为内容特征化,用户则称为用户特征化。 因此,对于此种推荐,主要分为以下几个关...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于RNN的个性化电影推荐尝试
举报原因:
原因补充:

(最多只允许输入30个字)