2018-03-05 14:50:12 free356 阅读数 5394
  • 机器学习推荐系统视频教程

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 机器学习推荐系统视频培训教程概况:课程从推荐系统在机器学习概述开始,详解推荐系统中两大核心算法:协同过滤与隐语义模型。使用Surprise库对电影数据集进行建模推荐,后使用深度学习框架Tensorflow实现一个简易的基于隐语义模型的推荐系统。

    6308 人正在学习 去看看 唐宇迪

基于深度学习的推荐系统研究

论文信息:北京邮电大学   陈达  14年硕毕论

目的:深度网络学习算法应用到推荐系统

为此工作:

1)研究分析基于内容的推荐系统和基于协同过滤的推荐系统,包括基于相似度的最近邻方法朴素贝叶斯方法潜在因素的矩阵分解方法,分析了各自的优缺点

2)研究一个典型的深度网络模型——多层受限波兹曼机(DBN

3)将深度网络与传统协同过滤方法相结合,建立一个新的深度网络混合模型,采用有限步吉布斯采样的最小化散度差算法对深度模型的似然函数求解,可以训练一个深度网络系统

4)在多个数据集上,将此方法和传统方法进行对比,证明深度网络学习方法在特征提取上具有不错能力,用在推荐系统上比协同过滤方法有更好的抗噪性和有效性。 

内容一(传统算法优缺点)

1,基于内容的推荐算法:TF-IDF,朴素贝叶斯。

2,基于协同过滤的推荐算法:根据相似用户的最近邻,潜在因素的矩阵分解。

内容二(深度网络结构):

背景知识1神经网络的神经元,sigmoid神经元

              

                                    

对于一个单层的推断结构利用梯度下降的方式学习权值:

         

上述公式中,字母依次分别代表学习速率,0,1二值,推断的概率。

背景知识2波兹曼机

波兹曼机是由随机神经元函数(sigmoid)组成的随机机器,每个节点的状态只能是“开”和“关”两种状态,用01来表示,这里的01状态的意义是代表了模型会选取哪些节点来使用,处于激活状态的节点被使用,未处于激活状态的节点未被使用。节点的激活概率由可见层和隐藏层节点的分布函数计算。其神经元分成两部分功能组一一下面一层的可见层神经元和上面一层的隐含层祌经元。在网络的训练阶段所有的可见神经元都被钳制在环境所决定的特定状态,而隐藏神经元总是自由运行的。

 

背景知识3波兹曼机统计力学与吉布斯分布

有许多自由度的物理系统,它可以驻留在大量可能状态中的任何一个。P表示状态概率,E表示状态的能量(PE一一对应),当系统和周围环境处于热平衡状态时一个基本的状态的发生概率为:

 

其中T为幵尔文绝对摄氏度,K为波兹曼常数,再根据概率之和为1可以得到在某个状态E下联合概率分布函数:

 

上述分布即符合吉布斯分布。吉布斯分布一个重要的性质:能量低的状态比能量高的状态发生概率较高。

背景知识4受限波兹曼机

普通波兹曼机简化成了受限波兹曼机,受限波兹曼机隐含层与隐含层之间无连接,可见层与可见层之间无连接,如下:

 

在可见层和隐含层加入了偏好之后的受限波兹曼机的联合能量函数为:

 

其中i,j分别为可见层和隐含层神经元的个数,a可见层偏好,b为隐含层偏好,w为可见层和隐含层的连接权值。而可见层单元根据不同的应用情景有不同的取值范围和不同的神经元函数。

整个网络在状态X下的概率用能量函数表示:

 

这里注意vh为可见层向量和隐含层状态向量,状态X下的联合概率分布为:

 

由于隐含层与隐含层之间无连接,可见层与可见层之间无连接,更重要的性质是:当给定了可见层的数据之后隐含层之间是条件独立的,给定了隐含层的数据之后可见层之间是条件独立的。

当给定可见层状态时,隐含层的某一个单元处于“激活”态概率为:

 

当给定隐含层状态时,可见层某一单元处于“激活”态概率为:

 

背景知识5多层波兹曼机

 

该图的最下层为可见层V,可见层之上的均为隐含层H,在多层情况下以三层为例,整个网络的联合能量函数为:

 

网络在状态X下的联合概率

 

在深度置信网络中利用最顶两个隐含层作为无向的关键记忆层(如图的双向箭头),将关联记忆表征的信息可以通过网络的重构反应到整个网络的参数上去,这样就可以进行“重复”学习的过程。

J表示可见层的输入数据,通常来说波兹曼机的运行状态分为两个阶段:

1,正向推断,这时整个网络在钳制环境下即在输入数据的直接影响下运行;

2,负向阶段,这个阶段中网络自由运行,隐含层不断自行推断进行状态转移,并且没有环境输入。那么深度结构波兹曼机的整个网络快速学习权值过程大致如图所示:

 

上图显示了一个快速的学习过程,向上的箭头表示利用该层钳制的数据和权值正向推断的过程,向下的箭头表示作为生成模型,模型重构出来的数据,而且网络的参数是一层一层地向上学习,也就是说当底层参数学习完毕后,将底层向上正向推断的数据作为可见层数据,再向上正向推断学习。

理解参考:https://www.cnblogs.com/jhding/p/5687696.html

内容三(深度结构模型的推荐算法):

一:深度模型

将深度波兹曼机的模型和传统最近邻的方法相结合,利用深度波兹曼机对高维数据的特征抽象表达能力和最近邻直观的而快速的打分预测能力,组成一个新的模型,对己存在的方法进行改进和提升,使其能够充分利用两个模型中出色特点避免两者中的缺点,扬长避短。

 

绿色框部分代表深度学习结构,用模型对训练数据进行输入,并利用无监督学习的方法训练深度网络,该深度模型一共有四层,包括可见层v1,隐含层h1、隐含层h2和隐含层h3,而顶层与隐含层h3形成无向的关联记忆层。

当数据通过深度结构进行深层映射后,从原来的M维(M为输入数据的维度)变成了最顶层的K维数(K为深度模型最顶层神经元的维度),这样我们认为原来高维数据通过特征探测群进行映射后,将数据内部隐含的特征映射到K维空间中。

比如,对于电影打分数据,我们将映射后的K维空间可以理解成该用户对M部电影的偏好特征,1-K个维度分别代表用户喜爱某个演员的程度、喜欢某个类型影片的程度、喜欢某个导员的程度等等,在这K个维度上我们对每个用户的数据进行聚类或者相似度比较,则相似度比较的结果往往比用原始数据进行比较的准确度要高。

二:多层模型的训练方法

要确定这个模型要知道模型的三个参数,下面就围绕着参数的求解进行分析。

参数求解用到了似然函数的对数对参数求导。由于从可知,能量E和概率P是成反比的关系,所以通过最大化P,才能使能量值E最小。最大化似然函数常用的方法是梯度上升法,梯度上升法是指对参数进行修改按照以下公式:

 

