数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
二十八、LESSR [2020]
在许多在线服务中,用户的行为天然地是按时间排序的。为了预测用户未来的行为,
next-item
推荐系统通过从用户的历史行为中挖掘序列模式sequential pattern
来学习用户的偏好。session-based
推荐是next-item
推荐的一个特例。与使用固定数量的previous action
来预测next action
的通用next-item
推荐系统不同,session-based
推荐系统将user action
分组到不相交的session
中,并使用当前session
中的previous action
来进行推荐。这里,session
是在时间上非常接近的item
的一个序列。session-based
推荐的思想来自于这样的一个观察:intra-session
的依赖关系对next item
的影响,要比inter-session
的依赖关系更大。具体而言,同一个session
中的用户行为通常具有一个共同的目标(如,购买一些手机配件),而不同session
中的用户行为的相关性较弱。用户可能在一个session
中购买手机配件,但是在另一个session
中购买与手机配件关系不大的商品,如衣服。因此,通用的next-item
推荐系统可能会遇到组合不相关的session
、以及抽取不完整的session
这两个问题。session-based
推荐系统不存在这些问题,因此它可以做出更准确的推荐,并部署在许多在线服务中。由于具有很高的实用价值,
session-based
推荐引起了研究人员的高度重视,并在过去几年中开发了许多有效的方法。之前提出的大多数方法都是基于马尔科夫链或RNN
。最近,GNN
变得越来越流行,并在许多任务中实现了state-of-the-art
的性能。也有一些工作尝试将GNN
应用于session-based
推荐。尽管这些GNN-based
方法取得了令人振奋的结果,并为session-based
推荐提供了一个新的和有前途的方向,但是我们观察到这些方法中存在两个信息丢失问题information loss problem
。现有的
GNN-based
方法中的第一个信息丢失问题称作有损lossy
的session encoding
问题。这是由于它们将session
转换为graph
的有损编码方案lossy encoding scheme
。要使用GNN
处理session
,需要首先将session
转换为graph
。在这些方法中,每个session
都将被转换为一个有向图,边是item
之间的转移transition
。边可以加权或不加权。例如,
session
$ [v_1,v_2,v_3,v_3,v_2,v_2,v_4] $ 被转换为如下图所示的graph
。但是,这种转换是有损操作,因为它不是一一映射。不同的session
$ [v_1,v_2,v_2,v_3,v_3,v_2,v_4] $ 也被转换为相同的graph
,因此我们无法在给定graph
的情况下重建原始session
。尽管在特定数据集中,这两个session
可能产生相同的next item
。但是也可能存在一个数据集,其中这两个session
产生不同的next item
。在后一种情况下,这些GNN
模型不可能为这两个session
都作出正确的推荐。因此,这些模型的建模能力有限。本质上这两个
session
是不同的,而GNN-based
会为这两个session
作出相同的推荐,因为这两个session
转换后的graph
是相同的。第二个信息丢失问题称为无效的远程依赖捕获问题
ineffective long-range dependency capturing problem
,即,这些GNN-based
方法无法有效地捕获所有远程依赖。在GNN
模型的每一层中,节点携带的信息沿着边传播一个step
,因此每一层只能捕获1-hop
关系。通过堆叠多个层,GNN
模型可以捕获多达L-hop
关系,其中L
等于层数。由于过拟合overfitting
和过度平滑over-smoothing
问题,堆叠更多层不一定会提高性能,因此这些GNN
模型的最佳层数通常不大于3
。因此,模型只能捕获3-hop
关系。然而,在实际应用中,
session
长度很容易大于3
。因此,很可能存在一些重要的、长度大于3
的序列模式sequential pattern
。然而,由于网络结构的限制,这些GNN-based
模型无法捕获此类信息。
为了解决上述问题,论文
《Handling Information Loss of Graph Neural Networks for Session-based Recommendation》
提出了一种新的GNN
模型,称作Lossless Edge-order preserving aggregation and Shortcut graph attention for Session-based Recommendation: LESSR
。下图说明了LESSR
的工作流程:首先,将给定的
input session
转换为一个无损编码图(称作edge-order preserving: EOP
的multigraph
),以及一个shortcut graph
。EOP multigraph
可以解决lossy session encoding
问题,shortcut graph
可以解决无效的远程依赖捕获问题。然后,这些
graph
和item embedding
一起被传递给multiple edge-order preserving aggregation: EOPA
层和shortcut graph attention: SGAT
层,从而生成所有节点的latent feature
。EOPA
层使用EOP multigraph
来捕获局部上下文信息,SGAT
层使用shortcut graph
有效地捕获远程依赖关系。然后,模型应用带注意力机制的
readout
函数从所有的node embedding
中生成graph-level embedding
。最后,模型将
graph-level embedding
与用户最近的兴趣相结合从而生成推荐。
论文的贡献总结如下:
- 论文首先确定了用于
session-based
推荐的GNN-based
方法的两个信息丢失问题,包括有损的session encoding
问题、以及无效的远程依赖捕获问题。 - 为了解决有损的
session encoding
问题,论文提出了一种将session
转换为有向multigraph
的无损编码方案,以及一个使用GRU
来聚合所传播的信息的EOPA
层。 - 为了解决无效的远程依赖捕获问题,作者提出了一个
SGAT
层,该层使用注意力机制沿着shortcut connection
有效地传播信息。 - 通过结合这两种解决方案,作者构建了一个
GNN
模型,该模型没有信息丢失问题并且在三个公共数据中优于现有的方法。
相关工作:
受到邻域模型在传统推荐任务中流行的启发,其中在传统推荐任务中
user id
可用,早期的session-based
推荐的研究工作大多基于最近邻nearest neighbor
。这些方法需要一个相似度函数来衡量item
或session
之间的相似度。《The YouTube Video Recommendation System》
提出了一种方法,该方法根据item
的共现模式co-occurrence pattern
来计算item
相似度,并推荐最可能与当前session
中的任何item
共现的item
。《Session-based Collaborative Filtering for Predicting the Next Song》
提出了一种模型,该模型首先将每个session
转换为一个向量,然后测量session
向量之间的余弦相似度。- 基于
《Session-based Collaborative Filtering for Predicting the Next Song》
的工作,《Improving Music Recommendation in Session-based Collaborative Filtering by Using Temporal Context》
提出在计算余弦相似度之前使用聚类方法,将稀疏的session
向量转换为稠密向量。
虽然简单有效,但是
neighborhood-based
方法存在稀疏性问题,并且未考虑session
中item
的相对顺序。为了更好地捕获序列属性,人们采用了基于马尔科夫链的方法。
- 最简单的基于马尔科夫链的方法使用训练集中的转移概率来启发式地计算转移矩阵
transition matrix
(《An MDP-Based Recommender System》
)。但是,该方法无法处理未观察到的转移模式。 - 一种解决方案是
《Factorizing Personalized Markov Chains for Next-basket Recommendation》
中提出的FPMC
方法,该方法使用张量分解技术来分解个性化的转移矩阵。 - 另一种解决方案称作潜在马尔科夫
embedding
(《Playlist Prediction via Metric Embedding》
),它将item
嵌入到欧氏空间,并通过embedding
的欧氏距离来估计item
之间的转移概率。
当考虑更多
previous items
时状态空间的规模很快就变得难以管理,因此大多数基于马尔科夫链的方法仅使用一阶转移来构建转移矩阵,这使得它们无法捕获更复杂的高阶序列模式。- 最简单的基于马尔科夫链的方法使用训练集中的转移概率来启发式地计算转移矩阵
由于强大的序列建模能力,
RNN
是对上述基于马尔科夫链方法的限制的自然解决方案。GRU4Rec
是第一个RNN-based
的session-based
推荐方法,它简单地堆叠了多个GRU layer
。- 受计算机视觉和自然语言处理中注意力机制成功的启发,
NARM
采用带注意力机制的混合编码器来建模用户的序列行为和主要意图。结果证明这是学习session representation
的有效方法。 - 遵从
NARM
工作,几乎所有后续的RNN-based
方法都包含了注意力机制(LINet
、RepeatNet
、ISLF
)。
卷积神经网络也是强大的序列建模工具。
《Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding》
提出了一种基于CNN
的方法(即,Caser
),该方法将item
序列嵌入到二维潜在矩阵中,并对矩阵进行水平卷积和垂直卷积从而抽取sequence representation
。《A Simple Convolutional Generative Network for Next Item Recommendation》
提出使用空洞卷积层dilated convolutional layer
来有效地增加感受野,而不依赖于有损的池化操作,从而使模型与GRU4Rec
和Caser
相比更能捕获远程依赖关系。
在过去的几年里,
GNN
越来越受欢迎,并在许多任务中取得了state-of-the-art
的性能。有一些工作将GNN
应用于session-based
推荐。SR-GNN
首先将session
编码为无权有向图,其中边表示session
中的item
转移。然后使用gated GNN: GGNN
在节点之间沿着边的两个方向传播信息。- 基于
SR-GNN
,《Graph Contextualized Self-Attention Network for Session-based Recommendation》
提出了一种方法,该方法使用GGNN
来提取局部上下文信息,并使用self-attention network: SAN
来捕获远距离位置之间的全局依赖关系。 FGNN
将session
转换为加权有向图,其中边的权重是item
转移的计数。它使用一个适配的multi-layered graph attention network
来抽取item
特征,并使用一个修改过的Set2Set
池化算子来生成session representation
。
这些
GNN-based
方法为session-based
推荐展示了一个新的和有前景的方向。然而,正如我们即将讨论的那样,这些方法在代表了session
有损编码的图上操作,并且它们无法有效地捕获长期依赖关系。
28.1 模型
GNN
是直接对graph
数据进行操作的神经网络。它们用于学习诸如图分类、节点分类、链接预测等问题的任务。这里我们仅关注图分类问题,因为session-based
推荐可以被表述为图分类问题。给定图
$ G=(V,E) $ ,其中 $ V $ 为节点集合, $ E $ 为边集合。每个节点 $ v_i\in V $ 关联一个节点特征向量 $ \mathbf{\vec x}_i $ ,该特征向量作为初始的node representation
传递给GNN
的第一层。大多数GNN
可以从消息传递的角度来理解。在GNN
的每一层中,node representation
通过沿着边来传递消息从而得到更新。该过程可以表述为:其中:
$ \mathbf{\vec x}_i^{(l)} $ 表示节点 $ v_i $ 在第 $ l $ 层的node representation
。 $ E_\text{in}(v_i) $ 表示节点 $ v_i $ 的入边incoming edge
集合。 $ f^{(l)}_\text{msg}(\cdot) $ 为消息函数message function
,它计算要从相邻节点 $ v_j $ 传播到目标节点 $ v_i $ 的消息。 $ f_\text{agg}^{(l)}(\cdot) $ 为聚合函数aggregation function
,它聚合传递给目标节点 $ v_i $ 的所有信息。 $ f_\text{upd}^{(l)}(\cdot) $ 为更新函数update function
,它根据原始的node representation
和聚合后的信息来计算新的node representation
。这里的消息函数、聚合函数、更新函数都与
layer-specific
的。如果层之间共享,那么这三个函数可以表示为: $ f_\text{msg}(\cdot),f_\text{agg}(\cdot),f_\text{upd}(\cdot) $ ,即移除了上标 $ (l) $ 。
令
$ L $ 为GNN
的层数。经过 $ L $ 层GNN
的 $ L $ 步消息传递之后,final node representation
捕获了L-hop community
内的有关图结构和节点特征的信息。对于图分类任务,
readout function
$ f_\text{out}(\cdot) $ 用于通过聚合最后一层中所有节点的representation
来生成graph level representation
$ \mathbf{\vec h}_G $ :session-based
推荐的目标是给定当前session
的一个item
序列(历史点击的item
),预测用户最有可能点击的next item
。正式地,令
$ \mathcal I = \{v_1,v_2,\cdots,v_{|\mathcal I|}\} $ 为所有item
的集合。一个session
$ \mathbf s_i = [s_{i,1},s_{i,2},\cdots,s_{i,l_i}] $ 是根据时间排序的item
序列,其中 $ s_{i,t}\in \mathcal I $ 为time step
$ t $ 的item
, $ l_i $ 为 $ \mathbf s_i $ 的长度。模型的目标是预测next item
$ s_{i,l_{i+1}} $ 。一个典型的session-based
推荐系统会生成next item
的一个概率分布,即 $ p(s_{i,l_i+1}\mid \mathbf s_i) $ 。具有top
概率的一批item
将作为候选集合用于推荐。遵从之前的工作,我们在本文中不考虑额外的上下文信息,如
user ID
和item
属性。item ID
被嵌入在 $ d $ 维空间中,并作为模型中的初始的item feature
。这是session-based
推荐的文献中的常见做法。然而,很容易调整我们的方法来考虑额外的上下文信息。例如:
user ID embedding
可以作为graph-level
的属性,并且可以附加到每一层中的item ID embedding
。item
特征可以与item ID emebdding
相结合,或者直接替换后者。
28.1.1 Session 到 Graph 的转换
- 要使用
GNN
处理session
,必须首先将session
转换为图。这里我们首先介绍一种叫做S2MG
的方法,该方法将session
转换为EOP multigraph
。然后我们介绍另一种叫做S2SG
的方法,该方法将session
转换为shortcut graph
。
a. S2MG: Session to EOP Multigraph
在
session-based
推荐的文献中,有两种常用的方法可以将session
转换为图。- 第一种方法由
SR-GNN
提出,它将session
转换为无权有向图 $ G=(V,E) $ ,其中节点集合 $ V $ 由session
中的unique item
组成,边集合 $ E $ 包含所有的边 $ (u,v) $ 如果 $ u=s_{i,t},v=s_{i,t+1}, 1\le t\le l_i $ 。 - 第二种方法由
FGNN
提出。与第一种方法不同,该方法转换后的图是加权的,其中边 $ (u,v) $ 的权重是转移 $ u\rightarrow v $ 在当前session
中出现的频次。
在接下来的内容中,我们称第一种方法为
Session-to-Graph: S2G
,第二种方法为Session-to-Weighted-Graph: S2WG
。- 第一种方法由
我们声称
S2G
和S2WG
都是有损的转换方法,因为在给定转换后的图的情况下,并不总是可以重建原始的session
。为了证明这一点,我们只需要证明S2WG
是有损的,因为它比S2G
捕获更多的信息,即item transition
的出现次数。因此,S2WG is lossy
意味着S2G is lossy
。为了了解为什么
S2WG
是有损的,我们举一个反例如下。给定两个不同的session
:S2WG
将这两个session
转换为相同的图,如下图(a)
所示。注意,我们省略了边的权重,因为它们都是1
。因此,给定下图(a)
中的转换后的图,我们不清楚 $ \mathbf s_1 $ 和 $ \mathbf s_2 $ 中的哪一个才是原始的session
。有损转换可能会出现问题,因为被忽略的信息对于确定
next item
可能很重要。我们应该让模型自动学习决定哪些信息可以被忽略,而不是使用有损转换方法 “盲目地” 作出决定。否则,该模型不够灵活,无法适应复杂的数据集,因为模型的建模能力受到有损转换方法的限制。为了解决这个问题,我们提出了一种叫做
session to EOP multigraph: S2MG
的方法,该方法将session
转换为保留了边顺序的有向multigraph
。对于原始
session
中的每个转移 $ u\rightarrow v $ ,我们创建一条边 $ (u,v) $ 。该图是一个multigraph
,因为如果存在从 $ u $ 到 $ v $ 的多个转移,我们将创建从 $ u $ 到 $ v $ 的多条边。然后,对于每个节点
$ v $ , $ E_\text{in}(v) $ 中的边可以根据它们在session
中出现的时间来排序。我们通过给 $ E_\text{in}(v) $ 中的每条边一个整数属性来记录顺序,该属性值指示该条边在 $ E_\text{in}(v) $ 中的所有边之间的相对顺序。首先出现在
$ E_\text{in}(v) $ 中的边,其属性值为1
。接下来出现的边,其属性值为2
。以此类推。
例如,
session
$ \mathbf s_1 = [v_1,v_2,v_3,v_3,v_2,v_2,v_4] $ 被转换为上图(b)
中的图,用 $ \text{MG}_{\mathbf s_1} $ 表示。为了使得转换真正无损,我们还标记了last item
,即session
$ \mathbf s_1 $ 中的节点 $ v_4 $ ,由虚线圆圈来表示。我们将这个结果图称作给定session
的edge-order preserving: EOP
的multigraph
。现在,我们通过展示如何在给定一个
EOP multigraph
(即,使用S2MG
转换得到的图)的情况下重建原始的session
来证明S2MG
是一种从session
到graph
的无损转换方法。基本思想是:按照item
在session
中出现的相反顺序来恢复item
。我们以
$ \text{MG}_{\mathbf s_1} $ 为例。last item
是被标记的节点 $ v_4 $ 。- 由于我们知道
last item
,并且我们知道 $ v_4 $ 的入边的顺序,我们可以确定last edge
是 $ (v_2,v_4) $ 。 - 倒数第二个
item
就是last edge
的源节点,即 $ v_2 $ 。 - 然后我们可以迭代地执行该操作并确定倒数第三个
item
,以此类推。
通过这种方式,我们可以从图
$ \text{MG}_{\mathbf s_1} $ 中恢复session
$ \mathbf s_1 $ 。给定任何的graph
,可以应用相同的过程来重建原始的session
。因此,S2MG
是一种从session
到图的无损转换方法。- 由于我们知道
b. S2SG: Session to Shortcut Graph
为了处理现有的
GNN-based
的session-based
推荐模型中无效的远程依赖问题,我们提出了shortcut graph attention: SGAT
层(见后面的内容描述)。SGAT layer
需要一个不同于上述EOP multigraph
的输入图。这个输入图采用称作session to shortcut graph: S2SG
的方法从input session
中转换而来。给定一个
session
$ \mathbf s_i $ ,我们创建一个图,其中节点是 $ \mathbf s_i $ 中的unique item
。对于每对有序的节点pair
$ (u,v) $ ,当且仅当存在一个pair
$ (s_{i,t_1},s_{i,t_2}) $ 使得 $ s_{i,t_1}=u,s_{i,t_2}=v, t_1\lt t_2 $ 的时候,我们创建从 $ u $ 到 $ v $ 的一条边。该图被称作shortcut graph
,因为它连接了一对item
而不经过中间的item
。我们还在图中添加了
self-loop
,以便稍后在SGAT
层执行消息传递时,可以组合update function
和aggregate function
,这是GAT
模型中的常见做法。采用了
self-loop
之后,更新函数和聚合函数可以用一个统一的函数来替代。因此,
session
$ \mathbf s_1 = [v_1,v_2,v_3,v_3,v_2,v_2,v_4] $ 的shortcut graph
如下图(c)
所示。在接下来的内容中,我们展示了
SGAT
层如何通过在shortcut graph
上执行消息传递从而解决无效的远程依赖问题。
28.1.2 LESSR
LESSR
的整体框架如下图所示。首先我们介绍EOPA layer
,然后我们介绍SGAT layer
,接下来我们描述如何堆叠这两种类型的层,然后我们展示如何获取session embedding
。最后,我们给出了我们如何进行预测和训练。
a. EOPA layer
给定从
session
无损转换的EOP multigraph
,GNN
仍然需要正确地处理图,以便可以将不同的session
映射到不同的representation
。这在现有的GNN-based
的session-based
推荐模型中是不可能的,因为它们使用排列不变permutation-invariant
的聚合函数,忽略了边的相对顺序。因此,这些模型仅适用于边之间的排序信息不重要的数据集,这意味着这些模型的建模能力存在限制。因为
EOP multigraph
中,每条边有一个整数属性值来保留边的相对顺序,那么将这个属性值作为聚合函数的特征(比如,position embedding
),是否就可以保留边之间的排序信息?为了填补这个
gap
,我们提出了edge-order preserving aggregation: EOPA
层,该层使用GRU
来聚合从相邻节点传递的信息。具体而言,令 $ OE_\text{in}(v_i) = [(v_{j_1},v_i),(v_{j_2},v_i),\cdots,(v_{j_{d_i}},v_i)] $ 为边集合 $ E_\text{in}(v_i) $ 的有序列表,其中 $ d_i $ 为节点 $ v_i $ 的degree
。 $ OE_\text{in}(v_i) $ 可以使用EOP multigraph
中边的整数属性从 $ E_\text{in}(v_i) $ 来获得。来自邻居的聚合信息定义如下:其中:
$ \left\{\mathbf{\vec h}_k^{(l)}:0\le k\le d_i\right\} $ 为GRU
的hidden state
。初始的状态 $ \mathbf{\vec h}_0^{(l)} $ 可以为零向量。 $ f_\text{msg}^{(l)}(\cdot) $ 可以是计算从节点 $ v_{j_k} $ 传递到节点 $ v_i $ 的消息的任意有效消息函数。消息函数的结果作为
GRU
的输入。
GRU
聚合器是一种RNN
聚合器。我们选择GRU
而不是LSTM
,因为已经有工作表明:在session-based
推荐任务中GRU
优于LSTM
。尽管在现有工作中人们已经提出了RNN
聚合器,如GraphSAGE
中提出了LSTM
聚合器,但是应该注意到这些RNN
聚合器的工作方式与我们的不同。具体而言,现有的
RNN
聚合器通过对这些边的随机排列执行聚合来故意忽略入边incoming edge
的相对顺序,而我们的GRU
聚合器以固定的顺序执行聚合。这是因为在session-based
推荐设置中,边自然是按时间排序的。但是,我们要强调的是,
GRU
聚合器并不是我们的主要贡献。我们的主要贡献是应用GRU
聚合器来解决前面描述的信息丢失问题。来自已有
GNN
模型的消息函数和更新函数可以与GRU
聚合器一起使用,但是考虑到GRU
强大的表达能力,我们简单地对消息函数和更新函数使用线性变换。因此,将所有内容放在一起,我们模型的EOPA
层定义为:其中:
$ \mathbf W^{(l)}_\text{upd}\in \mathbb R^{d\times (2d)},\mathbf W_\text{msg}^{(l)}\in \mathbb R^{d\times d} $ 为待学习的参数, $ || $ 表示向量拼接。这里消息函数
$ f_\text{msg}^{(l)}\left(\mathbf{\vec x}_i^{(l)},\mathbf{\vec x}_{j_k}^{(l)}\right) = \mathbf W_\text{msg}^{(l)}\mathbf{\vec x}_{j_k}^{(l)} $ ,更新函数 $ f_\text{upd}^{(l)}\left(\mathbf{\vec x}_i^{(l)},\text{agg}_i^{(l)}\right)= \mathbf W_\text{upd}^{(l)}\left(\mathbf{\vec x}_i^{(l)}|| \mathbf{\vec h}_{d_i}^{(l)}\right) $ 。至于最后一个节点的信息,将在后面描述的
readout
函数中使用,以便将不同的session
映射到不同的representation
。
b. SGAT layer
一般而言,每一层都传播一个
step
的信息,因此一层只能捕获节点之间的1-hop
关系。为了捕获multi-hop
关系,可以堆叠多个GNN
层。不幸的是,这会引入过度平滑问题over-smooth problem
,即,node representation
收敛到相同的值。由于过度平滑问题通常发生在层数大于3
时,因此堆叠多个层并不是捕获multi-hop
关系的好方法。此外,即使可以堆叠多个层,
GNN
也只能捕获最多k-hop
关系,其中 $ k $ 等于层数。但是,在电商网站等现实世界的application
中,session
长度大于 $ k $ 是很常见的。因此,现有的session-based
推荐的GNN
模型无法有效地捕获very long range
内的依赖关系。为了解决这个问题,我们提出了
shortcut graph attention: SGAT
层,它本质上是利用S2SG
得到的shortcut graph
中的边来进行快速的消息传播。具体而言,
SGAT
层使用以下注意力机制沿着shortcut graph
中的边来传播信息:其中:
$ E_\text{in}(v_i) $ 是节点 $ v_i $ 在shortcut graph
中的入边incoming edge
集合。 $ \mathbf{\vec p}^{(l)},\mathbf{\vec b}^{(l)}\in \mathbb R^d, \mathbf W_\text{key}^{(l)},\mathbf W_\text{qry}^{(l)},\mathbf W_\text{val}^{(l)}\in \mathbb R^{d\times d} $ 为待学习的参数。
shortcut graph
中的边直接将每个item
连接到其所有后续item
,而无需经过中间的item
。因此,shortcut graph
中的边可以看做是item
之间的shortcut connection
。SGAT
层可以有效地捕获任意长度的长期依赖关系,因为它在一个step
中沿着item
之间的shortcut connection
传播信息,而无需经过中间的item
。它可以与现有的GNN-based
方法中的原始层相结合,从而提高GNN-based
方法捕获远程依赖关系的能力。如何与现有的
GNN-based
方法中的原始层相结合?可以参考本文中的 “堆叠多层” 部分。
c. 堆叠多层
EOPA
层和SGAT
层用于解决之前GNN-based
的session-based
推荐方法的两个信息丢失问题。为了构建没有信息丢失问题的GNN
模型,我们堆叠了许多EOPA
层和SGAT
层。我们没有将所有EOPA
层放在所有SGAT
层之后,也没有将所有的SGAT
层放在EOPA
层之后。我们将EOPA
层与SGAT
层交错,原因如下:shortcut graph
是原始session
的有损转换,因此不断堆叠多个SGAT
层会引入有损session encoding
问题。SGAT
层越多,问题就越严重,因为信息丢失量会累积。通过交错
EOPA
层和SGAT
层,丢失的信息可以保留在后续的EOPA
层中,SGAT
层可以仅专注于捕获远程依赖关系。交错两种层的另一个优点是:每种层都可以有效地利用另一种层捕获的特征。由于
EOPA
层更能捕获局部上下文信息,而SGAT
层更能捕获全局依赖关系,将这两种层交错可以有效地结合两者的优点,提高模型学习更复杂依赖关系的能力。
为了进一步促进特征重用
feature reuse
,我们引入DenseNet
中提出的稠密连接。每层的输入由所有previous layers
的输出特征组成。具体而言:- 第
$ l $ 层的原始输入为: $ \left\{\mathbf{\vec x}_i^{(l-1)}:v_i\in V\right\} $ 。 - 采用稠密连接之后,第
$ l $ 层的输入为: $ \left\{\mathbf{\vec x}_i^{(0)}||\mathbf{\vec x}_i^{(1)}||\cdots||\mathbf{\vec x}_i^{(l-1)}:v_i\in V\right\} $ ,它就是所有previous layers
输出的拼接。
结果表明:具有稠密连接的深度学习模型的参数效率更高,即,用更少的参数实现相同的性能,因为每个较高的层不仅可以使用它的前一层的抽象特征,还可以使用更低层的
low-level feature
。- 第
d. 生成 Session Embedding
在所有层的消息传递完成之后,我们得到所有节点的
final representation
。为了将当前session
表示为embedding
向量,我们应用了SR-GNN
中提出的readout
函数,该函数通过注意力机制聚合node representation
来计算graph-level representation
。令
$ \mathbf{\vec x}_\text{last}^{(L)} $ 为session
中last item
的final node representation
。graph-level representation
$ \mathbf{\vec h}_G $ 定义如下:其中:
$ \mathbf{\vec q},\mathbf{\vec r}\in \mathbb R^d, \mathbf W_1,\mathbf W_2\in \mathbb R^{d\times d} $ 为待学习的参数。 $ V $ 为当前session
转换后的图的节点集合,它的规模远远小于全量item
集合 $ \mathcal I $ ,即 $ V\sube \mathcal I $ 。graph-level representation
捕获当前session
的全局偏好,记做 $ \mathbf{\vec s}_g = \mathbf{\vec h}_G $ 。由于之前的研究表明:显式考虑用户最近的兴趣也很重要,因此我们定义了一个局部偏好向量local preference vector
,记做 $ \mathbf{\vec s}_l = \mathbf{\vec x}_\text{last}^{(L)} $ 。然后,我们将
session embedding
计算为全局偏好和局部偏好的线性变换:其中:
$ \mathbf W_h\in \mathbb R^{d\times 2d} $ 为一个待学习的参数。
e. 预测和训练
在获得
session embedding
之后,我们可以使用它来计算next item
的概率分布从而进行推荐。对于每个
item
$ v_i\in \mathcal I $ ,我们首先使用其embedding
$ \mathbf{\vec v}_i $ 以及session embedding
来计算一个分数:实际上
$ \mathbf{\vec v}_i $ 就是节点特征向量 $ \mathbf{\vec x}_i $ 。然后,
next item
是item
$ v_i $ 的预测概率为:对于
top-K
推荐,我们可以仅推荐概率最高的 $ K $ 个ietm
。令
$ \mathbf{\vec y} $ 为next item
的真实概率分布,它是一个one-hot
向量。损失函数被定义为预测分布和真实分布的交叉熵:然后,所有参数以及
item embedding
都被随机初始化,并通过端到端的反向传播来联合学习。
28.2 实验
数据集:
Diginetica
数据集:来自CIKM Cup 2016
。我们使用它的交易数据来进行session-based
推荐。遵从之前的工作(NARM, STAMP, RepeatNet, SR-GNN
),我们使用最近一周的session
作为测试集。Gowalla
数据集:是一个广泛用于point-of-interest: POI
推荐的check-in
数据集。遵从之前的工作(《Streaming Session-based Recommendation》,Caser
),我们保留了top 30000
个最受欢迎的location
,并通过1
天的时间间隔来拆分用户的check-in
记录从而将这些记录分组到不相交的session
中。最近的20%
的session
用作测试集。Last.fm
数据集:是一个广泛用于许多推荐任务的数据集。我们将该数据集用于音乐艺术家推荐。遵从之前的工作(《Streaming Session-based Recommendation》, RepeatNet
),我们保留了top 40000
名最受欢迎的艺术家,并将拆分间隔设置为8
小时。与Gowalla
类似,最近的20%
的session
用作测试集。
遵从之前的工作(
NARM, STAMP, FGNN, RepeatNet, SR-GNN
),我们首先过滤了短的session
和低频的item
,然后应用了NARM, STAMP, SR-GNN
中描述的数据增强技术。预处理后数据集的一些统计数据如下表所示:baseline
方法:Item-KNN
:一种邻域方法,它推荐与当前session
中的previous items
相似的item
,其中两个item
之间的相似度由它们的session
余弦相似度所定义。FPMC
:一种用于next-basket
推荐的基于马尔科夫链的方法。为了适配session-based
推荐,我们将next item
视为next-basket
。NARM
:使用RNN
来捕获用户的主要意图和序列行为。NextItNet
:一种用于next-item
推荐的CNN-based
方法。它使用空洞卷积来增加感受野,而且不使用有损的池化操作。SR-GNN
:将session
转换为有向无权图,并通过GNN
来沿边的两个方向传播信息从而提取item
特征。FGNN
:将session
转换为有向加权图,并使用适配的GAT
来学习item representation
。GC-SAN
:首先使用GGNN
来抽取局部上下文信息,然后使用self-attention network: SAN
来捕获全局依赖关系。
配置:遵从
STAMP
和Caser
之后,对于每种方法,我们应用网格搜索并使用训练集的最后20%
作为验证集从而找到最佳超参数。超参数的范围是:embedding
维度 $ d $ 的范围 $ \{16,32,64,96,128\} $ 。- 学习率
$ \eta $ 的范围 $ \{10^{-4},10^{-3},\cdots,10^{-1}\} $ 。 - 对于
GNN-based
方法,我们也搜索层数 $ L $ ,其范围是 $ \{1,2,3,4,5\} $ 。
我们使用
Adam
优化器来训练模型,batch size
设置为512
。我们报告每个模型在其最佳超参数配置下的结果。评估指标:
Hit Rate: HR@20
、Mean Reciprocal Rank: MRR@20
。所有方法的实验结果如下表所示,可以看到:
包括
Item-KNN
和FPMC
在内的传统方法的性能没有竞争力。这些方法仅基于item
的相似性、或者仅基于item
转移进行推荐,而不考虑其它重要的序列信息,如,当前session
中previous items
之间的相对次序。所有基于神经网络的模型都大大优于传统方法,证明了深度学习技术在
session-based
推荐中的有效性。基于神经网络的模型能够捕获复杂的序列模式从而进行推荐。然而,它们的序列建模能力并非同样地强大。
CNN-based
的方法NextItNet
的性能低于其它RNN-based
和GNN-based
方法。一个可能的原因是:CNN
仅擅长捕获连续的序列模式,而不擅长捕获长期依赖。NARM
取得了具有竞争力的性能,因为它使用RNN
来捕获序列行为以及使用注意力机制来捕获全局偏好。
GNN-based
方法通常优于其它方法,这表明GNN
为session-based
推荐提供了一个有前途的方法。虽然
FGNN
使用的转换方法conversion method
比SR-GNN
使用的方法捕获更多的信息,但是FGNN
的性能并不优于SR-GNN
,这表明选择强大的消息传递方案的重要性。GC-SAN
优于SR-GNN
,因为它使用SAN
来捕获远距离item
之间的全局依赖关系,展示出显式考虑长期依赖关系的有效性。LESSR
使用强大的EOPA
来抽取局部上下文,并使用SGAT
来捕获任意长度的远程依赖关系,因此它可以显著优于所有的baseline
方法,证明了所提出方法的效果。在三个数据集中,
LESSR
在Last.fm
数据集上获得了最大的性能提升,因为这个数据集的平均长度最大,所以LESSR
从保留边次序edge order
和捕获长期依赖关系中获益最多。
消融研究:
EOPA Layer
的有效性:为了评估EOPA
层的有效性,我们将它与来自其它GNN-based
方法的message passing: MP
层进行比较,包括:来自SR-GNN
的GGNN
、来自FGNN
的WGAT
、来自GC-SAN
的SAN
。我们使用前述描述的相同的
readout
函数。embedding size
设置为96
,因为大多数模型在这个embedding size
下实现了最佳性能。- 对于
GGNN
和WGAT
,层数设置为1
,并与具有一个EOPA
层的模型进行比较。 - 为了展示
EOPA
的重要性,我们还将EOPA
层与其修改后的变体进行了比较,该变体对入边incoming edge
的随机排列执行聚合。换句话讲,修改后的EOPA
层忽略了EOP multigraph
中边的顺序属性。我们用变体EOPA(rand)
来表示。 - 对于
SAN
,由于它是为与GGNN
一起工作而设计的,因此我们比较了由GGNN
和SAN
组成的模型,以及由GGNN
和EOPA
组成的模型。
结果如下表所示。每个模型都由其包含的
MP layer
的名称来表示。可以看到:EOPA
始终优于所有其它类型的MP layer
,证明了EOPA
的有效性。- 其它类型的
MP layer
表现更差,因为它们使用有损编码方案将session
转换为图,并且它们的聚合方案不考虑边的相对顺序。 - 注意,尽管
EOPA
和EOPA(rand)
使用相同的编码方案,即S2MG
,但是EOPA
优于EOPA(rand)
,因为EOPA(rand)
在执行聚合时会随机排列入边incoming edge
。因此,仅保留边顺序的转换方案是不够的。聚合方案还需要保留边顺序。
- 对于
SGAT Layer
的有效性:为了展示SGAT
的有效性,我们将每个现有的GNN-based
方法的最后一个MP layer
替换为SGAT layer
,并检查是否替换后是否提高了性能。- 由于
SR-GNN
和FGNN
只有一种MP layer
,因此将层数设置为2
,以便修改后的模型有一个原始MP layer
、有一个是SGAT layer
。 - 对于
GC-SAN
,层数设为3
,因为它有两种MP layer
。 - 对于
LESSR
,我们比较了一个具有两层EOPA layer
的模型,以及一个具有一层EOPA layer
和一层SGAT layer
的模型。
emebdding size
设为96
。由于篇幅有限,我们仅报告了Diginetica
数据集上的HR@20
的性能,因为它更常用于session-based
的推荐。结果如下表所示。可以看到:替换有助于提高模型性能。这是因为原始层仅擅长捕获局部上下文信息,而不是复杂的远程依赖关系。通过SGAT layer
替换原始层,模型捕获远程依赖关系的能力得到提升。GC-SAN
中的SAN
层也能够捕获远程节点之间的全局依赖关系。但是,它们在每对节点之间传播信息,这完全丢弃了原始session
中的连接信息。相反,我们的SGAT
层仅当 $ u $ 出现在 $ v $ 之前时,才会将信息从 $ u $ 传播到 $ v $ ,这保留了一些连接信息。因此,当SAN layer
替换为我们的SGAT layer
时,模型的性能提升是可以理解的。- 由于
EOPA
层和SGAT
层的顺序:为了展示层顺序的优势,我们比较了四种模型,包括:EESS, SSEE, ESES, SESE
。每个模型包含两个EOPA layer
和两个SGAT layer
,其中E
代表EOPA layer
,S
代表SGAT layer
,字符的顺序代表层之间的顺序。例如,EESS
有两个EOPA layer
,后面跟着两个SGAT layer
。embedding size
设置为96
,并使用残差连接。下表展示了实验结果。可以看到:SSEE
表现最差,因为它不能利用任何一种层的优点。SESE
和EESS
具有相似的性能,这表明交错两种层、或者将EOPA
层放在SGAT
层之前的好处。ESES
优于所有其它模型,证明该顺序是利用这两种层的优势的最有效方式。
超参数调优:这里我们研究
embedding size
和层数如何影响所提出方法的性能。由于篇幅有限,这里我们仅给出HR@20
的结果,如下图所示。可以看到:增加
embedding size
或层数并不总是会带来更好的性能。- 对于较小的数据集
Diginetica
,最佳的embedding size
为32
。当embedding size
超过该最佳值时,性能会迅速下降,因为模型过拟合。 - 对于另外两个较大的数据集,增加
embedding size
通常会提高性能,因为较大的embedding size
会增加模型的学习能力。
- 对于较小的数据集
如果
embedding size
小于最优值,那么随着层数的增加,模型性能先提高后下降。这是因为随着层数变大,模型的学习能力会增加。但是过多的层数也无济于事,因为会出现过度平滑的问题,即使模型没有过拟合。因此,堆叠更多的层并不是捕获远程依赖的有效方法,而采用替代方法(如
SGAT layer
)来提高模型捕获远程依赖的能力是有意义的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论