基于session推荐的论文阅读
今天我们要看一下如下三篇论文:
- SR-GNN: Session-Based Recommendation with Graph Neural Networks
- TA-GNN: Target Attentive Graph Neural Networks for Session-based Recommendation
- GC-SAN: Graph Contextualized Self-Attention Network for Session-based Recommendation
SR-GNN
论文链接: https://arxiv.org/abs/1811.00855
模型结构:
本文主要采用了一种基于门控更新的图神经网络进行节点的表示学习,然后再通过节点的表征信息进行推荐商品的预测。
这里的图,会针对每一个session的item序列构建一个图。具体构图的方式为:
根据出度和入度。上图右边的方框可以看成两部分,左半边为入度的统计,右半边为出度的统计。如: v1v_1v1到v2v_2v2有一条边,所以左半边的一行二列处标记为1,其他类似。这里二行三列之所以是1/2,是因为v2v_2v2即连接了v3v_3v3也连接了v4v_4v4,所以折半。也就是按行进行归一化。
接下来,通过代码了解一下门控图网络一步的更新:
import torchdef GNNCell(A, hidden):# A为构建的图矩阵# hidden当前每个节点的表示# print(A.size()) # torch.Size([128, 15, 30]) # 这里30就很容易理解了,因为前面是15 所有构建的图矩阵基于出度和入度考虑,就变成了30# print(hidden.size()) # torch.Size([128, 15, 100])# 首先将当前每个节点的表示进行一个线性映射# 然后取出基于入度 信息聚合的表示input_in = torch.matmul(A[:, :, :A.shape[1]], self.linear_edge_in(hidden)) + self.b_iah# print(input_in.size()) # torch.Size([128, 15, 100])# 接着取出基于出度 信息聚合的表示input_out = torch.matmul(A[:, :, A.shape[1]: 2 * A.shape[1]], self.linear_edge_out(hidden)) + self.b_oah# print(input_out.size()) # torch.Size([128, 15, 100])# 将入度和出度聚合的信息进行拼接inputs = torch.cat([input_in, input_out], 2)# print(inputs.size()) # batch_size, max_len, 2 * hidden_size# 将更新后每个节点的信息 通过线性层 映射到原来hidden_size的三倍gi = F.linear(inputs, self.w_ih, self.b_ih) # 更新后各节点的表示# 将上一步每个节点的信息 通过线性层 映射到原来hidden_size的三倍gh = F.linear(hidden, self.w_hh, self.b_hh) # 更新前各节点的表示# print(gi.size()) # batch_size, max_len, 3 * hidden_size torch.Size([128, 15, 300])# print(gh.size()) # batch_size, max_len, 3 * hidden_size torch.Size([128, 15, 300])# 接着沿第二个维度 将上面两种信息 分块i_r, i_i, i_n = gi.chunk(3, 2) # 此时每一块的维度为 torch.Size([128, 15, 100])h_r, h_i, h_n = gh.chunk(3, 2) # 此时每一块的维度为 torch.Size([128, 15, 100])# 开始进行更新resetgate = torch.sigmoid(i_r + h_r) # 上一步信息和当前更新后节点信息加和 经过一个sigmid得到重置门 torch.Size([128, 15, 100])inputgate = torch.sigmoid(i_i + h_i) # 上一步信息和当前更新后节点信息加和 经过一个sigmid得到输入门 torch.Size([128, 15, 100])newgate = torch.tanh(i_n + resetgate * h_n) # 新的信息hy = newgate + inputgate * (hidden - newgate) # 也就是选择性更新# print(hy.size()) # torch.Size([3, 15, 100])return hy
这个基于门控的图网络是由这篇论文《Gated Graph Sequence Neural Networks》。链接:https://arxiv.org/pdf/1511.05493.pdf
上述代码的描述,可以参考下面的公式理解(其实很简单,类似rnn那种门控的机制):
通过上述图的反复迭代,最后学习到了每个节点的表征,也就是每个items的表征向量。 接着SA-GNN网络将每个节点的表示通过一个注意力网络进行了聚合,得到全局兴趣的表征限量:
上式中vnv_nvn为最后一步item的向量。
另外考虑了短期兴趣,即最后一步的item向量。将这两种向量拼接,然后去预测推荐商品:
交叉熵损失:
实验结果:
TA-GNN
论文链接: https://arxiv.org/abs/2005.02844
模型结构:
TA-GNN复用SR-GNN网络中的GNN结构,学习每个节点的表征向量,创新点主要是提出了一种目标感知的注意力。
Constructing Target-Aware Embeddings
首先,对于一个session中的所有items,经过GNN,就会学习到一个表征。 假设对于整个数据集,总共去重后的item(也就是NLP中的词表)个数为vocab_size。
相当于拿着词表中每一个词viv_ivi都去和当前session的每一步输出进行注意力计算,得到权重因为α,然后将当前每一步的输出和其权重因子α进行加权和,得到当前词viv_ivi的感知表示。 那对词表中的所有词做这样的操作,最后得到词表中每个词的感知向量。维度为: (vocab_size, hidden_size),具体计算如下:
上式中vtv_tvt为所有item(即词表中每一个词), viv_ivi为当前session中的每个item。
此时要明白: stargetts_{target}^{t}stargett维度应该是(batch_size, vocab_size, hidden_size)
Local embedding
局部embedding本文就是去的GNN输出session中最有一个item的向量。然后将这个向量重复vocab_size次,维度也就是(batch_size, vocab_size, hidden_size)
Global embedding
老套路了,就是将最有一步item的表征和前面每一步的表征做注意力计算,然后进行加权和。同理将最后的表征重复vocab_size次,最后维度变为:(batch_size, vocab_size, hidden_size)
predict
最后将这三者进行拼接:
其中W3W_3W3维度为: dx3d, 所以最后的sts_tst维度为: (batch_size, vocab_size, hidden_size)
接着和原始词表向量vtv_tvt相乘:
即: (batch_size, vocab_size, hidden_size) 和(vocab_size, hidden_size)矩阵乘。最后维度为: (batch_size, vocab_size),即预测出推荐的item的概率分布。
实验结果:
GC-SAN
论文链接: https://www.ijcai.org/proceedings/2019/0547.pdf
模型结构图:
这篇论文很简单,前面部分也是复用SR-GNN学习表征,再将一个学习的表征经过一个self-attention中。然后将最后一个item在GNN中的表征向量,和self-attention交互完后的表征向量拼接起来,进行预测。
其中E为self-attention最后的输出,hnh_nhn为gnn最后的输出。 w为一个超参数,调整两个之间的权重。
最后预测,老套路了,就是复用embedding的参数,进行推荐商品的预测。
实验结果:
基于session推荐的论文阅读相关推荐
- 【推荐算法论文阅读】LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation
这篇文章是基于NGCF提出的改进,NGCF相关的工作参考[推荐算法论文阅读]Neural Graph Collaborative Filtering 一.背景 通过严格的对照实验(在相同的数据集和评估 ...
- 长尾推荐算法论文阅读笔记合集(papers / literatures for long tail recommendation)
写在前面: (1)我将长尾推荐系统相关论文做了一个整理,主要包括:论文题目.发表的会议/期刊(出处).发表时间.被引量(主要是google scholar),有的论文将对其内容进行简单介绍.最后提供这 ...
- 【推荐算法论文阅读】BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Trans
一.背景 之前基于RNN的推荐模型都是按照从左到右单向建模的,单向结构限制了用户行为序列中隐藏表示的能力--它们通常假定一个严格有序的序列,而这并不总是实用的. 本文提出了 bert4rec,应用de ...
- 【推荐算法论文阅读】Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations
一.背景 工业界现有的推荐系统都需要从一个超大规模的候选集中拉取item进行打分排序.解决数据稀疏和指数级候选集分布的一种通常做法是从item的内容特征中学习出item的稠密表示.这里很自然地就想到了 ...
- 【推荐公平性论文阅读笔记】:A unifying and general account of fairness measurement in recommender systems-1区top
一.内容概述 1.主要内容 旨在定义一个通用的,灵活的,可参数化的框架,涵盖了公平性度量的大多数可能性. 2.背景 公平概念缺乏统一的理解和度量标准. 3.本文贡献 1) 通过分类维度对现有指标进行综 ...
- 推荐系统模型论文阅读笔记
推荐模型概论 Wide & Deep DeepFM 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中.居左.居右 SmartyPants 创建一个自定义列表 如何创建 ...
- 【AIGC使用教程】论文阅读神器 SciSpace 从注册到体验
欢迎关注[AIGC使用教程] 专栏 [AIGC使用教程]论文阅读神器 SciSpace 从注册到体验 [AIGC使用教程]Microsoft Edge/Bing Chat 注册使用完全指南 [AIGC ...
- 九月学习笔记 (FM、一些论文阅读、代码)
目录 2020.09.16 FM 因子分解机 2021.09.18 论文阅读 Interactive Recommender System via Knowledge Graph-enhanced R ...
- 论文阅读:基于用户上网数据的电影个性化推荐系统研究
基于用户上网数据的电影个性化推荐系统研究 赵鹏程,黄韬* *(北京邮电大学信 工程学院,北京 100876) 摘要:本文讲述了如何构建出完整电影知识图谱的方法,同时提出了一套发掘电影系列的实现算法.基 ...
- 【论文笔记】GRU4Rec基于session的推荐系统
GRU4Rec 论文: session-based recommendations with recurrent neural networks 真实世界推荐系统通常面临的数据是 短的 基于sessi ...
最新文章
- 2015人脸检测研究进展
- java配置接口提供给vue,vue在js中配置全局API接口
- button按钮跳转JS代码
- logback日志配置
- [Ext JS 4] 动态加载
- Python3之Memcache使用
- 2层框架结构柱子间距_框架结构加固方法,这六大要点行之有效!
- 中公电网计算机类题库讲练版百度云,2021电网二批招聘考试题库:计算机类练习题(5)...
- Android 一步步教你从ActionBar迁移到ToolBar
- goldfish安装
- 增值税相关软件基本常识
- 中文文本情感分析:基于机器学习方法的思路
- 标准的html 样式,CSS 样式表代码规则
- 今日早报 每日精选12条新闻简报 每天一分钟 知晓天下事 9月24日
- 【行业案例】域乎科技:“数”写长三角一体化的加速度——域乎科技链接未来,做数字时代的奠基人(智慧上海2020总第24篇)
- 如何评估服务器基础性能 - CPU负载、使用率、内存磁盘使用率、网络带宽......
- 微信公众平台开发之订阅号申请,接口验证篇
- abaqus在不同job间传递结果(import)之整理与问题(转载)
- 门电路图对照表——国标、IEEE、标准符号对照表
- 库克卸任前奋力一击:打造AR眼镜