通过求关于的导数,即,然后对原值进行修改。如此迭代使似然函数P最大,从而使能量E最小。

对数似然函数对参数求导分析:

首先是对数似然函数的格式: 表示模型的输入数据。然后对里的参数分别进行求导,详细的推导过程就不写了:

 

由于上面三式的第二项中都含有 中仍然含有参数,所以它是式中求不出来的。所以,有很多人就提出了一些通过采样逼近的方法来求每一个式子中的第二项。

求解的算法:

1 Gibbs采样算法

因为在上一章节末尾讲对参数的求导中仍然存在不可求项表示可见层节点的联合概率。所以,要想得到 的值,就得要逼近它,求它的近似值。

Gibbs采样的思想是虽然不知道一个样本数据的联合概率P(x),但是知道样本中每一个数据的条件概率 (假设每一个变量都服从一种概率分布),则我可以先求出每一个数据的条件概率值,得到x的任一状态 。然后,我用条件概率公式迭代对每一个数据求条件概率。最终,迭代k次的时候,x的某一状态将收敛于x的联合概率分布P(x)

对于RBM来讲,则执行过程如图3所示:

                

3 Gibbs采样过程

求解过程是:假设给我一个训练样本v0,根据公式  h0中每个节点的条件概率,再根据公式 v1 中每个节点的条件概率,然后依次迭代,直到执行K步(K足够大),此时的概率将收敛于P(v)的概率。如下所示:

                           

 2CD-k算法

CD算法是需要k次(k=1Gibbs采样对可见层节点进行重构得到可见层节点的概率分布。其思想是:假设给模型一个样本v0,通过求所有隐藏层节点的概率值,然后每一个概率值和随机数进行比较得到每一个隐藏层节点的状态,然后通过公式求每一个可见层节点的概率值,再由求每一个隐藏层节点的概率值。最后参数梯度的计算公式变为:

 

其中,μ是学习率,datarecon分别表示训练数据的概率分布和重构后的概率分布。

通过以上方法都可以求出参数的梯度来,由每一个参数的梯度对原参数值进行修改来使模型的能量减小。

内容四(MovieLens数据集实验):

Movielens数据集:943个用户,1682部电影,100000条评分。

该数据有四列,第一列为评价序号,序号数最大为1000000,第二列代表用户的ID,第三列代表项目的ID,第四列代表用户对该项目的评价,通常来说,评价一般分为15五个等级,用户对物品的喜爱程度由小到大。

1,数据预处理

在该数据中按照百分比抽样,形成训练数据和测试数据。将数据形成一个943*1682的矩阵形式。

2,算法设计与实践

对于每一个用户的数据,分别建模,输入到模型中迭代调整权值,于是对于任意一个输入,我们需要将用户的打分数据形成softmax结构的输入,这里我们采用一个三维矩阵uatrainF(k,uraw,col)来记录softmax模型,其中K代表该列中的第Ksoftmaxurawcol分别代表原始矩阵的行和列,当数据进入模型时将uatrainF(k,uraw,col)的第二维(用户)抽取出来,输入模型算法,如下:

 

上图表示了一个可见层为softmax的两层波兹曼机模型的训练算法流程图,在初始化阶段,我们需要对模型的众多参数进行初始化,这些参数包括:权值学习速率、可见层偏好学习速率、隐含层偏好、权值代价因子、权值记忆因子、以及连接权值参数、可见层偏好、隐含层偏好,这些随机初始化的方法通常利用均匀分布随机数,或者标准正态分布随机数。进入迭代之后,进行正向推断和反向推断

对深度模型的建模工作,可利用上述两层波兹曼机的建方法,只是除了在第一层和第二层网络上与上述方法相同,第二层到顶层,隐含层神经元釆用的都是普通的{0,1}二值的神经元图的过程称为两层之间的预训练那么深度结构在相邻的两层之间都会有预训练的过程,由于我们的训练数据并没有标签数据,于是该模型不同于DBN—样存在着微调反馈这一阶段。模型算法流程图如图所示:

 

在预学习阶段,下一层隐含层的输出均作为上一层隐含层的输入。,将原来高维数据通过无监督学习在低维度重新表征出来。其中该网络的H1H2H3的维度分别为1000,500250,V1的维度即为输入矩阵的列数1628关于每一层神经元的个数的确定可参考上述链接指出,深层网络的中间层神经元较多时效果较好。接下来,对该低维数据重新进行相似度计算利用基于相似度计算的方法进行数据重构。

3实验结果评价方法

采用均方根误差(RMSE)来衡量真实评分数据和预测的评分数据的差距。

 

 

内容论文改进):

1MATLAB上运行,内存不够。

2,在Hadoop平台上的并行化。

2018-10-09 14:00:48 friyal 阅读数 929
  • 机器学习推荐系统视频教程

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 机器学习推荐系统视频培训教程概况:课程从推荐系统在机器学习概述开始,详解推荐系统中两大核心算法:协同过滤与隐语义模型。使用Surprise库对电影数据集进行建模推荐,后使用深度学习框架Tensorflow实现一个简易的基于隐语义模型的推荐系统。

    6308 人正在学习 去看看 唐宇迪

这是对近年来基于深度学习的推荐系统的内容的一份综述,具体来说,大部分内容来自
Deep Learning based Recommender System: A Survey and New Perspectives
,我翻译和总结了其中的一些内容。同时,我有时也会阅读该survey提到的工作的原文,并对某些更具体的内容做一些补充。

正文开始

深度学习近年来在各个领域都被广泛应用,推荐系统也不例外,那么,深度学习算法是如何与推荐系统联系起来的呢?文章旨在全面回顾最近基于深度学习的推荐系统的研究成果,并展望未来的趋势。

推荐系统是对信息爆炸的防线,对于用户的选择起到至关重要的作用。通常,我们基于用户偏好,项目特征,用户历史以及时序数据和空间数据的一些其他附加信息来生成推荐列表。我们把推荐系统分为协同过滤,content-based推荐系统和混合推荐系统。最近,基于深度学习的推荐系统通过克服传统模型的一些问题和实现高推荐质量而获得了显著的进步。深度学习能够有效地捕获非线性和非平凡的用户-项目关系,并且能够将数据表示为更复杂的抽象的编码。此外,它还从丰富的可访问数据源(如上下文,文本和可视信息)中捕获数据本身的错综复杂的关系。

