资讯专栏INFORMATION COLUMN

开源 | 基于会话的最优推荐模型:SR-GNN的PaddlePaddle实现

biaoxiaoduan / 2457人阅读

摘要:近日,百度深度学习平台开源了基于会话的推荐系统模型。模型明显优于一些最先进的基于会话的推荐方法。基于节点向量,每一个会话被建模成一个嵌入向量。

近日,百度深度学习平台PaddlePaddle开源了基于会话(session-based)的推荐系统模型(SR-GNN)。

相较于之前,通过循环神经网络(RNN)来对会话进行序列化建模导致的“不能够得到用户的精确表征”以及“忽略了items中复杂的转换特性”。
SR-GNN模型(https://github.com/PaddlePadd... 通过将序列化的问题转换为图的问题,对所有的会话序列通过有向图进行建模,然后通过图神经网络(GNN)来学习每个item的隐向量表示,进而通过一个注意力网络(Attention Network)架构模型来捕捉用户的短期兴趣,以达到捕获长期与短期兴趣共存的向量表示。SR-GNN模型明显优于一些最先进的基于会话的推荐方法。

应用背景介绍

随着互联网上信息量的快速增长,推荐系统能够帮助用户缓解信息过载的问题,进而有效帮助用户在众多Web应用程序中(比如:搜索、电子商务、媒体流网站等)选择自己感兴趣的信息。大多数现有的推荐系统都假设一个前提:用户画像(user profile)和历史活动信息是被不断记录的。

然而实际上,在许多服务中,用户的信息可能是未知的,并且只有处于当前正在进行的会话中的用户历史行为可用。

因此,在一个会话中,能对有限的行为进行建模并相应地生成推荐是非常重要的。但是在这种场景下,需要依靠丰富的user-item交互信息的传统推荐系统无法产生令人满意的推荐结果。
当前基于会话的推荐系统简介

由于推荐系统的高实际价值,越来越多的研究人员开始提出基于会话的推荐方案。

基于马尔可夫链的推荐系统:该模型基于用户上一次的行为来预测用户的下一次行为,然而由于强独立性相关假设,该模型的预测结果并不十分准确。

基于循环神经网络(RNN)的推荐系统:相比于传统的推荐问题,基于会话的推荐问题的不同点在于如何利用用户的短期会话交互信息数据来预测用户可能会感兴趣的内容。

基于会话的推荐可以建模为序列化问题,也就是基于用户的短期历史活动记录来预测下一时刻可能会感兴趣的内容并点击阅览。而深度学习中的RNN模型正是一类用于处理序列数据的神经网络。随着序列的不断推进,RNN模型中靠前的隐藏层将会影响后面的隐藏层。于是将用户的历史记录交互数据作为输入,经过多层神经网络,达到预测用户兴趣的目的。该模型也达到了令人满意的预测结果。

然而,该模型也有两处不足。
第一点就是在基于会话的推荐系统中,会话通常是匿名的且数量众多的,并且会话点击中涉及的用户行为通常是有限的,因此难以从每个会话准确的估计每个用户表示(user representation),进而生成有效推荐内容。第二点是利用RNN来进行的建模,不能够得到用户的精确表示以及忽略了item中复杂的转换特性。

SR-GNN概述
为了克服第二部分描述的基于其他模型的推荐系统不足之处,文章作者提出了基于会话的图神经网络模型的推荐系统(SR-GNN)。该模型可以更好的挖掘item中丰富的转换特性以及生成准确的潜在的用户向量表示。SR-GNN模型的工作流如下:

首先,对所有的session序列通过有向图进行建模。 接着通过GNN,学习每一个node(item)的隐向量表示。然后通过一个attention架构模型得到每个session的embedding。最后通过一个softmax层进行全表预测,具体如下:
构建会话图(constructing session graphs):每一个会话序列都被建模为有向图。在此会话图中每一个节点(node)代表一个item。有向图的每一条边意味着一个用户在该会话中依次点击了起点和终点表示的item。每一个item被嵌入到统一的embedding空间,并且我们用节点向量来指明每一个item隐向量。基于节点向量,每一个会话被建模成一个嵌入向量。
学习每个item隐向量表示(Learning Item Embeddings on Session Graphs):利用GNN来学习每一个item的隐向量表示。图神经网络之所以适合基于会话的推荐是因为它能利用丰富的节点间关系来自动抽取出会话图的特征。
生成每个会话的embedding(generating session embeddings):以前的基于会话的推荐方法总是假设在每一个对话中,都存在明显的用户潜在表征。相反的,SR-GNN方法不对用户做出任何假设,而是将会话直接由组成它的若干节点进行表示。每一个session利用注意力机制将整体偏好与当前偏好结合进行表示。
生成推荐(make recommendation):当获得每一个会话的embedding后,我们可以计算出所有候选item的推荐分数值。接着我们利用softmax函数和已经获得的推荐分数值来计算不同候选item的概率值,来表明在该次会话中用户下一次可能点击的不同item的概率。

PaddlePaddle实战
SR-GNN代码库简要目录结构及说明:

数据准备:使用DIGINETICA数据集。可以按照下述过程操作获得数据集以及进行简单的数据预处理。

• Step 1: 运行如下命令,下载DIGINETICA数据集并进行预处理

• Step 2: 产生训练集、测试集和config文件

运行之后在data文件夹下会产生diginetica文件夹,里面包含config.txt、test.txt以及 train.txt三个文件。

生成的数据格式为:session_list, label_list。其中session_list是一个session的列表,里面的每个元素都是一个list,代表不同的session。label_list是一个列表,每个位置的元素是session_list中对应session的label。

训练:可以参考下面不同场景下的运行命令进行训练,还可以指定诸如batch_size,lr(learning rate)等参数,具体的配置说明可通过运行下列代码查看:

gpu 单机单卡训练

cpu 单机训练

值得注意的是上述单卡训练可以通过加—use_parallel 1参数使用Parallel Executor来进行加速。

以下为训练结果示例:我们在Tesla K40m单GPU卡上训练的日志如下所示(以实际输出为准)

预测:运行如下命令即可开始预测。可以通过参数指定开始和结束的epoch轮次。

以下为预测结果示例:

PaddleRec智能推荐

这里给大家安利一下PaddleRec智能推荐。推荐系统在当前的互联网服务中正在发挥越来越大的作用,目前大部分电子商务系统、社交网络,广告推荐,搜索引擎,都不同程度的使用了各种形式的个性化推荐技术,帮助用户快速找到他们想要的信息。此外,在工业可用的推荐系统中,推荐策略一般会被划分为多个模块串联执行。

PaddlePaddle对推荐算法的训练提供了完整的支持,并提供了多种模型配置供用户选择。包括TagSpace,GRU4Rec,Word2Vec,GraphNeuralNetwork,DeepInterestNetwork等等,之后还会继续添加其他模型也包括更多的图模型,欢迎尝试(https://github.com/PaddlePadd...)

(论文参考:Session-based Recommendation with Graph Neural Networks,Shu Wu, Yuyuan Tang,Yanqiao Zhu, Liang Wang,Xing Xie,Tieniu Tan https://arxiv.org/abs/1811.00855)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20041.html

相关文章

  • YOLO v3有了PaddlePaddle实现 | 代码+预训练模型

    摘要:值得一提的是,基于百度自研的开源深度学习平台的实现,参考了论文,增加了,等处理,精度相比于原作者的实现提高了个绝对百分点,在此基础上加入最终精度相比原作者提高个绝对百分点。 YOLO作为目标检测领域的创新技术,一经推出就受到开发者的广泛关注。值得一提的是,基于百度自研的开源深度学习平台PaddlePaddle的YOLO v3实现,参考了论文【Bag of Tricks for Imag...

    xavier 评论0 收藏0
  • 百度开源分布式深度学习平台,挑战TensorFlow

    摘要:今天百度开源深度学习平台。百度一直说自己深耕深度学习,其技术水平如何,本次开源或可提供一些线索。深度学习平台实际上变化得非常快等等,都是过去个月间出现的。总的来说,是百度使用了多年的深度学习平台,并且已经做出了一些实际的产品,较为成熟。 今天百度开源深度学习平台Paddle。业内人士纷纷点赞:Paddle代码简洁、设计干净,没有太多的abstraction,速度比Tensorflow、The...

    evin2016 评论0 收藏0
  • 从硬件配置到框架选择,请以这种姿势入坑深度学习

    摘要:幸运的是,这些正是深度学习所需的计算类型。几乎可以肯定,英伟达是目前执行深度学习任务较好的选择。今年夏天,发布了平台提供深度学习支持。该工具适用于主流深度学习库如和。因为的简洁和强大的软件包扩展体系,它目前是深度学习中最常见的语言。 深度学习初学者经常会问到这些问题:开发深度学习系统,我们需要什么样的计算机?为什么绝大多数人会推荐英伟达 GPU?对于初学者而言哪种深度学习框架是较好的?如何将...

    marek 评论0 收藏0
  • 可能是全网把 ZooKeeper 概念讲清楚一篇文章

    摘要:的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。具有不可分割性即原语的执行必须是连续的,在执行过程中不允许被中断。 该文已加入开源文档:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识)。地址:https://github.com/Snailclimb... showImg(https:...

    DrizzleX 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<