https://www.toutiao.com/a6690696657228530187/

2019-05-14 10:00:09

本文转载自百度 PaddlePaddle

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

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

SR-GNN模型明显优于一些最先进的基于会话的推荐方法。

项目地址:https://github.com/PaddlePaddle/models/tree/develop/PaddleRec/gnn

应用背景

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

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

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

当前基于会话的推荐系统简介

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

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

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

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

然而,该模型也有两处不足。

第一点就是在基于会话的推荐系统中,会话通常是匿名的且数量众多的,并且会话点击中涉及的用户行为通常是有限的,因此难以从每个会话准确的估计每个用户表示(user representation),进而生成有效推荐内容。

第二点是利用RNN来进行的建模,不能够得到用户的精确表示以及忽略了item中复杂的转换特性。

SR-GNN概述

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

 图1:SR-GNN模型的工作流

首先,对所有的session序列通过有向图进行建模。 接着通过GNN,学习每一个node(item)的隐向量表示。然后通过一个attention架构模型得到每个session的embedding。最后通过一个softmax层进行全表预测。

1.构建会话图(constructing session graphs)

每一个会话序列都被建模为有向图。在此会话图中每一个节点(node)代表一个item。有向图的每一条边意味着一个用户在该会话中依次点击了起点和终点表示的item。每一个item被嵌入到统一的embedding空间,并且我们用节点向量来指明每一个item隐向量。基于节点向量,每一个会话被建模成一个嵌入向量。

2.学习每个item隐向量表示(Learning Item Embeddings on Session Graphs)

利用GNN来学习每一个item的隐向量表示。图神经网络之所以适合基于会话的推荐是因为它能利用丰富的节点间关系来自动抽取出会话图的特征。

3.生成每个会话的embedding(generating session embeddings)

以前的基于会话的推荐方法总是假设在每一个对话中,都存在明显的用户潜在表征。相反的,SR-GNN方法不对用户做出任何假设,而是将会话直接由组成它的若干节点进行表示。每一个session利用注意力机制将整体偏好与当前偏好结合进行表示。

4.生成推荐(make recommendation)

当获得每一个会话的embedding后,我们可以计算出所有候选item的推荐分数值。接着我们利用softmax函数和已经获得的推荐分数值来计算不同候选item的概率值,来表明在该次会话中用户下一次可能点击的不同item的概率。

PaddlePaddle实战

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

.
├── README.md # 文档
├── train.py # 训练脚本
├── infer.py # 预测脚本
├── network.py # 网络结构
├── reader.py # 和读取数据相关的函数
├── data/├── download.sh # 下载数据的脚本
├── preprocess.py # 数据预处理

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

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

cd data && sh download.sh

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

python preprocess.py --dataset diginetica
cd ..

运行之后在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)等参数,具体的配置说明可通过运行下列代码查看

python train.py -h

gpu 单机单卡训练

CUDA_VISIBLE_DEVICES=1 python -u train.py —use_cuda 1 > log.txt 2>&1 &

cpu 单机训练

CPU_NUM=1 python -u train.py --use_cuda 0 > log.txt 2>&1 &

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

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

W0308 16:08:24.249840 1785 device_context.cc:263] Please NOTE: device: 0, CUDA Capability: 35, Driver API Version: 9.0, Runtime API Version: 8.0
W0308 16:08:24.249974 1785 device_context.cc:271] device: 0, cuDNN Version: 7.0.
2019-03-08 16:08:38,079 - INFO - load data complete
2019-03-08 16:08:38,080 - INFO - begin train
2019-03-08 16:09:07,605 - INFO - step: 500, loss: 10.2052, train_acc: 0.0088
2019-03-08 16:09:36,940 - INFO - step: 1000, loss: 9.7192, train_acc: 0.0320
2019-03-08 16:10:08,617 - INFO - step: 1500, loss: 8.9290, train_acc: 0.1350
...
2019-03-08 16:16:01,151 - INFO - model saved in ./saved_model/epoch_0
...

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

CUDA_VISIBLE_DEVICES=3 python infer.py

以下为预测结果示例:

W0308 16:41:56.847339 31709 device_context.cc:263] Please NOTE: device: 0, CUDA Capability: 35, Driver API Version: 9.0, Runtime API Version: 8.0
W0308 16:41:56.847705 31709 device_context.cc:271] device: 0, cuDNN Version: 7.0.
2019-03-08 16:42:20,420 - INFO - TEST --> loss: 5.8865, Recall@20: 0.4525
2019-03-08 16:42:45,153 - INFO - TEST --> loss: 5.5314, Recall@20: 0.5010
2019-03-08 16:43:10,233 - INFO - TEST --> loss: 5.5128, Recall@20: 0.5047
...

PaddleRec智能推荐

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

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

附上链接:https://github.com/PaddlePaddle/models/tree/develop/PaddleRec

论文传送门:

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