近年来,基于深度学习的推荐方法的研究出版物数量呈指数增长,深度学习成为推荐系统研究中不可避免的部分。推荐系统领域领先的国际会议RecSys自2016年起开始定期进行深度学习推荐系统研讨会。该研讨会旨在促进研究并鼓励基于深度学习的推荐系统的应用。我们应该了解学术界和工业界的深度学习模型的优缺点和应用场景。这篇survey调查的文章主要来自NIPS, ICML, ICLR, KDD, WWW, SIGIR, WSDM, RecSys等顶级会议,具有相当程度的代表性。该调查的目的是为从业人员提供一个快速查询的目录。该survey似乎到目前为止还在不断更新,我这个系列只包括截止到2018.10.08的该survey中的内容。

首先,在讨论问题之前,我们需要确定我们讨论的范围,并做一些预定义。

Overview of Recommendation Systems and Deep Learning

推荐系统估计user对item的偏好,并推荐user可能喜欢的item。我们把推荐系统分为协同过滤,content-based推荐系统和混合推荐系统。 协作过滤从user-item 交互历史中进行学习并作出推荐,其中交互行为包括显式反馈(例如,user对item的先前评分)或隐式反馈(例如,用户的浏览历史)。 基于内容的推荐主要基于一些item和user的辅助信息,通过比较这些辅助信息能得出一些推荐结果。 可以考虑各种辅助信息,例如文本,图像和视频。 混合模型是指整合两种或更多种推荐策略的推荐系统

符号定义

我们设定如下讨论情景:我们有MM个user和NN个item,RR是交互矩阵,R^\hat{R}是预测的交互矩阵。ruir_{ui}代表用户uu对item ii的偏好,rui^\hat{r_{ui}}是模型预测的用户uu对item ii的偏好。RR的某一行代表一个用户的偏好行为,表示为r(u)={ru1,ru2,...,ruN}r^{(u)} = \{r^{u1}, r^{u2}, ..., r^{uN}\}RR的某一列代表一个item的被用户偏好行为,表示为r(i)={r1i,r2i,...,rMi}r^{(i)} = \{r^{1i}, r^{2i}, ..., r^{Mi}\}OOOO^-分别代表被观察到和未被观察到的交互行为。我们另外使用URMKU \in R^{M*K}VRNKV \in R^{N*K}来代表user和item的latent factor(隐藏特征)。kk是隐特征的维数。

深度学习技术

深度学习通常被认为是机器学习的子领域。 深度学习的典型定义是它学习深层表征,即从数据中学习多层次的表示和抽象。 出于实际原因,我们将任何可分解为神经网络的架构视为“深度学习”,只要它使用随机梯度下降(SGD)的变体优化可微的目标函数。 神经网络架构在监督和非监督学习任务中都取得了巨大的成功。 在本小节中,我们阐明了与本survey密切相关的各种架构范式。

  • Multilayer Perceptron (MLP):多层感知器(MLP)是一种在输入层和输出层之间具有多个(一个或多个)隐藏层的前馈神经网络。 这里,感知器可以使用任意激活函数,并不一定是严格的二元分类器。 MLP可以被表示为非线性变换的堆叠层,学习分层特征表示。 MLP也被称为通用逼近器。
  • Autoencoder(AE):自编码器(AE)是一种无监督模型,用于在输出层中重建其输入数据。通常,瓶颈层(最中间层)用作输入数据的特征表示。自编码器有许多变体,如去噪自编码器(denoising autoencoder),边缘化去噪自编码器(marginalized denoising autoencoder),稀疏自编码器(sparse autoencoder),收缩自编码器(contractive autoencoder)和变分自编码器(variational autoencoder,VAE)。
  • Convolutional Neural Network (CNN):卷积神经网络(CNN)是一种特殊的前馈神经网络,具有卷积层和池化操作。 它可以捕获全局和局部特征,并显著提高效率和准确性。它在处理具有网格状拓扑的数据方面表现良好。
  • Recurrent Neural Network (RNN) :循环神经网络(RNN)适用于对sequential数据建模。 与前馈神经网络不同,RNN中存在循环和记忆结构以记住之前的计算结果。 诸如长短时记忆(LSTM)和门控循环单元(GRU)网络的变体通常在实践中被部署以克服梯度消失问题。
  • Restricted Boltzmann Machine (RBM) :受限玻尔兹曼机(RBM)是一个由可见层和隐藏层组成的双层神经网络。 它可以很容易地堆叠到深网。 此处Restricted意味着可见层或隐藏层中没有层内通信。
  • Neural Autoregressive Distribution Estimation (NADE):神经自回归分布估计(NADE)是一种在自回归模型和前馈神经网络之上构建的无监督神经网络。 它是用于建模数据分布和密度的易处理且有效的估计器。
  • Adversarial Networks (AN) :对抗网络(AN)是一种生成神经网络,由鉴别器和发生器组成。 通过在极小极大游戏框架中相互竞争来同时训练两个神经网络。
  • Attentional Models (AM):注意模型(AM)是一个技巧。注意机制通常无处不在,并且在计算机视觉和自然语言处理领域中被接受。 然而,它也是深度推荐系统研究的新兴趋势。
  • Deep Reinforcement Learning (DRL):深度强化学习。深度神经网络和强化学习的结合。

深度学习技术的优势

我们总结了基于深度学习的推荐模型的优势:

  • 非线性变换。与线性模型相反,深度神经网络能够利用非线性激活(例如relu,sigmoid,tanh等)对数据中的非线性进行建模。该属性使得捕获复杂且复杂的用户项交互模式成为可能。诸如MF,FM,稀疏线性模型的常规方法基本上是线性模型。
  • 表征学习。深度神经网络有效地从输入数据中学习潜在的解释因素和有用的表示。通常,在实际应用程序中可以获得有关项目和用户的大量描述性信息。利用这些信息可以促进我们对项目和用户的理解,从而产生更好的推荐者。因此,将深度神经网络应用于推荐模型中的表示学习是一种自然的选择。使用深度神经网络来辅助表示学习的优点有两方面:(1)它减少了手工特征设计的工作量。特征工程是一项劳动密集型工作,深度神经网络能够在无监督或监督的方法中自动从原始数据中学习特征; (2)它使推荐模型能够包括异构内容信息,例如文本,图像,音频甚至视频。深度网络在多媒体数据处理方面取得了突破,并展示了从各种来源学习的表现形式的潜力。
  • 序列建模。 深度神经网络已经在许多顺序建模任务上展示了希望,例如机器翻译,自然语言理解,语音识别,聊天机器人等等。 RNN和CNN在这些任务中发挥着关键作用。 RNN通过内部存储状态来实现这一点,而CNN通过随着时间滑动的过滤器来实现这一点。 它们在数据挖掘顺序结构中具有广泛的适用性和灵活性。
  • 灵活性。深度学习技术具有很高的灵活性,特别是随着许多流行的深度学习框架的出现,如Tensorflow,Keras,Caffe,MXnet,DeepLearning4j,PyTorch,Theano等。这些工具大多以模块化方式开发并具有活跃的社区和专业的支持。 良好的模块化使开发更有效率。 例如,很容易将不同的神经结构组合起来以形成强大的混合模型,或者用其他模块替换一个模块。 因此,我们可以轻松地构建混合和复合推荐模型,以同时捕获不同的特征和因素。

