您的位置:首页 > 大数据 > 人工智能

Neural Social Collaborative Ranking (NSCR) for the new task of cross-domain social recommendation

2018-02-08 23:16 591 查看
原文链接:https://arxiv.org/pdf/1706.03205.pdf 
这篇文章是推荐算法与深度学习结合的文章,其将数据信息分为信息导向和社交导向,前者包括用户与项目的交互信息,用户的特征信息,项目的特征信息;后者包括用户与用户之间的社交信息,尤其强调熟人间的推荐。该文章主要是为了将社交导向的信息加入传统的信息导向的信息中,从而提高推荐的准确率。
本文的创新点在于将用户和项目的特征进行编码然后通过pair pool层与原本的用户和特征的编码结合以引入模型中,同时通过社交领域和信息领域共有的桥梁用户的embedding层中差异性的约束来提高embedding层表达的准确率,较少过拟合的存在。
以下是本人的笔记:
一、数据的表示
1.1 u代表一个用户,U1代表信息领域的所有用户,i表示一个项目,I表示信息领域的所有项目,Y表示信息领域中用户和项目的交互结果(可以是用户对项目的评分或者是用户与项目是否存在交互)。G表示用户和项目的特征,其中Gu表示用户的特征,Gi表示项目的特征。g表示一个特征,如果上标为u表示用户的特征,上标为i表示项目的特征。U2表示社交领域的所有用户,U1和U2的交集则是桥梁用户(桥梁用户不能是空的),S表示U2中各个用户之间的社交相关性。
二、目标函数的选择
对于用户和项目交互数据(0,1分类),模型的目标函数可以分为两类,第一类是基于点的目标函数,即考虑每个点的预测值和真实值的距离并求和作为目标函数;第二类是基于对的目标函数,即对于每个用户u,从正样本中抽取一个项目i,从负样本中抽取一个项目j,组成一个三个元素的元组(u,i,j),然后实际中(yui-yuj)和预测中(yui-yuj)的距离作为目标函数。其公式如下:



由于第一项的值衡为1(正样本减去负样本),所以上述公式可以转化为:



本文就是以上式来作为目标函数。
三、模型的基本架构
3.1信息领域的模型架构



该模型架构由5层构成,分别是input层,embedding层,pooling层,fully connected层,predict层。
(1)模型的输入由4部分组成,分别是user的onehot编码,item的onehot编码,user特征的onehot编码,item特征的onehot编码。前面两个onehot编码不做解释,对于后面两个onehot编码,如果有100种特征,那么会得到100个不同的onehot编码,如果一个用户对应着多个特征,那么他将拥有多个onehot的编码,不同用户特征的onehoe编码的数量可能是不同的。item特征的onehot编码也是如此。
(2)embedding层则是通过一个神经网络把稀疏的onehot编码转化为稠密的编码,有种降维的感觉。
(3)在pool层,由于不同的用户或者项目的特征数量不同,导致其特征的onehot数目不同,进而使得embedding层的输出数不同,而对于后面fully connected层,每一对用户-项目的输入层的神经元个数必须是相等的,因而需要通过pool层来使得每一对用户-项目的神经个数保持一致。比如对于用户u项目i,可能其用户的onehot编码会得到一个embedding层的输出,项目onehot编码会得到一个embedding层的输出,用户有两个特征会得到两个用户特征的embedding层输出,项目有两个特征会得到两个项目特征的embedding层输出,这样加起来就会有6个embedding层的输出。我们假定embedding层的输出神经元个数是一样的,我们就可以对这六个输出求均值或者最大值从而压缩成一个输出。然而作者做了一些创新,不再使用传统意义上的max pool或者mean pool,因为这种方法没办法提取用户和项目的交叉特征,对于max pool,会损失除了最大值之外的所有信息(其主要用于解决平移不变性的问题),对于mean pool,其要求各个embedding是相互独立的,同时也只考虑到他们的线性相关。作者重新定义了一种叫做pairwise pooling来提取用户与用户特征,用户特征与用户特征之间,项目与项目特征,项目特征与项目特征之间的交互信息的pool层,其计算公式如下:



这个pool层的时间复杂度看起来是平方级别的,但是我们可以通过变换得到线性级别的损失函数:



前面的式子有两个连加的符号,因而是平方级别的,变换后的式子只有一个连加符号,可以认为是线性级别的。
对于项目,同样有:



这样我们就分别得到用户和项目的pooling层的输出。
(4)对于fully connected层,我们将用户和项目的pool层的输出做element-wise product的结果作为输入,然后经过多个fully connected层就可以得到输出。在fully connected层,对于每一层,本文采用相同的神经元个数(没有证明这样是好的),同时采用了relu作为激活函数。



(5)预测层



3.2社交领域的训练
社交领域的信息主要用于做正则化项,从而使得信息领域训练得到的模型更加的平滑,减少过拟合的情况。作者分别将这两个正则化项称为smoothness和fitting。作者这里采用的是桥梁用户的数据,其认为如果两个用户之间的社交关系很密切,那么他们过完pair pool层之后的embedding结果应该是接近的,因而可以将这个相关关系来作为正则化项。(这就是所谓的图正则化???)
3.2.1smoothness



这里pu',pu''分别代表两个不同用户过了pool层之后的embedding值,du',du''代表两个不同用户在社交中出现的次数,s表示两个用户之间的相似度。如果上式中第一项和第二项的值呈反相关,即相似度高差值小,那么最后的和会较小,反之,如果呈正相关,即相似度高差值大,那么最后的和会较大。(1*1+3*3>1*3+3*1),这个约束就使得相似度高的两个用户,其embedding的值尽可能的接近。
3.2.2fitting



这里是要求用户在信息领域和社交领域中得到的embedding值尽可能的接近,从而使得社交相似度高的用户对于同一项目的打分情况尽可能地接近。



最后将上述两个正则化相加,(mu代表权重),总的正则化项。
由于我们可以得到社交领域用户的embedding值,与前面的信息领域一样,我们通过fully connected网络可以得到最后的预测值,那么就会出现一个问题,一个桥梁用户有两个embedding值,分别在信息领域和社交领域,那我们该如何选择。(训练到最后这两个值会收敛到一起)
3.3训练
(1)我们先训练信息领域的模型NSCR,可以得到用户的embedding值。
(2)然后将桥梁用户的embedding值放入到社交
9760
领域中,根据Ls对其进行优化,得到新的embedding值。用Ls对Pu
进行求导并做一定的转化后可以得到新的embedding值



(3)我们将更新的embedding值放入NSCR中得到训练后的embedding值
(4)不断重复3,4直到embedding值基本保持不变可以认为模型收敛。
ps在训练时,我们对embedding值采用dropout以减少过拟合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