数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
六、NARM [2017]
《Session-based recommendations with recurrent neural networks》
使用GRU
来进行session-based
推荐。该模型将用户点击的第一个item
作为RNN
的初始输入,并据此生成推荐。然后用户可能会点击其中的一个推荐,然后将其输入RNN
,并根据之前的全部点击生成后续推荐。《Improved recurrent neural networks for sessionbased recommendations》
通过利用两种关键技术,即数据增强、以及一种考虑输入数据分布变化的方法。尽管上述所有RNN-based
方法都显示出对传统推荐方法的有效改进,但是它们仅考虑了用户在当前session
中的序列行为sequential behavior
,而没有强调用户在当前session
中的主要意图main purpose
。当用户不小心点击了错误的item
、或者用户由于好奇而被一些不相关的item
所吸引时,仅依赖于用户的序列行为是危险的。因此,论文《Neural Attentive Session-based Recommendation》
认为在session-based
推荐中应该考虑用户在当前session
中的序列行为和主要意图。假设用户想在网上购买一件衬衫。如下图所示,在浏览过程中,该用户倾向于点击一些款式相似的衬衫进行比较,同时该用户可能会偶然或出于好奇而点击一条西裤。之后,该用户一直在寻找合适的衬衫。
- 在这种情况下,如果我们仅考虑用户的序列行为,那么可能会向该用户推荐另一件衬衫、西裤、甚至一双鞋,因为许多用户在点击一些衬衫或西裤之后点击了鞋子,如下图
(a)
所示。 - 假设推荐器是一位经验丰富的人工购物向导,那么该向导可以推测该用户此时很可能购买一件短袖衬衫,因为用户的大部分点击
item
都与短袖衬衫相关。因此,该向导会更加关注用户点击过的短袖衬衫,并向该用户推荐其它类似的衬衫,如下图(b)
所示。
理想情况下,一个优秀的推荐器除了考虑用户的整个序列行为之外,还应该考虑用户的主要意图,这反映在当前
session
中一些相对重要的item
上。注意,一个session
中的序列行为和主要意图是互补的,因为我们并不能总是从session
中推测出用户的主要意图,例如当session
太短、或者当用户仅仅是漫无目的地点击item
时。为了解决上述问题,论文
《Neural Attentive Session-based Recommendation》
提出了一种新颖的神经网络框架,即神经注意力推荐机Neural Attentive Recommendation Machine: NARM
。具体而言,论文探索了一种具有注意力机制的混合编码器,从而对用户的序列行为进行建模并捕获用户在当前session
的主要意图,稍后将它们组合为统一的session representation
。通过这种item-level
的注意力机制,NARM
学会了以不同的方式关注越来越重要的item
。然后,论文使用基于统一的session representation
的bi-linear matching scheme
来计算每个候选item
的推荐分。NARM
通过联合学习item representation
、session representation
、以及它们之间的matching
来训练。论文主要贡献:
- 提出了一种新颖的
NARM
模型,该模型同时考虑用户在当前session
中的序列行为和主要意图,并使用bi-linear matching scheme
来计算推荐分。 - 应用注意力机制提取用户在当前
session
中的主要意图。 - 对两个
benchmark
数据集进行了广泛的实验,结果表明:NARM
在这两个数据集上的召回率和MRR
均优于state-of-the-art
的baseline
。此外,NARM
在long session
上取得了更好的性能,这证明了NARM
在同时建模用户序列行为和主要意图方面的优势。
- 在这种情况下,如果我们仅考虑用户的序列行为,那么可能会向该用户推荐另一件衬衫、西裤、甚至一双鞋,因为许多用户在点击一些衬衫或西裤之后点击了鞋子,如下图
相关工作:
session-based
推荐是基于隐式反馈的推荐系统的典型application
,其中没有显式的偏好(如,评分),而只有positive
观察(如,点击)可用。我们跟踪用户在一段时间内的positive
观察从而获得序列形式的数据。传统方法:通常有两种典型的建模范式,即通用推荐器
general recommender
、序列推荐器sequential recommender
。- 通用推荐器:通用推荐器主要是基于
item-to-item
的推荐方法。在这个setting
中,item-to-item
的相似性矩阵是根据可用的session
数据预先计算的。在session
中经常一起点击(即共现)的item
之间被认为是相似的。尽管这些方法已被证明是有效的并且被广泛采用,但是它们仅考虑了session
的最近一次点击,而忽略了整个点击序列的信息。 - 序列推荐器:序列推荐器基于马尔科夫链,它通过在给定最近一个动作的情况下预测用户的
next action
从而利用序列数据。在基于session
的推荐任务中应用马尔科夫链的一个主要问题是:当试图在所有item
上包含所有可能的、潜在的用户行为序列时,状态空间很快变得难以管理。
- 通用推荐器:通用推荐器主要是基于
基于深度学习的方法:神经网络推荐器
neural network recommender
主要关注经典的协同过滤user-item
的setting
。《Restricted boltzmann machines for collaborative filtering》
首先提出使用Restricted BoltzmannMachines: RBM
进行协同过滤。《Learning hierarchical representation model for nextbasket recommendation》
介绍了基于encoder-decoder
机制的、next basket recommendation
的hierarchical representation
模型。- 最近,
《Session-based recommendations with recurrent neural networks》
将RNN
应用于session-based
推荐,并实现了对传统方法的显著提升。 《Improved recurrent neural networks for session-based recommendations》
进一步研究了RNN
在session-based
推荐中的应用,他们提出了两种技术来提高模型的性能,即数据增强、以及一种考虑输入数据分布变化的方法。《Sequential click prediction for sponsored search with recurrent neural networks》
也使用RNN
来用于点击序列预测,他们考虑了历史的用户行为、以及每个用户和item
上的人工特征。
尽管越来越多关于
session-based
推荐的工作关注于RNN-based
方法,但是与他们不同,我们提出了一种新颖的神经注意力推荐模型,该模型结合了用户在当前session
中的序列行为和主要意图。据我们所知,目前还没有研究考虑到这一点(即,结合了当前session
中用户的序列行为和主要意图)。并且,我们首次将注意力机制应用于session-based
推荐。
6.1 模型
session-based
推荐:session-based
推荐任务是在给定用户的序列点击数据时,预测该用户下一步想点击什么。具体而言,令
$ [x_1,x_2,\cdots,x_n] $ 为一个click session
,其中 $ x_i $ 为被点击item
的编号。我们构建了一个模型 $ \mathcal M $ ,使得对于session
中任何给定的前导点击序列 $ \mathbf x =[x_1,x_2,\cdots,x_t] $ ,我们得到输出 $ \mathbf y = \mathcal M(\mathbf x) $ ,其中: $ 1\le t\le n $ , $ \mathbf y = [y_1,y_2,\cdots,y_m] $ 可以视为ranking list
, $ m $ 为所有item
集合的大小, $ y_i $ 表示第 $ i $ 个item
为next item
的概率(即,推荐分)。由于推荐器通常需要为用户提供多个推荐,因此我们为用户推荐ranking list
$ \mathbf y $ 中的top-k
个item
, $ 1\le k\le m $ 。在本文中,我们提出了一种改进的
neural encoder-decoder
架构来解决session-based
推荐问题,该架构被称作Neural Attentive Recommendation Machine: NARM
。NARM
的基本思想是:构建当前session
的hidden representation
,然后基于该representation
生成预测。如下图所示:编码器将输入的点击序列
$ \mathbf x=[x_1,x_2,\cdots,x_t] $ 转换为一组带注意力 $ \vec\alpha_t $ 的、高维的hidden representation
$ \mathbf h = \left[\mathbf{\vec h}_1,\mathbf{\vec h}_2,\cdots,\mathbf{\vec h}_t\right] $ ,其中 $ \vec\alpha_t $ 表示在时刻 $ t $ 各点击item
的注意力信号。 $ \vec \alpha_t $ 的作用是确定在时刻 $ t $ 应该强调或忽略hidden representation
的哪一部分。应该注意的是, $ \vec\alpha_t $ 可以随时间固定,也可以在预测过程中动态变化。在动态的setting
中, $ \vec \alpha_t $ 可以是hidden representation
或input item embedding
的函数。我们在模型中采用动态的setting
。然后这组高维的
hidden representation
被馈入session feature generator
从而构建当前session
在时刻 $ t $ 的representation
,记做 $ \mathbf{\vec c}_t $ 。时刻
$ t $ 的session representation
$ \mathbf{\vec c}_t $ 被馈入解码器。具体而言, $ \mathbf{\vec c}_t $ 由矩阵 $ \mathbf U $ 进行变换,经过激活函数(如softmax
激活函数)之后生成ranking list
$ \mathbf y = [y_1,y_2,\cdots,y_m] $ 。
我们工作的基本思想是:学习一个同时考虑用户在当前
session
中的序列行为和主要意图的推荐模型。接下来:- 我们首先描述
NARM
中的全局编码器,它用于建模用户的序列行为。 - 然后我们介绍了局部编码器,它用于捕获用户在当前
session
中的主要意图。 - 最后我们展示了
NARM
,它结合了全局编码器和局部编码器,并使用bilinear matching scheme
来计算每个候选item
的推荐分。
全局编码器
Global Encoder
:在全局编码器中,输入是整个先前previous
的点击,输出是用户在当前session
中的序列行为的feature
。输入和输出都是高维的representation
向量。下图
(a)
展示了NARM
中全局编码器的示意图。我们使用GRU
单元的RNN
而不是标准的RNN
,因为《Session-based recommendations with recurrent neural networks》
证明了GRU
单元在session-based
推荐任务中可以胜过LSTM
单元。GRU
的公式为:其中:
$ \mathbf{\vec x}_t $ 是 $ x_t $ 的one-hot
向量作为input
, $ \mathbf{\vec h}_t $ 为时刻 $ t $ 的hidden state
, $ \widehat{\mathbf{\vec h}}_t $ 为时刻 $ t $ 候选的hidden state
。 $ \mathbf{\vec z}_t $ 为更新门update gate
, $ \mathbf{\vec r}_t $ 为复位门reset gate
, $ \odot $ 为逐元素乘法。 $ \mathbf W_z,\mathbf U_z,\mathbf W,\mathbf U,\mathbf W_r,\mathbf U_r $ 为待学习的参数矩阵。
作为一个简单的
session feature generator
,我们使用final hidden state
$ \mathbf{\vec h}_t $ 作为用户序列行为的representation
:然而,这种全局编码器存在缺陷,例如,对整个序列行为的向量化的
summarization
通常很难捕获到当前用户的更精确的意图。简单地讲,序列行为中存在噪音,而
RNN
架构无法自动化地屏蔽噪音。局部编码器
Local Encoder
:局部编码器的架构类似于全局编码器,如下图(b)
所示。在局部编码器中,我们也采用GRU
单元的RNN
。为了捕获用户在当前session
的主要意图,我们引入了一个item-level
注意力机制,它允许解码器动态选择和线性组合输入序列的不同部分:其中加权因子
$ \vec\alpha_t=(\alpha_{t,1},\cdots,\alpha_{t,t})^\top $ 决定了在时刻 $ t $ 进行预测时应该强调或忽略输入序列的哪一部分 。而 $ \vec\alpha_t $ 又是hidden state
的函数:注意,在时刻
$ t $ 预测 $ t+1 $ 时刻(而不是 $ t $ 时刻)的next click
。基本上,加权因子
$ \alpha_{t,j} $ 对时刻 $ j $ 的input
和时刻 $ t $ 的input
之间的alignment
进行建模,因此可以将其视为特定的matching model
。在局部编码器中,函数 $ q(\cdot) $ 具体地计算final hidden state
$ \mathbf{\vec h}_t $ 与之前的hidden state
$ \mathbf{\vec h}_j $ 之间的相似度:其中:
$ \sigma(\cdot) $ 为一个激活函数(如sigmoid
激活函数),待学习的参数矩阵 $ \mathbf A_1 $ 和 $ \mathbf{\vec A}_2 $ 分别将 $ \mathbf{\vec h}_t $ 和 $ \mathbf{\vec h}_j $ 投影到共同的潜在空间中,待学习的参数向量 $ \mathbf{\vec v} $ 为attention
向量。这种局部编码器能够自适应地关注更重要的
item
从而捕获用户在当前session
中主要意图。NARM
模型:对于session-based
推荐任务,全局编码器summarize
了整个序列行为,而局部编码器自适应地选择当前session
中的重要item
来捕获用户的主要意图。我们推测,在当前session
中,序列行为representation
$ \mathbf{\vec h}_t^g $ 可以为捕获用户的主要意图提供有用的信息。因此,我们使用序列行为representation
$ \mathbf{\vec h}_t^g $ 和previous hidden state
$ \mathbf{\vec h}_j^l $ 来计算每个被点击item
的注意力权重。然后在每个时刻,将序列行为的feature
和用户意图feature
拼接起来作为extended representation
。如下图所示,我们可以看到
summarization
$ \mathbf{\vec h}_t^g $ 被融合到 $ \mathbf{\vec c}_t $ 中,从而为NARM
提供序列行为represetnation
。需要注意的是:NARM
中的session feature generator
在全局编码器和局部编码器中调用不同的编码机制。具体而言:全局编码器的final hidden state
$ \mathbf{\vec h}_t^g $ 所起的作用与局部编码器的final hidden state
$ \mathbf{\vec h}_t^l $ 不同,前者负责对整个序列行为进行编码,后者用于计算与previous hidden state
的注意力权重。通过这种混合编码方案,用户在当前
session
中的序列行为和主要意图都可以建模为一个统一的representation
$ \mathbf{\vec c}_t $ ,它是 $ \mathbf{\vec c}_t^g $ 和 $ \mathbf{\vec c}_t^l $ 的拼接:其中
$ \cdot||\cdot $ 表示向量拼接。注意,这里注意力权重
$ \alpha_{t,j} = q\left(\mathbf{\vec h}_t^g, \mathbf{\vec h}_j^l\right) $ ,使用的是全局编码器的final hidden state
$ \mathbf{\vec h}_t^g $ ,而不是局部编码器的final hidden state
$ \mathbf{\vec h}_t^l $ 。为什么这么做?论文没有讲原因。下图给出
NARM
中采用的解码机制的示意图。通常,标准的RNN
使用全连接层进行解码,但是使用全连接层意味着该层待学习的参数个数是 $ d_H\times m $ ,其中 $ d_H $ 为session represention
$ \mathbf{\vec c}_t $ 的维度, $ m $ 为预测的候选item
的数量。因此我们必须预留很大的空间来存储这些参数。尽管有一些方法可以减少参数,例如hierarchical softmax layer
、随机负采样negative sampling
,但是它们并不是我们模型的最佳选择。我们提出一种替代的
bi-linear
解码方案,它不仅减少了参数的数量,而且提高了NARM
的性能。具体而言,我们使用一个bi-linear
相似度函数来计算当前session
的representation
和每个候选item
的embedding
的相似度得分 $ S_i $ :其中:
$ \mathbf B\in \mathbb R^{d_I\times d_H} $ 为一个参数矩阵, $ d_I $ 为item embedding
的 维度, $ \text{emb}_i $ 为第 $ i $ 个item
的embedding
。然后将每个
item
的相似度得分输入到一个softmax layer
,从而获得该item
接下来会出现的概率。通过使用这种bi-linear decoder
,我们将参数数量从 $ d_H\times m $ 降低到 $ d_I\times d_H $ ,其中 $ d_I $ 通常远小于 $ m $ 。此外,实验结果表明,使用这种bi-linear decoder
可以提高NARM
的性能。该方法在训练时仍然需要计算
softmax
,因此计算复杂度并未降低。但是,该方法降低了参数规模,并且在推断时只需要根据 $ \mathbf B\mathbf{\vec c}_t $ 来检索最近邻的item
即可。为了学习模型的参数,我们没有使用
《Session-based recommendations with recurrent neural networks》
中提出的训练过程,其中模型以session-parallel
、sequence-to-sequence
的方式进行训练。相反,为了适应局部编码器中的注意力机制,NARM
分别处理每个序列 $ [x_1,x_2,\cdots,x_t] $ 。我们的模型采用交叉熵损失,并使用标准的mini-batch
随机梯度下降进行训练:其中:
$ \mathbf q=[q_1,\cdots,q_m] $ 是预测的概率分布, $ \mathbf p=[p_1,\cdots,p_m] $ 是真实的分布。最后,我们采用固定数量的时间步的
Back-Propagation Through Time: BPTT
方法来训练NARM
。未来工作:
- 考虑
item
的属性,如价格、类目。 - 考虑
nearest neighbor session
,以及考虑不同neighbor session
的重要性。 - 用注意力机制探索当前
session
中,不同属性的重要性。
- 考虑
6.2 实验
数据集:
YOOCHOOSE
数据集:RecSys Challenge 2015
发布的公开数据集,它包含电商网站上的click-stream
。过滤掉长度为1
的session
、出现频次低于5
次的item
之后,数据集剩下7981580
个session
、37483
个item
。DIGINETICA
数据集:来自CIKM Cup 2016
。我们仅使用发布的交易数据,过滤掉长度为1
的session
、出现频次低于5
次的item
之后,数据集剩下204771
个session
、43097
个item
。
我们首先对两个数据集进行了一些预处理:
- 对于
YOOCHOOSE
数据集,我们使用下一天的session
进行测试,并从测试集中过滤掉未出现在训练集中的clicked item
。 - 对于
DIGINETICA
数据集,我们使用下一周的session
进行测试,并从测试集中过滤掉未出现在训练集中的clicked item
。
由于我们没有以
session-parallel
的方式训练NARM
,所以序列拆分预处理是必要的。在YOOCHOOSE
和DIGINETICA
这两个数据集上,对于输入session
$ [x_1,x_2,\cdots,x_n] $ ,我们生成了序列和相应的label
$ \{([x_1],x_2),([x_1,x_2],x_3),\cdots,([x_1,x_2,\cdots,x_{n-1}],x_n)\} $ 用于训练。如果以
session-parallel
方式训练,那么就不需要拆分预处理。考虑到以下原因:
YOOCHOOSE
相当大。《Improved recurrent neural networks for sessionbased recommendations》
验证了推荐模型需要考虑随时间变化的用户行为。《Improved recurrent neural networks for sessionbased recommendations》
的实验结果表明,对整个数据集进行训练产生的结果相比对数据集的近期部分进行训练产生的结果稍差。
因此,我们按时间对
YOOCHOOSE
的训练序列进行了排序,并报告了我们的模型在最近1/64
和1/4
部分的训练序列上的效果。注意,测试集中的一些item
不会出现在训练集中,因为我们仅在近期的部分数据上训练了模型。三个数据集(即YOOCHOOSE 1/64
、YOOCHOOSE 1/4
、DIGINETICA
)的统计数据如下表所示。baseline
方法:我们对比了五种传统方法(POP, S-POP, Item-KNN, BPR-MF, FPMC
)以及两种RNN-based
模型(GRU-Rec, Improved GRU-Rec
)。POP
:流行度的predictor
,它总是推荐训练集中的流行item
。尽管简单,但是它通常是某些领域的强大baseline
。S-POP
:推荐当前session
中最流行的item
(而不是全局最流行的item
)。该baseline
在具有高重复度的领域中很强。Item-KNN
:基于item
相似性来推荐和当前item
最相似的item
。相似度定义为此外,我们还使用正则化从而避免冷门
item
的偶然发生导致的高度相似性。该
baseline
是实际系统中最常见的item-to-item
解决方案之一。尽管简单,它通常也是一个强大的baseline
。BPR-MF
:它通过SGD
优化pair-wise ranking
目标函数,是最常用的矩阵分解方法之一。矩阵分解无法直接应用于session-based
推荐,因为新session
没有预先计算的特征向量。然而,我们可以通过使用session
中出现的item
的特征向量的均值作为user
特征向量来克服这个问题。换句话讲,我们对next item
的特征向量与迄今为止session
中item
特征向量的相似性进行平均。FPMC
:它是next-basket recommendation
的state-of-the-art
的混合模型。为了使其适用于session-based
推荐,我们在计算推荐分时不考虑user latent representation
。GRU-Rec
:《Session-based recommendations with recurrent neural networks》
提出的模型,它利用session-parallel
的mini-batch
训练过程,并且还采用ranking-based
损失函数来学习模型。Improved GRU-Rec
:《Improved recurrent neural networks for sessionbased recommendations》
提出的模型,它采用两种技术(包括数据增强、以及一种考虑输入数据分布变化的方法)来提高GRU-Rec
的性能。
评估指标:
Recall@20
:目标item
位于推荐列表(top 20
推荐的item
)的数量占所有目标item
数量的比例。Recall@N
不考虑item
的实际排名(只需要目标item
位于top N
推荐分的推荐列表中),并且通常与点击率CTR
等其它指标有很好的相关性。MRR@20
:Mean Reciprocal Rank: MRR
是目标item
排名倒数reciprocal rank
的均值,如果排名大于20
则倒数排名为零。MRR
会考虑目标item
的排名,这在需要考虑推荐顺序的场景很有用。
实验配置:
NARM
的item embedding
为50
维,使用Adam
优化器,初始学习率为0.001
,mini-batch
的batch size = 512
。NARM
使用两个dropout layer
:- 第一个
dropout layer
位于item embedding layer
和GRU layer
之间,dropout rate = 25%
。 - 第二个
dropout layer
位于GRU layer
和bi-linear similarity layer
之间,dropout rate = 50%
。
- 第一个
NARM
使用time step
截断为19
的BPTT
,训练epoch
为30
,训练集的10%
数据作为验证集。NARM
使用单层GRU
,GRU
隐层维度为100
。模型是在
GeForce GTX TitanX GPU
上的Theano
中定义和训练的。
不同解码器的比较:我们在
NARM
上比较了全连接解码器和bi-linear
解码器,如下表所示。这里我们仅给出隐层维度为100
的结果,因为其它维度的结论相同。结论:- 在
Recall@20
指标上,使用bi-linear
解码器的性能有所提高,三个数据集的提升分别约为0.65%, 0.24%, 4.74%
(绝对值) 。 - 在
MRR@20
指标上,bi-linear
解码器在YOOCHOOSE 1/64
和YOOCHOOSE 1/4
数据集上稍差,但是在DIGINETICA
数据集上仍然显著优于全连接解码器。
对于
session-based
推荐任务,由于我们的setting
是一次性推荐top 20
的item
,因此我们认为recall
指标要比MRR
指标更重要。在接下来的实验中,NARM
采用bi-linear
解码器。- 在
和
baseline
的比较:所有方法的结果如下表所示。NARM
与best baseline
(即Improved GRU-Rec
)之间的更具体的比较如下图所示。结论:对于
YOOCHOOSE 1/4
数据集,由于我们使用session
中出现的item factor
的均值来代替user factor
,因此BPR-MF
不起作用。此外,由于我们在FPMC
中将每个session
视为一个用户,因此我们没有足够的内存来初始化它。这些问题表明传统的user-based
方法不再适用于session-based
推荐。总体而言,三种
RNN-based
方法始终优于传统的baseline
,这表明RNN-based
模型擅长处理session
中的序列信息。通过同时考虑用户的序列行为和主要意图,
NARM
在三个数据集上的Recall@20
指标上优于所有baseline
,并且在MRR@20
指标上可以优于大多数baseline
。以
DIGINETICA
数据集为例,与best baseline
(即Improved GRU-Rec
) 相比,NARM
在Recall@20
和MRR@20
指标上的相对提升分别约为7.98%
和9.70%
。可以看到,
NARM
和best baseline
相比,YOOCHOOSE 1/64
和YOOCHOOSE 1/4
数据集上的Recall@20
指标提升不如DIGINETICA
数据集的显著。此外,YOOCHOOSE 1/64
和YOOCHOOSE 1/4
数据集上这两个方法的MRR@20
指标非常接近。我们认为其中一个重要原因是:我们将
YOOCHOOSE
数据集拆分为1/64
和1/4
时,为了与Improved GRU-Rec
中的一致,我们没有从测试集中过滤掉不在新训练集(即,拆分后的训练集)中的clicked item
(因为这些clicked item
可能位于未拆分的训练集中)。相比之下,在DIGINETICA
数据集中,我们从测试集中过滤掉了这些不在训练集中的clicked item
,因此NARM
在Recall@20
和MRR@20
指标上都显著优于baseline
。
使用不同特征的影响:我们考察仅使用序列行为特征的
NARM
( $ \text{NARM}_\text{global} $ )、仅使用用户意图特征的NARM
( $ \text{NARM}_\text{local} $ )、以及同时使用这两种特征的NARM
( $ \text{NARM}_\text{hybrid} $ ) ,结果如下表所示。结论: $ \text{NARM}_\text{global} $ 和 $ \text{NARM}_\text{local} $ 仅使用单一特征,在三个数据集上均表现不佳。此外,它们在两个指标上的表现非常接近。这表明,仅考虑当前session
的序列行为、或用户意图,可能无法学到好的推荐模型。 $ \text{NARM}_\text{hybrid} $ 在三个数据集的不同隐层维度上的不同指标下均优于 $ \text{NARM}_\text{global} $ 和 $ \text{NARM}_\text{local} $ 。这表明,在session-based
推荐中同时考虑当前用户的序列行为和主要意图的优势。
$ \text{NARM}_\text{global} $ 和GRU-Rec
主要区别在于前者使用双线性解码器,以及前者采用交叉熵损失而后者采用pairwise ranking loss
,因此其效果应该和GRU-Rec
相差无几。但是结果发现 $ \text{NARM}_\text{global} $ 的效果要比GRU-Rec
高很多。论文并未解释其原因。不同
session
长度的影响:NARM
模型基于这样的假设:当用户在线浏览时,用户的点击行为频繁地围绕用户在当前session
中的主要意图。然而,当用户仅仅是点击少数几个item
时,我们很难捕获到用户的主要意图。因此,我们的NARM
模型应该只是擅长对长的session
进行建模。为了验证这一点,我们在
DIGINETICA
数据集上对不同长度的测试session
进行了比较,结果如下表所示。结论:NARM
通常在session
长度为4 ~ 17
之间时表现更好。这表明NARM
在长的session
中确实更准确地捕获了用户的主要意图。- 当
session
过长时,NARM
的性能提升有所下降。我们认为原因是,当session
过长时用户很可能漫无目的地点击某些item
,导致NARM
中的局部编码器无法捕获用户在当前session
中的主要意图。
可视化注意力权重:为了直观地说明注意力机制的作用,我们在下图中展示了一个例子。
session
实例是从DIGINETICA
数据集中随机选择的。颜色的深浅对应于 $ \alpha_{t,j} = q\left(\mathbf{\vec h}_t,\mathbf{\vec h}_j\right) $ 中给出的item
的重要性大小。结论:- 总体而言,很明显并不是所有的
item
都与next click
相关,而且当前session
中几乎所有的重要item
都是连续的。这意味着用户在session
中的意图确实是局部性的,这也是NARM
能够优于常规RNN-based
模型的原因之一。 - 最重要的
item
通常在session
结束附近的位置。这符合人们的浏览行为:用户很可能会点击该用户刚刚点击item
相关的其它item
。回想一下,常规RNN-based
模型能够对这一事实进行建模,因此它们可以在session-based
推荐中取得相当好的性能。 - 在某些情况下,最重要的
item
出现在session
的开始或中间(例如在session 7974
或session 4260
)。在这种情况下,我们相信NARM
可以比常规RNN-based
模型表现更好,因为注意力机制可以学到去更多地关注于更重要的item
,而不管这个item
位于session
中的什么位置。
- 总体而言,很明显并不是所有的
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论