深度学习技术潜在的劣势

  • 解释性。尽管成功,但是深度学习工作机制如同黑盒,提供可解释的预测似乎是一项非常具有挑战性的任务。反对深度神经网络的一个常见论点是隐藏的权重和激活通常是不可解释的,限制了可解释性。然而,随着神经元模型的出现,这种担忧得到了一些缓解,现有的最先进模型已经能够在一定程度上解释意义,从而能够提供可解释的推荐。
  • 数据要求。第二个可能的限制是,深度学习被认为是数据饥渴的,因为它需要足够的数据才能完全支持其丰富的参数化。然而,与标记数据稀缺的其他领域(例如语言或视觉)相比,在推荐系统研究的背景下获得大量数据相对容易。百万/亿级别的数据集不仅在工业中很常见,而且也作为学术数据集发布。
  • 广泛的超参数调整。反对深度学习的第三个成熟论点是需要进行广泛的超参数调整。然而,我们注意到,超参数调整不是深度学习的特有问题,而是一般的机器学习中都会出现的(例如,正规化因子和学习速率同样必须针对传统的矩阵分解等进行调整)。但是,在某些情况下,深度学习可能会引入额外的超参数。

深度学习推荐方法的分类

为了提供这个领域的鸟瞰,我们根据所采用的深度学习技术的类型对现有模型进行分类。 我们进一步将基于深度学习的推荐模型分为以下两类。 下图总结了分类方案。

  • Recommendation with Neural Building Blocks: 使用单个深度学习方法的推荐。我们按照之前的八种技术分类分别讨论不同的推荐方法。
  • Recommendation with Deep Hybrid Models:混合模型。

表1列出了所有已被调查的模型,我们按照上述分类方案对其进行组织。 此外,我们还从表2中的任务角度总结了一些publications。我们调查的publications涉及各种推荐任务。 由于使用深度神经网络(例如基于会话的推荐,图像,视频推荐),一些原来不常见的任务已开始受到关注。 一些任务对于推荐研究领域可能并不新颖,但DL提供了更多找到更好解决方案的可能性。 例如,如果没有深度学习技巧的帮助,处理图像和视频将是一项艰巨的任务。 而深度神经网络的序列建模功能可以轻松捕获用户行为的顺序模式。

我们将在之后的博客中讨论这些方法的具体细节。这个survey目前的参考文献列表如下,感兴趣的读者可以自己索引文章:








2018-08-25 09:44:28 Yt7589 阅读数 1157
  • 机器学习推荐系统视频教程

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 机器学习推荐系统视频培训教程概况:课程从推荐系统在机器学习概述开始,详解推荐系统中两大核心算法:协同过滤与隐语义模型。使用Surprise库对电影数据集进行建模推荐,后使用深度学习框架Tensorflow实现一个简易的基于隐语义模型的推荐系统。

    6308 人正在学习 去看看 唐宇迪

深度学习推荐系统在智能教育中的应用,最容易应用的领域就是练、测、评环节。深度学习推荐系统就是将学生和题目的历史信息,作为系统输入,利用深度学习算法模型,找到学生和题目的隐表示,并利用这种隐表示(向量),找出学生和题目之间的隐藏关系,从而产生针对该学生的题目推荐。
智能教育深度学习推荐系统的架构图如下所示:
这里写图片描述
输入层主要包括学生的反馈数据,包括学习做题结果,从错到对分为0~5分,结果result=5score,我们将上式定义为学习对相应题目的需要程度,例如,如果学生做对了这道题目,得分为5分,则学生对这道题目的需要程度就为result=5score=55=0,表示学生不需要这道题目背后所代表的知识点和解题技巧的一类题目了。但是如果学生做错了这道题,得分为0分,则学生对与这道题类似题目的需要程度就为result=5score=50=5,表示由于学生做错了这道题目,代表学生未掌握这道题目所代表的知识点和解题技巧,因此特别需要这道题目。学生除了真实做题之外,还可以浏览题目,然后根据自己的判断,给每道题目对自己的难度来打分,这同样可以作为判断学生是否需要某道题目的依据。
模型层是目前比较流行的各种深度学习模型,具体的模型描述,大家可以参考我写的书《深度学习算法实践:基于TensorFlow和Theano》,我在这里就不进行描述了。
输出层利用模型层求出的学生隐表示和题目隐表示,通过向量内积、Softmax计算、相似度计算方法,最终产生针对学生具体情况的题目推荐列表。
深度学习推荐系统是随着深度学习兴起而兴起的技术,目前在国际上已经有了专门的国际学术会议,综合各种文献,我们认为深度学习推荐系统有以下五大应用方向:

深度学习内容推荐系统

基于内容的推荐系统就是对内容进行建模,在智能教育练、测、评应用中,就是对题目进行建模,包括题中所含有的知识点,解题中需要使用的解题技巧,以及其他特性,如计算量大、具有迷惑性描述等,将以上特征作为题目向量(隐表示)的一个维度,并以0~1之间数来表示符合程度,例如某个题目具有典型的某个知识点,该维度的值就为1,如果该题目完全没有涉及某知识点,则该知识点所对应维度上的数值就为0,如果该题目仅涉及某个知识点,但是不典型,则可以取一个0<value<1的值。然后我们根据显示反馈即学生做题的正确错误情况,隐式反馈如学生认为题目难度情况和评论等,采用深度学习方法确定学生向量(隐表示)。接下来就可以根据题目向量(隐表示)和学生向量(隐表示)来确定学生对每道题目的需要程度,形成最终的推荐结果。

深度学习协同过滤推荐系统

深度学习协同过滤推荐系统实际与传统的协同过滤推荐系统相似,都是先根据学生做题目的结果,学生对题目的评价等交互行为,先确定学生向量(隐表示)内容,然后通过深度学习算法估计出题目向量(隐表示)内容,最后根据学生向量和题目向量,来进行推荐。

深度学习混合推荐系统

从上面的分析可以看出,基于内容的推荐系统和协同过滤推荐系统都有各自的优势,在实际中很多情况下是二者综合起来使用,虽然可以先进行一轮基于内容的推荐算法来确定学生向量,然后采用协同过滤算法再确定更新的问题向量,然后再利用基于内容的推荐算法找出更新的学生向量,一直重复这一过程。但是这种方式效率较低,实际应用中,通常将学生向量和题目向量综合起来,一次迭代同时更新两者的信息,组成所谓的混合推荐系统。

基于社交网络的深度学习推荐系统

