数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
十六、Time-LSTM [2017]
循环神经网络
Recurrent Neural Network: RNN
解决方案已经成为序列数据建模的state-of-the-art
方法。越来越多的工作试图在推荐系统recommender system: RS
领域找到RNN solution
。RNN
在推荐任务中表现良好的insight
是:在用户的动作序列中存在一些内在模式intrinsic pattern
,例如一旦一个人购买了羽毛球拍那么该用户往往在以后倾向于购买一些羽毛球,而RNN
在建模此类模式时已被证明表现极好。然而,推荐系统中的上述
RNN
解决方案都没有考虑用户相邻动作action
之间的时间间隔time interval
,而这些时间间隔对于捕获用户动作之间的关系很重要。例如,间隔时间很短的两个动作往往是相关的,而间隔时间很长的两个动作往往是针对不同的目标。因此,在建模用户行为时,利用时间信息来提高推荐性能非常重要。我们使用下图来展示时间间隔是什么、以及它如何使得推荐系统与语言模型等传统领域不同。具体而言,在语言模型中没有相邻词之间的间隔的概念(如 $ w_1 $ 和 $ w_2 $ 之间没有间隔),而在推荐系统中相邻动作之间存在时间间隔(如 $ i_1 $ 和 $ i_2 $ 之间的时间间隔 $ \Delta t_1 $ )。传统的RNN
架构擅长对下图(a)
中的序列数据sequential data
的顺序信息order information
进行建模,但是无法很好地对下图(b)
中的时间间隔进行建模。因此,需要提出新的模型来解决这个问题。人们最近提出的一种模型,即
Phased LSTM
,该模型试图通过向LSTM
添加一个time gate
来建模时间信息。在这个模型中,时间戳timestamp
是time gate
的输入,其中time gate
控制了cell sate, hidden state
的更新从而控制最终输出。同时,仅使用处于模型激活状态model’s active state
的样本,导致训练期间的稀疏更新sparse update
。因此,Phased LSTM
在训练阶段可以获得相当快的学习收敛速度。然而,有一些挑战使得Phased LSTM
难以成为最适合推荐任务的方法。首先,
Phased LSTM
对时间戳进行建模。时间戳是单个动作的特征,而不是两个动作之间的时间间隔。因此,Phased LSTM
可能无法正确建模动作之间的关系。其次,在大多数推荐系统中,用户的行为数据通常非常稀疏,而
Phased LSTM
会忽略用户在非激活状态inactive state
下的行为,无法充分利用行为信息进行推荐。第三,之前的研究已经指出,用户的短期兴趣和长期兴趣对于推荐都非常重要,但传统的
RNN
架构(包括Phased LSTM
)并没有旨在同时区分和同时利用这两种兴趣。在这里:- 短期兴趣意味着,推荐的
item
应该取决于最近消费的item
。例如,如果用户刚买了一台尼康相机,那么该用户很可能在不久的将来会购买存储卡、镜头、保护套。 - 长期兴趣是指被推荐的
item
也应该受到用户历史行为的影响,其中历史行为反映了用户的一般兴趣general interest
。
- 短期兴趣意味着,推荐的
为了应对上述挑战,论文
《What to Do Next: Modeling User Behaviors by Time-LSTM》
提出了具有三个版本的Time-LSTM
来建模用户在推荐系统中的序列动作sequential action
。Time-LSTM
中的time gate
建模动作的时间间隔,从而捕获动作之间的关系。第一个版本的
Time-LSTM
只有一个time gate
,这个time gate
利用时间间隔来同时捕获短期兴趣和长期兴趣。第二个版本的
Time-LSTM
有两个time gate
。- 第一个
time gate
旨在利用时间间隔来捕获当前item recommendation
的短期兴趣。 - 第二个
time gate
是保存时间间隔,以便建模长期兴趣用于之后的推荐。
- 第一个
第三个版本的
Time-LSTM
使用coupled input and forget gates
减少参数数量,这使得模型更加简洁。
具有这些
time gate
的Time-LSTM
可以很好地同时捕获用户的短期兴趣和长期兴趣,从而提高推荐性能。此外,Time-LSTM
没有忽略动作的非激活状态,因此与Phased LSTM
相比,它可以更好地利用行为信息。论文的实验结果证明了Time-LSTM
的有效性。本文的贡献如下:
所提出的模型
Time-LSTM
为LSTM
配备了精心设计的time gate
,因此它不仅擅长建模序列数据中的顺序信息,还可以很好地捕获对象之间的时间间隔。这是一个一般general
的思想(不限于推荐系统),可以开发Time-LSTM
的其它变体来建模其它任务中event-based
的序列数据。请注意,与考虑时间戳并可能隐式捕获间隔信息的
Phased LSTM
不同,论文显式地建模时间间隔。此外,与Phased LSTM
相比,Time-LSTM
利用了更多的样本。提出了三个版本的
Time-LSTM
。与现有的RNN
解决方案相比,这些Time-LSTM
版本可以更好地同时捕获用户的短期兴趣和长期兴趣,从而提高推荐性能。所提出的模型在两个真实世界的数据集上进行了评估,实验结果表明使用
Time-LSTM
的推荐方法优于传统方法。
相关工作:
LSTM
及其变体:LSTM
:LSTM
最常用的更新方程如下:其中:
$ \mathbf{\vec i}_m $ 为输入门input gate
, $ \mathbf{\vec f}_m $ 为遗忘门forget gate
, $ \mathbf{\vec o}_m $ 为输出门output gate
, $ \mathbf{\vec c}_m $ 为cell activation vector
, $ \mathbf{\vec h}_m $ 为hidden state vector
, $ \mathbf{\vec x}_m $ 为input feature vector
。 $ \sigma $ 为激活函数,其中 $ \sigma_i,\sigma_f,\sigma_o $ 通常为sigmoid
非线性激活函数,而 $ \sigma_c,\sigma_h $ 通常为tanh
非线性激活函数。 $ \mathbf W_x^{(\cdot)},\mathbf W_h^{(\cdot)},\mathbf{\vec b}^{(\cdot)},\mathbf {\vec w}_c^{(\cdot)} $ 均为待学习的参数,其中 $ \mathbf{\vec w}_c^{(\cdot)} $ 是可选的(目前主流的LSTM
的实现并未引入这一项)。 $ \odot $ 为逐元素乘积,即Hadamard product
。
coupled input and forget gates
:LSTM
的一种变体是使用coupled input and forget gates
,而不是单独决定要遗忘什么、以及什么新信息要被添加。这个变体丢弃了 $ \mathbf{\vec f}_m $forget gate
,并调整 $ \mathbf{\vec c}_m $ 的更新方程为:Phased LSTM
:Phased LSTM
是一种state-of-the-art
的RNN
架构,用于建模event-based
的序列数据。Phased LSTM
通过添加time gate
$ \mathbf{\vec k}_m $ 来扩展LSTM
。time gate
$ \mathbf{\vec k}_m $ 由三个参数来控制: $ \tau,r_\text{on},s $ ,其中: $ \tau $ 代表模型的总周期total period
时长, $ r_\text{on} $ 代表open period
和total period
的比值, $ s $ 代表phase shift
。 $ \tau,r_\text{on},s $ 都是通过训练来学到的。time gate
$ \mathbf{\vec k}_m $ 正式定义为:其中:
$ t_m $ 为时间戳, $ \phi_m $ 为一个辅助变量, $ \alpha $ 为leak rate
(在训练阶段取值几乎为零,在测试阶段直接设为零)。leak rate
$ \alpha $ 类似于Leaky ReLU
,用于传播梯度信息。注意,这里的
$ k_m $ 公式是一个标量,代表单个特征维度的time gate
。考虑到通常有多个特征维度,因此time gate
是个向量。time gate
$ k_m $ 有三个phases
:在第一个phase
$ k_m $ 从0
上升到1
,在第二个phase
$ k_m $ 从1
下降到0
(前两个phase
,模型为激活状态),在第三个phase
$ k_m $ 几乎为零(第三个phase
,模型为非激活状态inactive state
)。仅在time gate
激活状态下才更新 $ \mathbf{\vec c}_m $ 和 $ \mathbf{\vec h}_m $ ,因此Phased LSTM
的cell state
和hidden state
更新方程为:由于设置了
inactive state
,Phased LSTM
在应用于推荐系统时无法充分利用用户的动作。
推荐系统中的
RNN
解决方案:《Session-based recommendations with recurrent neural networks》
在old sessions
中对item-ID
的one-hot representation
训练了带ranking loss
的RNN
。然后,训练好的RNN
用于在新的user session
上提供推荐。《Parallel recurrent neural network architectures for feature-rich session-based recommendations》
是《Session-based recommendations with recurrent neural networks》
的扩展,它提出了两项技术(数据增强、以及一种考虑输入数据分布变化的方法)来提高模型的性能。此外,它考虑了一个稍微不同的setting
,其中存在item
的丰富特征。它引入了parallel RNN
架构来建模clicks
以及item
特征。《A dynamic recurrent model for next basket recommendation》
为next-basket recommendation
设计了一种RNN
方法。
在本文中,我们探索了在推荐系统社区中具有更常见
setting
的RNN
解决方案:我们知道user id
,但是不知道session
信息。此外,前述方法不考虑时间间隔,而我们在LSTM
中添加time gate
,可以利用时间间隔来推高推荐性能。短期兴趣和长期兴趣:
- 推荐系统中的大多数现有算法,如
Bayesian Personalized Ranking: BPR
、矩阵分解matrix factorization
、张量模型tensor models
,聚焦于建模用户的长期兴趣。 《Personalized news recommendation based on click behavior》
通过content-based
方法来适配adapt
一种协同过滤方法collaborative filtering
从而挖掘用户的当前兴趣。- 一些方法应用协同过滤和关联规则
association rule
来match
用户最近的行为。 《Adaptation and evaluation of recommendations for short-term shopping goals》
提出用户的短期兴趣和长期兴趣在在线购物场景中都很重要,并量化了几种组合策略combining strategy
。- 半马尔可夫过程
Semi-Markov Process: SMP
和马尔可夫更新过程Markov Renewal Process: MRP
还旨在建模具有时间间隔的序列过程sequential process
。然而,由于SMP
和MRP
的马尔科夫特性,它们无法捕获在我们任务中的长期兴趣。
- 推荐系统中的大多数现有算法,如
16.1 模型
令
$ \mathcal U=\{u_1,u_2,\cdots\} $ 为用户集合, $ \mathcal I=\{i_1,i_2,\cdots\} $ 为item
集合。对每个用户 $ u $ ,该用户的消费历史记做 $ \mathcal H^u:=\left[\left(i_1^u,t_1^u\right),\left(i_2^u,t_2^u\right),\cdots,\left(i_{n_u}^u,t_{n_u}^u\right)\right] $ ,其中 $ \left(i_m^u,t_m^u\right) $ 表示用户 $ u $ 在时刻 $ t_m^u $ 消费了该用户的第 $ m $ 个item
。我们的任务是在给定用户
$ u_p $ 和给定时刻 $ t_q $ 的条件下,提供一个推荐列表 $ \mathcal I_l\sube\mathcal I $ 。我们通过两种方法使得
LSTM
适配adapt
我们的任务:第一种方法是,我们仅记录
item
的顺序,而不考虑时间信息。因此在我们的任务中,LSTM
更新方程中的 $ \mathbf{\vec x}_m $ 就是 $ i_m^u $ (经过one-hot
)。这也是大多数现有方法的做法。
第二种方法是,考虑时间信息。我们首先将
$ \mathcal H^u $ 转换为:那么在我们的任务中,
LSTM
更新方程中的 $ \mathbf{\vec x}_m $ 就等价于 $ \left(i_m^u,t_{m+1}^u - t_m^u\right) $ 。这里我们对 $ i_m^u $ 采用one-hot representation
,对 $ t_{m+1}^u-t_m^u $ 使用一维的实数表示。也可以对
$ \left(t_{m+1}^u - t_m^u\right) $ 进行离散化,如按照day/week/month
等离散化,然后转换为embedding
。这里用下一个时间戳减去当前时间戳,而不是当前时间戳减去上一个时间戳,是因为我们想捕获当前消费的
item
对未来的影响。
为了适配
LSTM
及其所有变体,模型的输出是由 $ \mathbf{\vec h}_m $ 计算的所有item
的概率分布。损失函数基于模型的输出和 $ i^u_{m+1} $ 。对于
Phased LSTM
的适配,在我们的任务中, $ \mathbf{\vec x}_m $ 等价于 $ i_m^u $ (使用one-hot representation
),time gate
中的 $ t_m $ 等价于 $ t^u_{m+1} $ ,即 $ \phi_m = \frac{(t_{m+1}^u-s)\text{ mod }\tau}{\tau} $ 。当将
LSTM
及其变体应用于推荐系统时: $ \mathbf{\vec x}_m $ 包含用户消费的last item
的信息。由于这是用户最近most recent
的动作,我们可以利用 $ \mathbf{\vec x}_m $ 来了解用户当前的短期兴趣。- 另一方面,
$ \mathbf{\vec c}_{m-1} $ 包含了用户之前行为previous actions
的信息,因此 $ \mathbf{\vec c}_{m-1} $ 反映了用户的长期兴趣。
然而,
$ \mathbf{\vec x}_m $ 究竟在多大程度上反映了用户当前的短期兴趣,这在不同情况下有所不同。例如,如果 $ \mathbf{\vec x}_m $ 是很久以前消费的,那么就很难反映当前的消费目标consuming goal
。在Time-LSTM
中,我们使用time-gate
来控制last consumed item
$ \mathbf{\vec x}_m $ 对当前推荐的影响。此外,这些
time gate
有助于将时间间隔存储在 $ \mathbf{\vec c}_m,\mathbf{\vec c}_{m+1},\cdots $ 中,这反映了用户在后续推荐later recommendation
中的长期兴趣。因此,在建模用户的长期兴趣时,不仅要考虑用户以前消费过的item
,还要考虑相应的时间间隔。我们设计了三个版本的Time-LSTM
,如下图所示。在
attention-based
模型(如STAMP
中),是否可以将 $ \mathbf{\vec x}_m $ 和时间间隔同时作为短期兴趣网络的输入,从而捕获last item
对当前推荐的影响?
16.1.1 Time-LSTM 1
第一个版本的
Time-LSTM
添加了一个time gate
$ \mathbf{\vec T}_m $ 。基于LSTM
的更新方程,我们添加了一个time gate
的更新,同时调整了 $ \mathbf{\vec c}_m $ 和 $ \mathbf{\vec o}_m $ 的更新:其中:
$ \Delta t_m \in \mathbb R^1 $ 为时间间隔, $ \sigma_{\Delta t}(\cdot) $ 为一个sigmoid
函数, $ \mathbf{\vec T}_m $ 为time gate
。 $ \mathbf W_t^{(t)},\mathbf W_t^{(o)}\in \mathbb R^{d\times 1} $ 为时间相关的、待学习的参数。
可以看到,
time gate
$ \mathbf{\vec T}_m $ 在两个方面有帮助:- 一方面,
$ \sigma_c\left(\mathbf W^{(c)}_x\mathbf{\vec x}_m + \mathbf W^{(c)}_h\mathbf{\vec h}_{m-1} + \mathbf{\vec b}^{(c)}\right) $ 不仅被input gate
$ \mathbf{\vec i}_m $ 所过滤,还被time gate
$ \mathbf{\vec T}_m $ 所过滤。所以, $ \mathbf{\vec T}_m $ 可以控制 $ \mathbf{\vec x}_m $ 对当前推荐的影响。 - 另一方面,
$ \Delta t_m $ 首先被存入 $ \mathbf{\vec T}_m $ ,然后被传递到 $ \mathbf{\vec c}_m $ ,接着被传递到 $ \mathbf{\vec c}_{m+1},\mathbf{\vec c}_{m+2},\cdots $ 。因此, $ \mathbf{\vec T}_m $ 有助于存储 $ \Delta t_m $ 从而为后续推荐later recommendation
来建模用户的长期兴趣 $ (\mathbf{\vec c}_m,\mathbf{\vec c}_{m+1},\cdots) $ 。
注意,我们能够以类似的方式将
$ \mathbf{\vec T}_m $ 推广到其它RNN
架构,如GRU
。- 一方面,
$ \mathbf{\vec T}_m $ 完全从数据中学习。但是,作为先验知识,我们知道,给定一个last consumed item
,如果它是非常近期消费more recently consumed
的,则这个item
应该对当前推荐有更大的影响。我们希望将这些先验知识融入到time gate
的设计中。
16.1.2 Time-LSTM 2
第二个版本的
Time-LSTM
添加了两个time gate
$ \mathbf{\overrightarrow {T1}}_m, \mathbf{\overrightarrow {T2}}_m $ : $ \mathbf{\overrightarrow {T1}}_m $ 控制了last consumed item
对当前item recommendation
的影响。- 而
$ \mathbf{\overrightarrow {T2}}_m $ 存储了时间间隔来建模用户的长期兴趣用于后续推荐。
基于
LSTM
的更新方程,我们首先添加了两个time gate
的更新:然后我们调整
$ \mathbf{\vec c}_m,\mathbf{\vec o}_m,\mathbf{\vec h}_m $ 的更新方程为:其中:
$ \mathbf{\overrightarrow {T1}}_m $ 可以被认为是类似于input gate
$ \mathbf{\vec i}_m $ 的、作用于 $ \sigma_c\left(\mathbf W^{(c)}_x\mathbf{\vec x}_m + \mathbf W^{(c)}_h\mathbf{\vec h}_{m-1} + \mathbf{\vec b}^{(c)}\right) $ 上的另一个过滤器。我们使用一个新的cell state
$ \widetilde{\mathbf{\vec c}}_m $ 来存储过滤后的结果,这个结果之后被传递给output gate
$ \mathbf{\vec o}_m $ 、hidden state
$ \mathbf{\vec h}_m $ 并最终影响当前的item recommendation
。 $ \mathbf{\overrightarrow {T2}}_m $ 首先存储 $ \Delta t_m $ ,然后将 $ \Delta t_m $ 的信息传递给 $ \mathbf{\vec c}_m $ ,接着传递到 $ \mathbf{\vec c}_{m+1},\mathbf{\vec c}_{m+2},\cdots $ ,从而建模用户的长期兴趣用于后续推荐。
通过方程中的约束条件
$ \mathbf W^{(t1)}_t \le 0 $ , $ \mathbf{\overrightarrow {T1}}_m $ 可以利用先验知识来控制 $ \mathbf{\vec x}_m $ 对当前的item recommendation
的影响。具体而言:- 如果
$ \Delta t_m $ 较小,那么 $ \sigma_{\Delta t}\left(\mathbf W_t^{(t1)}\Delta t_m\right) $ 较大从而使得 $ \mathbf{\overrightarrow {T1}}_m $ 更大。根据 $ \widetilde{\mathbf{\vec c}}_m $ 的方程, $ \mathbf{\vec x}_m $ 将对当前的item recommendation
产生更大的影响。即, $ \mathbf{\vec x}_m $ 更好地反映了短期兴趣,因此我们增加了它的影响力。 - 另一方面,如果
$ \Delta t_m $ 较大,在类似的分析下, $ \mathbf{\vec x}_m $ 的影响较小,相应地 $ \mathbf{\vec c}_{m-1} $ 会更显著地影响当前的推荐。即,我们对短期兴趣更加不确定,因此我们增加了长期兴趣的影响。
然而,对于
$ \mathbf{\overrightarrow {T2}}_m $ ,在建模用户长期兴趣从而用于后续推荐方面,对 $ \mathbf W_t^{t2} $ 施加这种约束是没有意义的。这也解释了为什么我们在这个版本中设计了两个time gate
,即区分和定制化了用于当前推荐的角色role for current recommendation
(time gate
$ \mathbf{\overrightarrow {T1}}_m $ )、用于后续推荐的角色role for later recommendation
(time gate
$ \mathbf{\overrightarrow {T2}}_m $ )。- 如果
16.1.3 Time-LSTM 3
受
《Lstm: A search space odyssey》
的启发,第三个版本的Time-LSTM
使用了coupled input and forget gates
。具体而言,基于Time-LSTM 2
,我们移除了forgate gate
,并修改 $ \widetilde{\mathbf{\vec c}}_m,\ \mathbf{\vec c}_m $ 为:由于
$ \mathbf{\overrightarrow {T1}}_m $ 被视为一个过滤器(类似于 $ \mathbf{\vec i}_m $ ),因此在 $ \widetilde{\mathbf{\vec c}}_m $ 中我们用 $ \left(1-\mathbf{\vec i}_m\odot \mathbf{\overrightarrow {T1}}_m\right) $ 代替forget gate
。而 $ \mathbf{\overrightarrow {T2}}_m $ 用于存储时间间隔(类似于 $ \sigma_c\left(\mathbf W^{(c)}_x\mathbf{\vec x}_m + \mathbf W^{(c)}_h\mathbf{\vec h}_{m-1} + \mathbf{\vec b}^{(c)}\right) $ ) ,因此我们在 $ \mathbf{\vec c}_m $ 中使用 $ \left(1- \mathbf{\vec i}_m\right) $ 来代替forget gate
。
16.1.4 训练
在我们的任务中,我们使用
Time-LSTM
的方法类似于第二种LSTM
适配:首先将
$ \mathcal H^u $ 转换为:然后在
Time-LSTM
中, $ \mathbf{\vec x}_m $ 等价于 $ i_m^u $ (采用one-hot representation
),而 $ \Delta t_m $ 等价于 $ (t_{m+1}^u - t_m^u) $ 。
我们使用随机梯度下降
Stochastic Gradient Descent: SGD
的变体AdaGrad
来优化Time-LSTM
模型中的参数。由于方程中存在约束 $ \mathbf W^{(t1)}_t \le 0 $ ,因此我们使用投影算子projection operator
来处理它,即: 如果我们在训练迭代期间得到 $ \mathbf W^{(t1)}_t\gt 0 $ ,那么我们重置 $ \mathbf W^{(t1)}_t=0 $ 。在现实世界的
application
中,用户的新消费行为不断地被产生。因此,我们希望利用所有可用的消费历史(包括新生成的动作)进行推荐,即online learning setting
。非
online learning setting
策略是:在推断期间冻结模型,使用固定的参数进行推断。oneline learning setting
策略会根据新的消费行为来更新模型参数,使用新的参数进行推断。为了实现这一点,我们将
《Recurrent neural network based language model》
中的动态更新模型应用于我们的任务,如下所示:第一步,我们的模型根据用户现有的消费历史进行训练,直到收敛。
第二步,我们重复以下过程:当
$ n $ 个新的动作被生成之后,我们通过将AdaGrad
应用于用户更新后的消费历史从而更新previous parameters
一次。我们可以增大 $ n $ 的值从而提高online learning
的效率。也可以根据时间周期性地更新(如每隔
1
小时)。
我们可以周期性重复以上两个步骤。可以综合考虑推荐性能和计算成本来选择合适的周期。
16.2 实验
数据集:我们在
LastFM
和CiteULike
这两个数据集上进行评估。对于
LastFM
数据集,我们抽取元组<user id, song id, timestamp>
,其中每个元组代表用户user id
在 时刻timestamp
听歌曲song id
的动作。对于
CiteULike
数据集,一个用户在某个时刻注释一篇论文时可能有几条记录从而区分不同的tag
。我们将这些记录合并为单条记录并抽取元组<user id, papaer id, timestamp>
。注意,与
《Heterogeneous hypergraph embedding for document recommendation》
不同,我们没有将tag
用于推荐。
我们过了掉低频的用户和
item
。这些元组都按照user id
组织并根据timestamp
进行排序。下表展示了这些数据集的统计数据。对于每个数据集,我们随机选择
80%
的用户作为训练用户,并使用他们的元组进行训练。剩余的20%
用户作为测试用户。对于每个测试用户 $ u $ ,其有序元组 $ \mathcal T^u:=\left[\left(u,i_1^u,t_1^u\right),\left(u,i_2^u,t_2^u\right),\cdots,\left(u,i_{n^\prime_u}^u,t_{n^\prime_u}^u\right)\right] $ 将产生 $ n_u^\prime - 1 $ 个test case
,其中第 $ k $ 个test case
是在给定 $ u $ 的消费历史 $ \left[\left(i_1^u,t_1^u\right),\left(i_2^u,t_2^u\right),\cdots,\left(i_k^u,t_k^u\right)\right] $ 的条件下在时刻 $ t_{k+1}^u $ 执行推荐,并且时刻 $ t_{k+1}^u $ 的ground truth
为 $ i_{k+1}^u $ 。baseline
方法:CoOccur+BPR
:这是《Adaptation and evaluation of recommendations for short-term shopping goals》
中提出的一种组合策略,其中CoOccur
是为了捕获短期兴趣,而BPR
是为了捕获长期兴趣。具体而言,
CoOccur
根据item
在user session
中共现co-occurring
的条件概率对item
进行排序(关联规则)。如果推荐列表尚未填满,则根据BPR
的推荐继续填充推荐列表。我们不使用原始论文中的
FeatureMatching
和RecentlyViewed
。原因是:FeatureMatching
需要item
的属性信息,这在我们的任务中是不可用的。RecentlyViewed
只是推荐最近查看过的item
,然而大多数情况下,我们希望推荐系统为我们提供那些我们忽略ignore
的、但是仍然喜欢的item
。因为即使没有推荐系统的帮助,我们仍然可以自己找到我们熟悉的item
(例如我们最近浏览过的item
、或者最近消费过的item
)。
该方法需要
session
信息。我们使用一种常用的方法,即timeout
,来识别用户消费历史中的session
。如果两个动作的间隔时间超过了指定的阈值,则认为它们属于不同的
session
;否则属于相同的session
。Session-RNN
:《Session-based recommendations with recurrent neural networks》
使用RNN
在session-based
推荐中基于session
中的item
来捕获短期兴趣。该方法不考虑长期兴趣。session
信息的抽取如CoOccur + BPR
中所述。我们使用该方法的公开可用的python
实现。Session-RNN
虽然是序列模型(类似于LSTM
),但是它仅考虑当前session
的信息而不是历史所有item
的信息,因此仅捕获短期兴趣。LSTM
:前文介绍的LSTM
的第一种适配方式。LSTM + time
:前文介绍的LSTM
的第二种适配方式。Phased LSTM
:前文介绍的Phased LSTM
的适配。我们并没有对比
《A dynamic recurrent model for next basket recommendation》
,因为该方法的setting
不同于我们的方法,并且该方法的某些操作(如池化)无法应用于我们的方法。
前文介绍的
online learning setting
应用于LSTM
及其变体(包括Phased LSTM
和Time-LSTM
),其中训练training users
的元组用于训练step one
的模型。类似的更新策略应用于CoOccur + BPR
和Session-RNN
以确保公平地比较。LSTM
及其变体(包括Phased LSTM
和Time-LSTM
)的unit
数量设置为512
。所有方法中的其它超参数都通过交叉验证进行调优,或者按照原始论文进行设置。评估指标:每个
target item
$ i_g $ (ground truth
)与100
个其它随机item
进行组合。然后推荐算法对这101
个item
进行排名,top 10
个item
构成推荐列表recommendation list
。Recall@10
:Recall@10
的定义为:其中:
$ n_\text{testcase} $ 是所有test case
的数量, $ n_\text{hit} $ 是满足 $ i_g $ 位于推荐列表的test case
的数量。MRR@10(Mean Reciprocal Rank)
:这是 $ i_g $ 在推荐列表中排名倒数reciprocal rank
的均值。如果 $ i_g $ 的排名落后于10
,则排名倒数置为零。MRR@10
考虑item
的排名。
每个指标评估
10
次并取均值。实验结果如下表所示:
Time-LSTM
模型通常优于其它baseline
。Time-LSTM 2
和Time-LSTM 3
的性能优于Time-LSTM 1
,这证明了使用两个time gate
而不是一个time gate
的有效性。T1m=1
和T2m=1
分别是我们将 $ \mathbf{\overrightarrow {T1}}_m $ 固定为1
、将 $ \mathbf{\overrightarrow {T2}}_m $ 固定为1
的结果。它们的性能比原始版本更差,这表明使用我们设计的T1m
来过滤输入、T2m
来存储时间间隔都可以提高性能。LSTM+time
在CiteULike
中的表现略逊于LSTM
,这可能是由于CiteULike
中的时间间隔通常很大(归一化之后,它的性能有所提高,但仍然比Time-LSTM
模型更差)。
Cold User
和Warm User
的性能:如果用户消费的item
很少,则我们认为用户是cold
的;否则我们认为用户是warm
的。由于篇幅有限,我们只在LastFM
中展示Recall@10
的结果。如下图所示,x
轴上的索引 $ k $ 代表第 $ k $ 个test case
。在给定training user
的所有动作、以及test user
的前 $ k $ 个动作的情况下,我们预测test user
的第 $ k+1 $ 个动作。图
(a)
表明Time-LSTM
对warm user
表现更好(较大的索引表明用户消费了更多的item
)。原因是 $ \mathbf{\vec c}_{m-1} $ 中包含的动作越多,则Time-LSTM
可以更好地建模长期兴趣用于推荐。对于
cold user
,Time-LSTM
的性能与Session-RNN
相当。这是因为尽管消费行为很少,但是Time-LSTM
仍然可以通过捕获短期兴趣来很好地执行推荐。图
(b)
中的性能优于(a)
,这证明了动态更新模型的有效性。对于warm user
而言,从(a)
到(b)
的性能提升更为显著,因为warm user
的模型更新次数要比cold user
更多。
单元数量
unit number
和效率:我们改变单元数量 $ d $ (即,隐层维度) 从而查看模型性能和训练时间如何变化。训练时间在一个GeForce GTX Titan Black GPU
上进行评估。限于篇幅,我们仅展示在LastFM
数据集上的Recall@10
、以及训练时间。如下图
(a)
所示,增加 $ d $ 可以提高Recall@10
。但是当 $ d\gt 128 $ 时,增益会减慢甚至恶化。另一方面,如下图
(b)
所示,增加 $ d $ 会增加训练时间。因此, $ d $ 在128
和512
之间比较合适。当
$ d $ 变化时,Time-LSTM 3
的训练时间总是比Time-LSTM 2
更少。原因是Time-LSTM 3
中的coupled input and forget gates
减少了参数数量,并加快了训练过程。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论