Pinterest使用的推荐系统

时间:2021-07-15 | 标签: | 作者:Q8 | 来源:王逸之网络

小提示:您能找到这篇{Pinterest使用的推荐系统}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的Pinterest使用的推荐系统内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!

< ">阅读原因

< ">1.这篇文章是graph embedding在推荐系统领域的成功应用,值得借鉴

< ">2.对其中使用的curriculum learning的具体实现感兴趣,据说越来越难的训练样本能够获得12%的效果提升

< ">3.文章结合了random walk算法对node进行采样,从而获得了相等大小的子图,组成一个batch

< ">问题背景



< ">Pinterest使用的内容推荐系统,其中定义为pin(单个内容实体),定义为board(相关联的内容集合)。泛化的说,pin为一个item,而board是用户定义的上下文。这两个不相交的集合构成所有的节点,在这篇论文中没有对节点进行区分,对每个点都计算了相应的embedding vector。

< color: rgb(127, 127, 127);">图1图卷积网络的计算示意

获得node embedding的前向传播算法

< ">

< ">该论文使用的node u的前向传播思路和之前的graphSAGE的思路相比没有很大的改变,以下是对该算法的解释:



< ">1.第一行:执行聚合函数,对u的邻居节点feature计算聚合表达,参数是每个邻居节点的权重。

< ">2.如何获得u的邻居节点集合?论文使用了random walk方法,计算从u出发,其他直接相邻节点的访问次数,并进行L1归一化,取前k个节点。(没有经过这样的neighborhood sampling的方法,就直接取与u相邻的所有节点,这样每个节点形成的计算子图都不一样,memory的使用不稳定。)

< ">3.为什么选用concat(),因为根据论文< font-size: 14px; color: rgb(127, 127, 127);">[21],concat的效果要比直接取这两者的平均更好。我个人认为,作为u的邻居的聚合表示向量,应该不与(u的embedding vector)在同一个特征空间上。采用concatenate操作,可以使这两个向量维数不同,并且不破坏各自的信息。

< ">4.convolve stack:如何将距离节点u深度为k的计算子图用于计算节点u呢?这就需要u的迭代计算,使用第k-1次迭代计算出的,计算第k次迭代的。是一个在第k次迭代中在所有节点共享的学习参数,但是每一次迭代的参数是不共享的。由于这样的迭代计算,就像是CV中常见的堆叠卷积核的做法,所以也可以将第k次迭代计算称为第k层。

训练算法

< ">



< color: rgb(127, 127, 127);">图2  一个minibatch的训练过程

< ">1-7行的循环:获得集合M中从源节点出发,path为1到K的节点集合

< ">8-14循环:获得每一层的embed

< ">5-17行:更新embeddin宏盟媒体集团g

< ">训练技巧

< ">1.加速收敛[16]:论文用到比较大的batch size,做过deep learning实验的人应该有感受,面对较大的batch size,收敛是比较困难的,所以作者使用了< color: rgb(127, 127, 127);">[16]中提到的训练技巧。

< ">2.negative sample与curriculum learnig:该论文的loss也使用了噪声对比估计这一技巧,采样500个negative sample进行loss的计算。比较不同的地方是,论文不对每个batch中的每个node都进行专门的negative sample,而是只对一个minibatch进行negative sample,这样能够节约时间。毕竟Pinterest面对的节点有二十亿个,但是1对正例只对应了500个负例,模型不易于学到重要的判别信息(500:2,000,000,000=1:2,000,000)。所以论文使用了hard sample来训练模型学会判别长相比较相似的难负例。而加入难样本进行训练,当然会使模型更难收敛,所以使用curriculum learning的思想,在第一个epoch不加入hard sample,在后面的训练中,逐渐增加hard sample的个数。hard sample是通过与当前节点p相关的pagerank score决定的(具体怎么操作还是没有明白)。< color: rgb(127, 127, 127);">[14]

< color: rgb(127, 127, 127);">图3 广告营销与营销推广hard sample的实例

< ">< font-size: 18px;">这篇文章关于分布式系统的思考

< ">1.CPU做的事:extracting features,re-indexing(建立计算当前minibatch的子图),negative sampling;

< ">2.GPU做的事:minibatch的计算;

< ">3.每个minibatch接受的输入形式:,包含minibatch nodes和他们的neighborhood,以及一个较小的、和相对应的特征矩阵。

< ">4.producer-consumer:CPU是minibatch的生产者,GPU是minibatch的消费者。

< ">5.多GPU并行训练的更新:每个minibatch被分为等大的部分,使用相同的参数,累计各自的梯度,经过聚合后再同步更新。

< ">6.test时期的MapReduce:因为融合了神经网络的graph embedding模型都具有推断功能,所以PinSAGE只使用了一部分数据来进行训练,用训练好的网络对剩下的pin进行推断。

< ">为了避免每个节点在每一层的重复计算(因为不同节点的邻居有可能是相同的),首先一个job先将每个pin都map一遍,以供algorithm 1中使用。

< ">得到每个pin的embedding之后,另一个job则聚合board的embedding vector;

< ">之后,用目前获得的vector,用两个job迭代计算pin的vector(使用pooling方法进行聚合)

< ">7.计算资源的使用:训练代码实现在tensorflow上,使用了16块K80在单机上进行训练,将图和feature数据存域memory上(500GB)。推断过程运行于hadoop2上,用了378个AWS节点。

原论文名:Graph Convolutional Neural Networks for Web-Scale Recommender Systems

[14]C.Eksombatchai,P.Jindal,J.Z.Liu,Y.Liu,R.Sharma,C.Sugnet,M.Ulrich,and J.Leskovec.2018.Pixie:A System for Recommending 3+Billion Items to 200+ Million Users in Real-Time.WWW(2018)

[16]P.Goyal,P.Dollr,R.Girshick,P.Noordhuis,L.Wesolowski,A.Kyrola,A.Tulloch,Y.Jia,and K.He.2017.Accurate,Large Minibatch SGD:Training ImageNet in 1 Hour.arXiv preprint arXiv:1706.02677(2017)

[21]T.N.Kip友情链接f and M.Welling.2017.Semi-supervised classification with graph convolutional networks.In ICLR

Pinterest使用的推荐系统

上一篇:Pinterest的视觉搜索
下一篇:Bing推广:选品的三大渠道!


版权声明:以上主题为“Pinterest使用的推荐系统"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    Pinterest使用的推荐系统
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“Pinterest使用的推荐系统”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通Pinterest使用的推荐系统的相关事宜。

关键词:Pinterest使用的推荐系统,

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号