以微博等为例的社交网络,用户之间通过关注等操作,形成一个社交图谱,通常是由意见领䄂组成中心节点的星形网络,然后通过若干不同星形网络间的连接节点,组成一个复杂的社交关系图网络,而用户的各种交互均在社交图网络上发生,通过深度学习算法研究人们在社交图网络的中的显示或隐示交互信息,就是基于社交网络的深度学习推荐系统要解决的问题。

基于情感计算的深度学习推荐系统

通过用户对各种资源的评论、评分、浏览、顶踩等操作,利用基于深度学习的情感计算技术,可以计算出用户的感情倾向,并以此为基础向用户进行推荐。
在这一节中,我们对深度学习推荐系统,进行了一个简单的介绍,从下一节开始,我们将讨论每种深度学习推荐系统算法在TensorFlow中的实现方式,如果可能,我们均将以深度学习推荐系统在智能教育中的应用为例来进行讲解。

2019-07-24 12:09:06 muruan08 阅读数 73
  • 机器学习推荐系统视频教程

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 机器学习推荐系统视频培训教程概况:课程从推荐系统在机器学习概述开始,详解推荐系统中两大核心算法:协同过滤与隐语义模型。使用Surprise库对电影数据集进行建模推荐,后使用深度学习框架Tensorflow实现一个简易的基于隐语义模型的推荐系统。

    6308 人正在学习 去看看 唐宇迪