—  —

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

  1. 推荐模型之:跨会话信息感知的推荐模型探索与实践

    猜你喜欢 0.2021年10月热门报告盘点:<2021年轻人性生活报告>稳居榜首! 1.基于知识图谱的推荐系统总结 2.内容推荐策略产品经理的方法与实践 3.京东推荐算法精排技术实践 4. ...

  2. 【会话推荐】ICDM论文:探索跨会话信息感知的推荐模型

    会话推荐是推荐领域的一个子分支,  美团平台增长技术部也在该领域不断地进行探索.不久前,该部门提出的跨会话信息感知的时间卷积神经网络模型CA-TCN被国际会议ICDM NeuRec Workshop ...

  3. ICDM论文:探索跨会话信息感知的推荐模型

    会话推荐是推荐领域的一个子分支,  美团平台增长技术部也在该领域不断地进行探索.不久前,该部门提出的跨会话信息感知的时间卷积神经网络模型CA-TCN被国际会议ICDM NeuRec Workshop ...

  4. 基于Distflow的最优潮流模型(OPF)--模型推导篇

    开篇 前言:自打上期内容火电机组经济调度建模及求解--基础篇推出以后,有小伙伴留言:"不考虑潮流问题的经济调度都是耍流氓."作为一个有文化的流氓,我们尝试着为大家科普潮流计算.对于 ...

  5. 【论文整理】基于图神经网络的社交推荐模型整理Graph Neural Networks for Recommender Systems: Challenges, Methods, and Direct

    社交推荐模型发展历程 图形构造 在具有社会意识的推荐系统中,用户的最终行为取决于朋友的社会影响和他/她自己的偏好.社交推荐面临的主要挑战之一是如何构建社交图来捕捉朋友的社交影响.一般来说,社交网络中的 ...

  6. 基于多因素的搭配推荐模型

    1)相互搭配的商品是可以在多个因素上近似的,比如款式.材质.印花.颜色等,而用风格这一个概念来概括就显得有些粗糙. 2)可以与一个主商品进行搭配的pair商品也可以是多种风格的,比如一件T恤可以跟不同 ...

  7. ACM Computing Surveys 2021:基于会话推荐系统的最新长文综述

    ©作者|Shoujin Wang 单位|麦考瑞大学博后 研究方向|机器学习.推荐系统 编者按:基于会话的推荐系统, 作为一种新兴的推荐系统范式,正方兴未艾,大量的新技术和新方法层出不穷.这篇综述给读者 ...

  8. 2021最新基于会话推荐系统长文综述

    | 作者:Shoujin Wang | 单位:麦考瑞大学博后 | 研究方向:数据挖掘,机器学习以及推荐系统 一. 论文简介 本文给大家介绍一篇刚被ACM旗舰期刊 ACM  Computing Surv ...

  9. 读‘互联网金融理财产品多粒度推荐模型研究’

    一.目的 在信息不对称状态下,如何平衡用户和金融机构间的收益以及如何高效的为用户提供理财产品.金融机构精准把握用户需求. 以协同过滤推荐算法为基础,建立了基于理财产品的多粒度推荐模型. 二. 思路 本 ...

最新文章

  1. Android:禁用listView上的突出显示单击
  2. windows cannot ftp_免费自动FTP同步软件,6步掌握免费自动FTP同步软件的安装方法...
  3. 人人都是 DBA(X)资源信息收集脚本汇编
  4. hystrix 全局熔断_跟我学Spring Cloud(Finchley版)14Feign使用Hystrix
  5. php-rpm.conf,在新安装的宝塔面板中php无法启动起来
  6. Vue2.0组件之间通信
  7. 官宣!什么是新基建时代的混合云? | 凌云时刻
  8. CBoard修改折线图颜色
  9. SNMP中的MIB是什么?
  10. 恒凯USB数据采集卡在国产麒麟操作系统下的应用(一)环境设置、采集卡驱动安装及C语言采集应用
  11. 如何找到最新的RFC文档
  12. 前端:3分钟实现一个共享桌面,还能听见麦克风声音哦
  13. 语义分割:遥感影像标签制作
  14. 给计算机系学生的建议
  15. c语言程序设计作业心得,C语言程序设计实习心得体会
  16. 烧录flash_烧录固件完成后,配置JFLASH让程序自动运行
  17. 抽象类和接口的异同(分点)
  18. 2019年ios权限描述文字—所有APP通用版包过App Store审核
  19. eclipse gdb gdbserver 远程调试
  20. JS刷新页面的几种类型

热门文章

  1. matplot.bar 与matplot.barh绘制直方图案例大全
  2. log4j:WARN No such property [datePattern] in org.apache.log4j.RollingFileAppender.
  3. 旷视张祥雨:神经网络架构设计新思路
  4. 从对比学习(Contrastive Learning)到对比聚类(Contrastive Clustering)
  5. VS2010 + Qt5.3.2配置教程
  6. 分分钟带你杀入Kaggle Top 1%
  7. 使用Ethereum C++ Aleth客户端创建具有两个同步节点的以太坊Ethereum私有网络
  8. 独家 | 6种让Python程序变慢的坏习惯
  9. 丁鹏:多角度回顾因果推断的模型方法
  10. 牛津-阿斯利康疫苗与出血性疾病风险轻微升高有关 |《自然-医学》论文