在简书上看到这一系列文章,非常喜欢,可惜排版不够好,且缺乏衔接,因此转录到这里,供随时查阅。
(全部链接来自简书–石晓文的学习日记

1、特征交叉系列

早期广告计算及推荐系统中,工业界常用LR来完成排序计算,因为LR是广义线性模型,特征之间缺乏交互,因此常使用人工组合特征的方案来深度挖掘特征,后渐渐衍生出FM,FFM等二项特征自动化交叉方案。近年来,由于深度学习的发展,大量自动化特征组合方案被研究探索并应用于推荐系统和广告计算中。
推荐系统遇上深度学习(一)–FM模型理论和实践
推荐系统遇上深度学习(二)–FFM模型理论和实践
推荐系统遇上深度学习(三)–DeepFM模型理论和实践
(DeepFM可以近似理解为Deep&Wide,当然其中Wide部分不再是LR而是FM)
推荐系统遇上深度学习(四)–多值离散特征的embedding解决方案
讲解了tf中tf.contrib.lookup.index_table_from_tensor方法,实际上就是将离散特征进行embedding方式的初始化并定义好跟idx关系,便于后续检索。
推荐系统遇上深度学习(五)–Deep&Cross Network模型理论和实践
跟DeepFM很像,但是FM的部分使用神经网络进行特征交叉
推荐系统遇上深度学习(六)–PNN模型理论和实践
感觉很多思想都是很类似的,PNN跟DeepFM也有类似之处,不同在于(1)PNN的两两特征交叉是使用两层网络来完成(最终归一化为一个D1长度的embedding向量),是基于特征embedding之后的向量计算出来的;而FM则是使用矩阵分解的方案,来表达两个特征的权重,是基于特征单值计算出来的。(2)PNN的交叉层和单层在浅层concat,最终一起进行若干个全连接计算,而DeepFM则对Deep进行深入计算,然后在倒数第二层直接将两者合并。
推荐系统遇上深度学习(七)–NFM模型理论和实践
推荐系统遇上深度学习(八)–AFM模型理论和实践
以上两个大同小异,都是基于FM和Deep的串行结构,留待以后研究。

2、召回

传统上讲,推荐的召回阶段多通过协同过滤、以及一些规则(热门、兴趣等)方式召回。目前深度学习领域大多数思考方向都是将item进行embedding,继而进行向量匹配再召回。方向多集中于网络设计,目标定义,以及线上快速召回的工程化方案。

a、embeding

推荐系统遇上深度学习(三十九)-推荐系统中召回策略演进!
简介:1、协同过滤;2、基于向量;3、基于树;
扩展阅读:基于任意深度学习+树状全库搜索的新一代推荐系统
推荐系统遇上深度学习(四十六)-阿里电商推荐中亿级商品的embedding策略这篇文章略语焉不详,没有详述SI的具体提取方法。需要阅读原文。可借鉴的地方:1、引入SI(Side Information)来解决冷启动问题;这个思路对于规范化商品表达(idmatching也有一定借鉴意义);2、使用不同SI不同权重的方案(权重需训练,还是拍一个?)3、随机游走策略构建物品间关系;3、Skip-gram思路训练网络(w2v的思路真是遍地开花啊)。
推荐系统遇上深度学习(三十六)–Learning and Transferring IDs Representation in E-commerce 这篇文章很赞,值得阅读原文。值得借鉴的地方:1、item2vec(又是w2v),并使用品牌id,产品id,店铺id等综合id作为item的表达,因此中间含有属性id到itemid的矩阵,这个就为属性表达item(冷启动)做了好铺垫;2、负采样,采用越热采样率越高的方案,有一点工程实现技巧;3、物品冷启动采用属性近似计算。另:用户冷启动采用了淘宝向量,这个在其他公司并没有可借鉴性不必考虑。

3、排序

a、传统思路

推荐系统遇上深度学习(十)–GBDT+LR融合方案实战
GBDT+LR是较为经典的排序算法,由Facebook提出。文中没有提到的是:这种双模型需要考虑的是线上工程切换问题。即双模型版本的同步维护。

b、深度学习

推荐系统遇上深度学习(十八)–探秘阿里之深度兴趣网络(DIN)浅析及实现
简介:1、利用了Local Attention机制;2、gAUC的评价指标;3、Dice激活函数(根据数据调整LeakRelu分割点);4、自适应性正则(根据featureId出现频次进行正则力度调整)

推荐系统遇上深度学习(四十八)-BST:将Transformer用于淘宝电商推荐简介:使用transformer模型,利用item,user,context和cross特征,对下一个商品进行ctr预估(有点怀疑是否上线应用)。值得借鉴的地方:1、使用(用户点击时间-推荐时间)作为position bias;2、使用leakyRelu做激活。(transformer相关资料:使用Excel通俗易懂理解Transformer!

3、E&E

EE问题(Exploration and Exploitation,探索与开发)是推荐系统及广告计算里较为常见的一个问题,从业务角度理解,主要目的是提升惊喜度,以防止用户审美疲劳。近年来已有比较成熟的解决方案。
推荐系统遇上深度学习(十二)–推荐系统中的EE问题及基本Bandit算法经典的UCB和汤普森采样方法。
推荐系统遇上深度学习(十三)–linUCB方法浅析及实现 UCB算法的升级版,考虑了在线特征,我对于LinUCB的理解是,在实际工程应用中,可以在CTR预估计算后的基础上,加上根据reward计算出的Delta值(Δ=αxt,aTAa1xa\Delta =\alpha \sqrt {x^{T}_{t,a}{A^{-1}_{a}}{x_{a}}} ),以加入LinUCB的扰动。

a、强化学习

  1. 推荐系统遇上深度学习(十四)–《DRN:A Deep Reinforcement Learning Framework for News Recommendation》 强化学习在新闻推荐领域的应用。在DQN基础上应用了Dueling-Double-DQN(相关学习资料参见:深度强化学习从入门到大师:进一步了解深度Q学习(第三部分*续)).同样地,这个模型只适用于排序阶段。
    值得借鉴的地方:1、比较合理地给出用户活跃度(可以使用规则手段),并使用活跃度作为未来奖励的一个评估手段;2、多样性的评估方法(ILS,使用item相似性来评估)3、Duel DQN网络的设计;4、在线更新方法。
    疑问:对于在线更新的方案细节不太理解,且缺乏工程化的构建方案。
  2. 推荐系统遇上深度学习(十五)–强化学习在京东推荐中的探索这篇论文的可借鉴之处,在于使用了模拟器来预估state+action的可能收益(通过状态-动作转移概率)。因为在传统ctr模型中,由于使用的正负样本是基于为用户已推荐的物品空间,实际上相对于全量空间,样本是有偏的。
    疑问:使用了list-wise来做排序(号称),但我认为实际上仍然是paire-wise,当每个物品单独打分且取最高打分的物品排在前面,并且打分与整体推荐中序列并无丝毫关联时,我认为所谓list-wise就都是pair-wise的。

4、指标

推荐系统遇上深度学习(九)–评价指标AUC原理及实践
AUC是ctr预估的常用离线评估指标,比precision和recall更健壮,能够应对样本不平衡的情况(尤其是ctr这种正样本超级少的情况)

2017-05-10 11:57:10 somTian 阅读数 14789
  • 机器学习推荐系统视频教程

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 机器学习推荐系统视频培训教程概况:课程从推荐系统在机器学习概述开始,详解推荐系统中两大核心算法:协同过滤与隐语义模型。使用Surprise库对电影数据集进行建模推荐,后使用深度学习框架Tensorflow实现一个简易的基于隐语义模型的推荐系统。

    6308 人正在学习 去看看 唐宇迪

原文:

Deep Learning Meets Recommendation Systems

Published by Wann-Jiun Ma at ** January 24, 2017

https://blog.nycdatascience.com/student-works/deep-learning-meets-recommendation-systems/

Contributed by Wann-Jiun Ma. He is currently attending the NYC Data Science Academy Online Data Science Bootcamp program. This post is based on his final capstone project and is finished in two weeks (part-time).

Introduction

几乎每个人都喜欢花时间与家人和朋友一起观看电影。 当我们坐在我们的沙发上选择我们将要在接下来的两个小时里观看的电影时,结果花费了20分钟也找不到一个合适的电影,这样的经历真是太令人失望了 当我们需要选择电影并且节省时间时,我们绝对需要计算机程序向我们推荐电影。显然,电影推荐已经成为我们生活的重要组成部分。 据数据科学中心 Data Science Central 统计,尽管数据很难得到,但据很多知情人士估计,对于像亚马逊和Netflix这样的主要电子商务平台,推荐系统可能会承担多达10%至25%的增量收入。在这里,我研究了电影推荐的一些基本推荐算法,并尝试将深度学习整合到我的电影推荐系统中。

电影是娱乐和视觉艺术相结合的绝佳例子。电影海报通常可以直接快速的将电影的情况传递给观众。根据 DesignMantic的说法,“任何电影的发布和预先发布,他们的海报是引发炒作的主要因素,一半以上的人(即目标受众)是基于电影海报决定是否预订门票并观看电影“。我们甚至可以通过查看海报的排版来预测任何电影的氛围场景(movie’s mood by just looking at the typography of is poster)。这听起来有点像魔术,但绝对有可能通过查看其海报来预测电影的流派。对于我自己,我只是看它的海报来决定是否看电影。例如,既然我不是漫画电影的粉丝,所以每当我看到有卡通主题或颜色的电影海报,我知道这些电影不是我的选择之内。这个决策过程非常简单,不需要任何评论阅读(不确定人们有时间阅读评论)。因此,除了一些标准的电影推荐算法之外,我还使用深度学习来处理电影海报,并尝试寻找类似的电影给用户推荐。目标是模仿人类的视觉能力,并通过观看基于深度学习的电影海报来构建直观的电影推荐者。这个项目的灵感来自Ethan Rosenthal的博文 Ethan Rosenthal’s blog posts ,我在他的博文中修改了他的代码,以适应这里使用的算法。

我们使用从MovieLens网站MovieLens 下载的电影数据集。 该数据集由1071个用户应用于9,066部电影的100,000个评级和1,300个标签应用程序组成。 数据集最近更新于10/2016。

Collaborative Filtering

大致来说,有三种类型的推荐系统(不包括简单排名方法):

  • 基于内容的推荐
  • 协同过滤
  • 混合模型

对于基于内容的推荐系统content-based recommendation ,这是一个回归问题,我们尝试使用项目内容作为特征进行用户到项目的评分预测。另一方面,对于基于协同过滤的推荐系统 collaborative filtering ,我们通常不会提前知道特征内容,并且通过使用不同用户之间的相似性(用户可以给出相同项目的相似评分)和项目之间的相似性(类似的电影可能会被用户评分相似),我们会学习潜在的特征,同时对用户对商品的评分做出预测。另外,在学习了项目的特征之后,我们可以根据以前的使用信息来测量项目之间的相似度,并向用户推荐最相似的项目。基于内容和协作过滤的建议是十多年前的最先进的技术。显然,有许多不同的模型和算法来提高预测性能。例如,对于我们预先没有用户到项目评级信息的情况,我们可以使用所谓的隐性矩阵因式分解 implicit matrix factorization,并用一些偏好和置信度度量来替换用户到项目的评级,例如用户点击相应项目执行协作过滤的次数。此外,我们还可以结合基于内容的协同过滤方法,将内容用作“侧面信息”来提高预测性能。这种混合方法通常通过“学习排名”算法”Learning to Rank”实现。

在这个项目中,我将重点放在基于协同过滤的方法上。首先,我将讨论使用项目(用户)相似度来进行用户对项目的评估预测而无需回归,也可以根据项目的相似度进行推荐。然后,我将讨论如何使用回归来学习潜在的特征并同时做出建议。之后,我们将会看到如何在推荐系统中使用深度学习。

Item Similarity

对于基于协同过滤的推荐系统,第一个构建块构建了每个行代表用户的评分矩阵,每列对应于该用户给予特定电影的平分。 我们建立我们的评分矩阵如下:

    df = pd.read_csv('ratings.csv', sep=',')
    df_id = pd.read_csv('links.csv', sep=',')
    df = pd.merge(df, df_id, on=['movieId'])

    rating_matrix = np.zeros((df.userId.unique().shape[0], max(df.movieId)))
    for row in df.itertuples():
        rating_matrix[row[1]-1, row[2]-1] = row[3]
    rating_matrix = rating_matrix[:,:9000]

其中“ratings.csv”包含用户ID,电影ID,评分和时间信息,“link.csv”包含电影ID,IMDB id和TMDB id。 我们结合这两个表,因为每个电影需要IMDB id信息才能从电影数据库网站 The Movie Database使用其API获取电影海报。 我们检查我们的评分矩阵的稀疏度如下:

    sparsity = float(len(ratings.nonzero()[0]))
    sparsity /= (ratings.shape[0] * ratings.shape[1])
    sparsity *= 100

其中评分矩阵稀疏,只有非零项的1.40%。 现在,为了训练和测试,我们将评级矩阵分成两个较小的矩阵。 我们从评级矩阵中移除10个评级,并将它们放在测试集中。

train_matrix = rating_matrix.copy()
test_matrix = np.zeros(ratings_matrix.shape)

for i in xrange(rating_matrix.shape[0]):
    rating_idx = np.random.choice(
        rating_matrix[i, :].nonzero()[0], 
        size=10, 
        replace=True)
    train_matrix[i, rating_idx] = 0.0
    test_matrix[i, rating_idx] = rating_matrix[i, rating_idx]

where, s(u,v) *is just the cosine similarity measure between user *u and user v.

   similarity_user = train_matrix.dot(train_matrix.T) + 1e-9
    norms = np.array([np.sqrt(np.diagonal(similarity_user))])
    similarity_user = ( similarity_user / (norms * norms.T) )

    similarity_movie = train_matrix.T.dot(train_matrix) + 1e-9
    norms = np.array([np.sqrt(np.diagonal(similarity_movie))])
    similarity_movie = ( similarity_movie / (norms * norms.T) )

使用用户之间的相似性,我们能够对每个用户对电影的评分进行预测,并且还可以计算我们的用户到电影评分预测的相应MSE。 通过考虑类似用户给出的评级来进行预测。 特别是,我们可以根据以下公式进行用户到电影的评分预测。

rˆui=(is(u,v)rvivs(u,v))

其中用户u到电影i的预测是用户v给予电影i的用户u和v之间的相似度作为权重的等级的加权和(归一化)。

    from sklearn.metrics import mean_squared_error

    prediction = similarity_user.dot(train_matrix) / np.array([np.abs(similarity_user).sum(axis=1)]).T
    prediction = prediction[test_matrix.nonzero()].flatten()
    test_vector = test_matrix[test_matrix.nonzero()].flatten()
    mse = mean_squared_error(prediction, test_vector)

    print 'MSE = ' + str(mse)

我们的预测获得的MSE是9.8252。 这个数字是什么意思? 这是好还是坏的推荐? 通过查看MSE得分来评估我们的预测性能不是非常直观。 因此,我们通过直接查看电影推荐来评估表现。 我们会查询感兴趣的电影,并要求我们的系统向我们推荐几部电影。 首先要做的是获取相应的电影海报,以便我们可以看到推荐的电影是什么。 我们使用IMDB ID号码从电影数据库网站 The Movie Database使用其API获取电影海报。

    import requests
    import json

    from IPython.display import Image
    from IPython.display import display
    from IPython.display import HTML

    idx_to_movie = {}
    for row in df_id.itertuples():
        idx_to_movie[row[1]-1] = row[2]
    idx_to_movie    

    k = 6  
    idx = 0
    movies = [ idx_to_movie[x] for x in np.argsort(similarity_movie[idx,:])[:-k-1:-1] ] 
    movies = filter(lambda imdb: len(str(imdb)) == 6, movies)

    n_display = 5
    URL = [0]*n_display
    IMDB = [0]*n_display
    i = 0
    for movie in movies:
        (URL[i], IMDB[i]) = get_poster(movie, base_url)
        i += 1 

    images = ''
    for i in range(n_display):
        images += "<img style='width: 100px; margin: 0px; \
                    float: left; border: 1px solid black;' src='%s' />" \
                    % URL[i]

    display(HTML(images))    

现在,这很有趣! 我们来看看我们的建议。 我们将显示四个最相似的电影以及我们查询的动作。 我们查询的电影放在左边,后面是四个推荐的电影。 我们来试试查询“Heat”。

这里写图片描述

Heat是1995年的美国犯罪电影,由Robert De Niro,Al Pacino主演。 结果看起来不错 离开拉斯维加斯可能不是一个很好的建议。 我猜是因为Nicolas Cage在电影“The ROCK”中,对于热爱的观众来说,这是一个很好的推荐。 因此,它可能是使用相似矩阵与协同过滤的缺点之一。 我们来试试更多的例子。
这里写图片描述

看起来不错,Toy Story 2绝对应该向喜欢Toy Story的观众推荐。 但是,Forrest Gump对我来说并没有太大的意义。 显然,汤姆·汉克斯(Tom Hanks)的声音在玩具总动员电影中,所以推荐了阿甘。 请注意,只要查看海报,就可以在玩具总动员和福雷斯特·甘普之间分辨出电影类型,情绪等差异,对吧? 当他看到海报假设每个孩子都喜欢玩具总动员时,孩子可能会忽略Forrest Gump。

Alternating and Stochastic Gradient Descent

在前面的讨论中,我们简单地计算用户和项目的余弦相似度,并使用这种相似性度量来预测用户对项目的评分,并提出项目到项目的推荐。 我们现在把我们的问题作为一个回归问题。 我们为所有用户引入所有电影和权重向量x的潜在特征。 目标是简单地将评分预测的MSE(L2规范正则化术语)最小化。

rˆui=xTuyi

L=u,i(ru,ixTuyi)2+λuxu+σyi

注意,现在权重向量和特征向量都是决策变量。 显然这并不是一个凸问题。 就目前来说,不用担心这个非凸的问题的收敛性。 有很多方法来解决这个非凸优化问题。 一种方法是以交替的方式求解权重向量(用户)和特征向量(用于电影)。 当我们求解权重向量时,我们假定特征向量是常数向量。 另一方面,当我们解决特征向量时,我们假设权重向量是常数向量。 解决这个回归问题的另一种方法是组合权重向量和特征向量的更新,并在相同的迭代中进行更新。 此外,可以实现随机梯度下降以加速计算。 在这里,我使用随机梯度下降法来解决这个回归问题。 我的预测的MSE如下所示。

这里写图片描述

MSE比使用相似矩阵获得的小得多。 当然,我们也可以使用网格搜索和交叉验证来调整我们的模型和算法的参数。

再次,我们来看看我们的建议,通过查询感兴趣的电影。
这里写图片描述

看起来效果并不好,我不知道这四部电影是通过查询热推荐给我的。 他们看起来完全不匹配Heat。 他们看起来像浪漫/戏剧电影。 如果我发现一部类似于美国电影大片电影明星的电影,我想要观看一场电视剧? 我觉得很好的MSE结果可能给我们一个非常糟糕的建议。

那么让我们来讨论基于协同过滤的推荐系统的弱点。

  • 协同过滤方法通过使用数据查找类似的用户和电影,这导致流行项目比不受欢迎的项目更容易被推荐。
  • 由于没有与这些电影相关的许多使用数据,协作过滤很难为用户推荐任何新电影。

在接下来的讨论中,我们将考虑采用不同的方法来解决协同过滤问题。 我们用深度的学习向用户推荐电影。

Deep Learning

我们将在Keras中使用VGG16训练我们的神经网络。 我们的数据集中没有目标,我们只考虑第四到最后一层作为特征向量。 我们使用此特征向量来表征我们的数据集中的每个电影。 在训练我们的神经网络之前,有一些预处理步骤。训练过程总结如下。

    df_id = pd.read_csv('links.csv', sep=',')

    idx_to_movie = {}
    for row in df_id.itertuples():
        idx_to_movie[row[1]-1] = row[2]  

    total_movies = 9000

    movies = [0]*total_movies
    for i in range(len(movies)):
        if i in idx_to_movie.keys() and len(str(idx_to_movie[i])) == 6:
            movies[i] = (idx_to_movie[i]) 
    movies = filter(lambda imdb: imdb != 0, movies)
    total_movies  = len(movies)

    URL = [0]*total_movies 
    IMDB = [0]*total_movies 
    URL_IMDB = {"url":[],"imdb":[]}
    i = 0
    for movie in movies:
        (URL[i], IMDB[i]) = get_poster(movie, base_url)
        if URL[i] != base_url+"":
            URL_IMDB["url"].append(URL[i])
            URL_IMDB["imdb"].append(IMDB[i])
        i += 1 
    # URL = filter(lambda url: url != base_url+"", URL)
    df = pd.DataFrame(data=URL_IMDB) 

    total_movies = len(df)  

    import urllib

    poster_path = "/Users/wannjiun/Desktop/nycdsa/project_5_recommender/posters/"
    for i in range(total_movies):
        urllib.urlretrieve(df.url[i], poster_path + str(i) + ".jpg")

    from keras.applications import VGG16
    from keras.applications.vgg16 import preprocess_input
    from keras.preprocessing import image as kimage

    image = [0]*total_movies
    x = [0]*total_movies
    for i in range(total_movies):
        image[i] = kimage.load_img(poster_path + str(i) + ".jpg", target_size=(224, 224))
        x[i] = kimage.img_to_array(image[i])
        x[i] = np.expand_dims(x[i], axis=0)
        x[i] = preprocess_input(x[i])   

    model = VGG16(include_top=False, weights='imagenet')

    prediction = [0]*total_movies
    matrix_res = np.zeros([total_movies,25088])
    for i in range(total_movies):
        prediction[i] = model.predict(x[i]).ravel()
        matrix_res[i,:] = prediction[i] 

    similarity_deep = matrix_res.dot(matrix_res.T)
    norms = np.array([np.sqrt(np.diagonal(similarity_deep))])
    similarity_deep = similarity_deep / norms / norms.T 

在代码中,我们首先从TMDB网站使用IMDB id的API获取电影海报,然后我们向VGG16提供海报并训练我们的神经网络,最后,我们使用VGG16学习的功能计算余弦相似度。 在我们得到电影相似性之后,我们可以推荐类似的电影,使用最高的相似度。 请注意,VGG16学习的总共有25088个特征,我们使用这些特征来表示我们的数据集中的每个电影。

让我们看看使用深度学习的推荐。
这里写图片描述

对Heat的推荐没有爱情戏剧!这些海报肯定有一些共同的特点。 他们是深蓝色,有人在海报等。再次,让我们试一下Toy Story。

这里写图片描述

Forrest Gump没有被推荐! 结果看起来不错! 我非常喜欢这样做,所以让我们再来一些例子。

这里写图片描述

请注意,这些海报中有一到两个人,非常冷的主题或风格。

这里写图片描述

这些海报想让观众知道相应的电影是有趣的,响亮的,密集的,并且在他们中有很多的动作,所以海报的颜色和图像是非常强大的。

这里写图片描述

另一方面,这些海报想要向观众展示相应的电影是关于一个人的。

这里写图片描述

我们发现一些类似于功夫熊猫的电影。

这里写图片描述

这是一个非常有趣的一个。 我们确实发现了类似的怪物,也发现了Tom Cruse!

这里写图片描述

所有这些海报都有一个类似姿势的女人。 等待! 是Shaq!?

这里写图片描述

我们成功地找到了蜘蛛侠!

这里写图片描述

这一个发现了类似排版的海报。

Conclusions

在推荐系统中有几种使用深度学习的方法:

  • 无监督的学习方法。
  • 预测协同过滤产生的潜在特征。
  • 使用深度学习产生的功能作为辅助信息。

电影海报有元素,引起观众兴趣和兴趣。在这个项目中,我们使用深度学习作为一种无监督的学习方法,并通过处理电影海报来学习电影的相似性。显然,这只是在推荐系统中使用深度学习的第一步。有很多事情我们可以尝试。例如,我们可以使用深度学习来预测协同过滤所产生的潜在特征。 Spotify已经对类似的方法进行了音乐推荐。而不是图像处理,他们考虑使用深度学习来预测通过处理一首歌曲的声音从协同过滤得到的潜在特征。另一个可能的方法是使用深入学习的特征作为辅助信息来提高预测精度。

References:

http://blog.ethanrosenthal.com/2015/11/02/intro-to-collaborative-filtering/

http://blog.ethanrosenthal.com/2016/01/09/explicit-matrix-factorization-sgd-als/

http://blog.ethanrosenthal.com/2016/10/19/implicit-mf-part-1/

http://blog.ethanrosenthal.com/2016/11/07/implicit-mf-part-2/

http://blog.ethanrosenthal.com/2016/12/05/recasketch-keras/

https://www.designmantic.com/blog/2016-movie-poster-design-trends/

https://www.designmantic.com/blog/movie-moods-in-typography/

http://www.datasciencecentral.com/profiles/blogs/understanding-and-selecting-recommenders-1

http://www.datasciencecentral.com/profiles/blogs/5-types-of-recommenders

http://benanne.github.io/2014/08/05/spotify-cnns.html

– Andrew Ng, “Machine Learning,” Recommender Systems, 2016

– Aaron van den Oord, et al., “Deep content-based music recommendation,” NIPS, 2013

– Yifan Hu, et al., “Collaborative Filtering for Implicit Feedback Datasets,”

– Ste en Rendle, “BPR: Bayesian Personalized Ranking from Implicit Feedback,”

博文 来自: yiyiholic
没有更多推荐了,返回首页