数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
八、RRN [2017]
在推荐系统中,一种常见的方法是研究
Netflix
竞赛中介绍的问题形式:给定由用户、电影、时间戳、评分组成的元组所构成的数据集,目标是在给定用户、电影、时间戳的条件下预估评分。然后通过预估评分和实际评分的偏离deviation
来衡量预测的效果。这个公式很容易理解,并导致了许多非常成功的方法,如概率矩阵分解
Probabilistic Matrix Factorization: PMF
、基于最近邻的方法、聚类。此外,很容易定义适当的性能度量,只需要选择数据集的一个子集进行训练,并用剩余的数据用于测试。但是,当涉及数据中固有的时间方面
temporal aspect
和因果方面causal aspect
时,这些方法是存在不足。下面的例子更详细地说明了这一点:- 电影观念
Movie Perception
的变化:由于社会观念的变化,曾经被认为很糟糕的电影可能现在变得值得观看。为了适当地捕获这一点,电影属性的参数parameter
必须随时间变化从而跟踪到这种趋势。 - 季节性变化:虽然没有那么极端,但是人们对于浪漫喜剧、圣诞电影、夏季大片的欣赏相对而言是季节性
seasonal
的。而且,用户不太可能在夏天观看关于圣诞老人的电影。 - 用户兴趣:用户的偏好会随着时间而改变。这在在线社区中得到了很好的证实(
《No country for old members: User lifecycle and linguistic change in online communities》
),并且可以说也适用于在线消费。由于更成熟或生活方式的改变,用户对特定节目的兴趣可能会变化。任何这方面的变化都会使得现有的用户画像失去意义,但是很难显式地对所有这类变化进行建模。
除了需要建模时间演变
temporal evolution
之外,事后评估也违反了因果关系的基本要求。例如,假如知道用户将在未来一个月内对Pedro Almodfiovar
产生好感,那么就可以更容易地估计该用户对La Mala Educacifion
的看法。换句话讲,当我们使用未来评分来估计当前的review
时,我们在统计分析中违反了因果关系。这使得我们在benchmark
上报告的准确性无法作为有效评估,从而确定我们的系统能否在实践中运行良好。虽然Netflix prize
产生了一系列研究,但是评估不同模型的未来预测future prediction
受到训练数据和测试数据的混合分布mixed distribution
的阻碍,如下图所示。相反,通过显式建模画像动态profile dynamic
,我们可以根据当前趋势来预测未来的行为。下图为
Netflix
竞赛中的数据密度。注意,测试数据在近期的评分上的密度要大得多,而训练数据的评分密度要更为均匀。这说明竞赛中提出的问题更多的是利用事后诸葛亮的插值评分interpolating rating
(泄露了未来的评分来评估当前评分),而不是预测未来的用户行为。这段话的意思是说:对于真实世界的推荐,测试集不应该是随机选择的,而只能是未来预测
future prediction
。一个能够捕获推荐系统中固有的实际数据分布的模型,除了同时捕获用户集合和电影集合的评分交互之外,还需要能够同时建模每个用户和电影的时间动态
temporal dynamic
。这意味着使用潜在变量模型latent variable model
来推断控制用户行为和电影行为的、unobserved
的状态。下图所示为这类模型的一个例子,该模型与《Collaborative filtering with temporal dynamics》
提出的时间模型temporal model
之间的区别在于:temporal model
使用特定的参数化parametrization
来插值时间行为interpolate temporal behavior
。相反,前者使用非参数化模型
nonparametric model
,该模型能够通过学习固有的用户动态user dynamic
和电影动态movie dynamic
,从而将行为外推extrapolate
到未来。这使得该模型更适合true dynamic
,对实验者的统计建模技能要求更低。这段话的意思是:
temporal model
显式采用带时间戳的user parameter
、带时间戳的movie parameter
来建模user representation
和movie representation
,是transductive learning
,它无法应用到未见过的时间戳。- 而前者采用模型(如马尔科夫链模型)来建模
user representation
和movie representation
,它将时间戳作为模型输入,是inductive learning
,能够应用到见过的时间戳。
下图左侧为时间无关
time-independent
的推荐,用户parameter
和电影parameter
都是静态stationary
的。右侧为时间相关time-dependent
的推荐,用户模型和电影模型都遵循马尔科夫链。给定模型的整体结构,我们可以自由地为潜在变量
latent variable
设定一种特定类型的状态state
。流行的选择是假设一个离散的潜在状态(即离散的状态空间)。同样地,我们也可以求助于谱方法spectral method
或非参数估计nonparametric estimator
,如循环神经网络Recurrent Neural Network: RNN
。为了解决梯度消失问题,论文《Recurrent Recommender Networks》
使用LSTM
。论文
《Recurrent Recommender Networks》
的贡献如下:非线性
nonlinear
的、非参数化nonparametric
的推荐系统已被证明有些难以理解。具体而言,使用非线性函数来代替内积公式在论文的实验中仅显示有限的前景。据作者所知,这是第一篇以完全因果fully causal
的、整体integrated
的方式解决电影推荐的论文。也就是说,作者相信这是第一个试图捕获用户动态和电影动态的模型。此外,论文的模型是非参数nonparametric
的。这使得我们能够建模数据,而不必假设状态空间state space
的特定形式。Recurrent Recommender Network: RRN
非常简洁,因为模型仅学习动态dynamic
而不是状态state
。这是与经典的潜在变量模型latent variable model
的关键区别之一,其中潜在变量模型花了相当大的精力来用于估计潜在状态latent state
。在这个方面上,RRN
非常类似于《Autorec: Autoencoders meet collaborative filtering》
提出的神经自编码器neural autoencoder
。事实上可以将神经自编码器视为RRN
模型的一个特例。state
:即user representation
和movie representation
。实验表明,论文的模型优于所有其它模型。例如在现实场景中,作者尝试在给定数据的情况下估计未来的评分。实验表明,论文的模型能够非常准确地捕获外生动态
exogenous dynamic
和内生动态endogenous dynamic
。此外,论文证明该模型能够准确地预测用户偏好在未来的变化。外生动态:电影收到外界因素(如电影获得大奖)导致电影评分发生变化。内生动态:电影随着上映时间的增加从而导致评分发生变化。
- 电影观念
相关工作:
推荐系统:基础
basic
的推荐系统忽略时间信息temporal information
。这是一个合理的近似,特别是对于Netflix
竞赛,因为在大多数情况下,关于电影的意见opinion
和用户的意见不会发生太快、太剧烈的变化。Probabilistic Matrix Factorization: PMF
可能最流行的模型之一。PMF
尽管简单,但是它在评分预测方面取得了鲁棒的、强大的结果。我们提出的模型采用了与PMF
相同的分解来建模稳态效应stationary effect
。从这个意义上讲,我们的模型是PMF
的一个严格的泛化。TimeSVD++
是SVD++
矩阵分解算法的时间扩展temporal extension
。这里的关键创新是使用一个单独的模型来捕获时间动态,即允许数据中显式的时间偏差temporal bias
。这使得TimeSVD++
能够以整体的方式integrated fashion
来捕获由于评分label
的变化以及流行度popularity
的变化而导致的时间不均匀性temporal inhomogeneity
。注意,
TimeSVD++
的特征是手工设计的,依赖于对数据集的深入了解,这使得模型难以移植到新问题,如从电影推荐到音乐推荐或书籍推荐。其次,该模型显式地不估计未来的行为,因为
Netflix
比赛不需要估计未来的行为。相反,该模型仅仅在过去的observation
之间进行插值。相比之下,我们的模型不依赖于特征工程,并且能够在未看到未来的用户行为的情况下(看到未来的用户行为本来就是不切实际的)预测未来的评分。
可能与我们的方法最密切相关的是
AutoRec
,它是少数用于推荐的神经网络模型之一。AutoRec
将矩阵分解视为编码问题:找到用户活动user activity
的低维representation
,以便我们可以从该向量重构所有的用户评分。就评分预测而言,AutoRec
是迄今为止最好的神经网络模型之一,并在多个数据集上取得了state-of-the-art
的结果。
循环深度网络:下图描述的
graphical model
的关键挑战之一是:它要求我们根据observation
推断未来的状态,例如通过消息传递message passing
或粒子滤波particle filtering
(粒子滤波通过非参数化的蒙特卡洛模拟方法来实现递推贝叶斯滤波)。这是昂贵且困难的,因为我们需要将评分的mission model
与latent state
相匹配。换句话讲,将关于评分的信息feed back
到latent state
的唯一方法是通过likelihood
$ p\left(r_{i,j}\mid \mathbf{\vec u}_{i,t},\mathbf{\vec m}_{j,t}\right) $ 。实现这一点的常用策略是通过消息传递或粒子滤波,即通过序列的蒙特卡洛采样Sequential Monte Carlo sampling
。这种方法需要学习
$ \{\mathbf{\vec u}_{i,t}\},\{\mathbf{\vec m}_{j,t}\} $ 这些latent state
(作为模型的parameter
),这是昂贵且困难的。或者,我们可以简单地学习
mapping
作为非参数的状态更新的一部分,即通过Recurrent Neural Network: RNN
。关键思想是使用潜在变量自回归模型latent variable autoregressive model
,如下所示:其中:
$ z_t $ 为time step
$ t $ 的observation
, $ \mathbf{\vec z}_t $ 为observation
$ z_t $ 的representation
, $ \hat z_t $ 为time step
$ t $ 对应的估计值estimate
。 $ \mathbf{\vec h}_t $ 为time step
$ t $ 的latent state
。
所谓的 ”非参数“ 指的是
latent state
不是作为模型的parameter
来学习的,而是通过某个函数来生成的。通过函数来生成并更新latent state
,然后通过训练数据来学习这个函数,这就是论文的核心思想。上式给出了通用的函数形式,但是还可以引入非线性以及一些解决稳定性和梯度消失的工具。一个流行的选择是
Long Short-Term Memory: LSTM
,它捕获时间动态。我们将LSTM
作为协同过滤系统的building block
。 整体模型如下图所示。状态更新如下:其中:
$ \mathbf{\vec f}_t $ 为遗忘门forget gate
, $ \mathbf{\vec i}_t $ 为输入门input gate
, $ \mathbf{\vec o}_t $ 为输出门output gate
。 $ \left\{\mathbf W_h,\mathbf W_z,\mathbf{\vec b},\mathbf W_h^{(*)},\mathbf W_z^{(*)},\mathbf{\vec b}^{(*)}\right\} $ 为待学习的参数矩阵和参数向量。 $ \odot $ 为逐元素乘积, $ \sigma(\cdot) $ 为sigmoid
非线性激活函数。
LSTM
中有两种类型的非线性激活函数:- 用于遗忘门、输入门、输出门的
sigmoid
非线性激活函数:由于门控单元的性质,门的输出必须是0.0 ~ 1.0
之间。因此,如果要替换为新的非线性激活函数,则该激活函数的输出范围也必须满足0.0 ~ 1.0
之间。 - 用于
$ \hat{\mathbf{\vec h}}_t $ 和 $ \mathbf{\vec h}_t $ 的tanh
非线性激活函数:用于对输入数据进行非线性变换,因此也可以替换为relu
等其它非线性激活函数。但是对于RNN
网络需要注意梯度消失和梯度爆炸,这也是为什么通常选择tanh
非线性激活函数的原因。但是,也有论文和网上材料指出,通过仔细挑选合适的权重初始化(权重初始化为1
附近),那么relu
非线性激活函数的模型效果会更好。
为简单起见,在本文中我们使用
$ \mathbf{\vec h}_t = \text{LSTM}\left(\mathbf{\vec h}_{t-1},\mathbf{\vec z}_t\right) $ 来表示这些操作。注意,LSTM
不是唯一的选择,例如也可以选择GRU
(GRU
的计算成本更低且结果通常相似)。在本文中,我们使用LSTM
因为它稍微更通用。《Session-based recommendations with recurrent neural networks》
没有考虑个性化,也没有尝试建模user state transition
和item state transition
。
8.1 模型
我们使用
LSTM RNN
来捕获用户的时间依赖性temporal dependency
和电影的时间依赖性。通过这种方式,我们能够融合incorporate
过去的observation
并以整体的方式预测未来的轨迹。令用户
$ i $ 的latent state
为 $ \mathbf{\vec u}_i $ ,电影 $ j $ 的latent state
为 $ \mathbf{\vec m}_j $ 。为了处理时间动态temporal dynamic
,我们给两者赋予时间索引,即 $ \mathbf{\vec u}_{i,t} $ 和 $ \mathbf{\vec m}_{j,t} $ 。现在要做的就是定义latent state
的更新函数update function
。我们将更新函数定义为:其中:
$ \hat r_{i,j\mid t} $ 是用户 $ i $ 在电影 $ j $ 上的预测评分, $ r_{i,j\mid t} $ 是time step
$ t $ 上的实际评分。 $ \mathcal M $ 是所有电影的集合, $ |\mathcal M| $ 是所有电影的数量, $ \mathcal U $ 是所有用户的集合, $ |\mathcal U| $ 是所有用户的数量。- 函数
$ f(\cdot),g(\cdot),h(\cdot) $ 是待学习的函数,一旦学到之后就可以直接推断新的latent state
。
我们不是解决优化问题来找到
user parameter/ movie parameter
,而是解决优化问题来找到生成user parameter/movie parameter
的函数。这方面类似于深度自编码器,其中深度自编码器学习一个编码器函数来编码过去的评分。然而深度自编码器的目标是最小化重构误差,而这里的问题是最小化预测评分与真实评分之间的误差。
用户状态和电影状态:为简单起见,我们首先描述
user-state RNN
,因为movie-state RNN
也是以相同的方式来定义的。给定一个包含
$ |\mathcal M| $ 部电影的数据集,我们用 $ \mathbf{\vec x}_t\in \mathbb R^{|\mathcal M|} $ 表示给定用户在time step
$ t $ 的评分向量。如果用户在time step
$ t $ 对电影 $ j $ 的评分为 $ k $ ,则 $ x_{t,j}=k $ ,否则 $ x_{t,j} = 0 $ 。此外,我们定义 $ \tau_t $ 为time step
$ t $ 的wallclock
,并且使用 $ \mathbb I_\text{newbie} = 1 $ 来表示用户是否新用户。我们定义 $ \mathbf{\vec y}_t $ 为:其中:
$ \mathbf W_\text{embed} $ 是将source information
投影到embedding
空间中的、待学习的变换transformation
。注意:
- 由于评分序列的时间跨度很长,因此这里的
time step
可以按照天粒度、月粒度、甚至年粒度来进行。此时 $ \mathbf{\vec x}_t $ 表示在这个区间内,用户对所有电影的评分向量。这可以大大降低RNN
序列的长度,降低计算复杂度。粒度越长则越反应长期的趋势(短期趋势被抹平)。 - 这种线性投影的方式本质上是:将用户在
time step
$ t $ 区间内评分的电影embedding
进行sum
聚合。也可以进行self attention
聚合、max pooling
聚合等等其它非线性聚合。 $ \mathbb I_\text{newbie} $ 是embedding
的方式添加到 $ \mathbf{\vec y}_t $ 中的。 $ \mathbf{\vec y}_t $ 包含三个field
:评分向量field
、newbie field
、wallclock field
。这三个field
的投影结果直接拼接在一起。也可以采用更复杂的融合方式(如MLP
或者attention
)。
$ \mathbf{\vec y}_t $ 作为LSTM
在time step
$ t $ 的输入。也就是说,我们有以下模型:注意,如果在
time step
$ t $ 时用户没有对任何电影进行评分,那么该time step
(即no-rating step
)不应该包含在RNN
中,这可以节省计算。尽管如此,wallclock
的引入为模型提供了考虑no-rating step
所需的信息,并且额外捕获了诸如rating scale
变化、电影年龄之类的效果。rating scale
变化指的是,比如某个时刻之前的评分范围是1 ~ 5
分,之后的评分范围是1 ~ 10
分。为了区分不同的用户,我们添加了用户
$ i $ 的索引,即 $ \mathbf{\vec u}_{i,t} $ 。同样地,为了区分不同的电影,我们添加了电影 $ j $ 的索引,即 $ \mathbf{\vec m}_{j,t} $ 。- 由于评分序列的时间跨度很长,因此这里的
评分发射
rating emission
(即,评分函数):尽管用户状态和电影状态可以随时间变化,但是我们推测仍然存在一些静态分量stationary component
来编码固定属性,例如用户画像、用户的长期偏好、电影的题材。为了实现这一点,我们分别用固定的 $ \mathbf{\vec u}_i $ 和 $ \mathbf{\vec m}_j $ 来补充时变time-varying
的 $ \mathbf{\vec u}_{i,t} $ 和 $ \mathbf{\vec m}_{j,t} $ 。因此,我们认为评分函数同时是dynamic state
和stationary state
的函数,即:简而言之,标准的分解模型仅考虑了静态效应
stationary effect
,而我们使用LSTM
从而考虑了更长期的动态更新dynamic update
。这使得我们的模型成为矩阵分解matrix factorization
模型的严格超集strict superset
。这里通过
$ \mathbf W_\text{user} $ 和 $ \mathbf W_\text{modie} $ 将dynamic user state
和dynamic movie state
映射到公共的空间。另外,上式等价于经
dynamic state
和stationary state
拼接之后再内积,即:评分预测
rating prediction
:与传统的推荐系统不同,在预测时我们使用外推状态extrapolated state
(即通过LSTM
生成的state
)而不是估计状态estimated state
来进行评分预测。也就是说,我们将最新的observation
作为输入,更新状态,并根据更新后的状态进行预测。通过这种方式,我们自然会考虑到之前评分带来的因果关系。例如,我们能够解决享乐适应
hedonic adaptation
,它指的是在电影推荐的背景下,用户观看了一部令人满意的电影之后,用户对电影的满意度的level
会降低。对于令人失望的电影也是类似的。训练:模型的优化目标函数是找到合适的
parameter
从而产生最接近实际评分的预测,即:其中:
$ \theta $ 表示要学习的所有parameter
, $ \mathcal D_\text{train} $ 是训练集中观察到的(user, movie, timestamp)
元组的集合, $ R(\cdot) $ 表示正则化函数。虽然我们模型中的目标函数和
building block
都是相当标准的,但是朴素的反向传播无法轻易地解决这个问题。关键的挑战在于每个单独的评分都同时取决于user-state RNN
和movie-state RNN
。对于每个单独的评分,通过2
个序列的反向传播在计算上是很难进行的。我们可以通过仅考虑user-state RNN
的反向传播来稍微缓解这个问题,但是每个评分仍然取决于movie state
。反过来,我们也可以仅考虑movie-state RNN
,但是每个评分仍然取决于user state
。相反,我们提出了一种解决该问题的交替子空间下降策略
alternating subspace descent strategy
。也就是说,我们仍然考虑user-state RNN
的反向传播,但现在我们假设电影状态是固定的,因此不需要将梯度传播到这些电影序列中。然后我们交替更新用户序列和更新电影序列。这样,我们可以为每个用户(电影)执行一次标准的前向传播和反向传播。这种策略被称作子空间下降subspace descent
。
8.2 实验
数据集:
IMDB
数据集:包含1998
年7
月到2013
年9
月期间收集的140
万个评分。Netflix
数据集:包含1999
年11
月到2005
年12
月期间收集的1
亿个评分。
每个数据点是一个
(user id, item id, time stamp, rating)
元组,时间戳的粒度为1 day
。为了更好地理解我们模型的不同方面,我们在具有不同训练和测试周期的几个不同时间窗口上测试我们的模型。详细的数据统计如下表所示。注意,我们根据时间来拆分数据从而模拟实际情况:我们需要预测未来的评分(而不是对以前的评分插值
interpolate
)。测试期间的评分被平均拆分为验证集和测试集。配置:
我们发现即使使用非常少的参数,我们的模型也能够达到良好的准确性。
- 在以下的实验中,我们使用具有
40
个隐单元(即 $ \tilde{\mathbf{\vec u}}_i $ 的维度)、input embedding
维度40
维(即 $ \mathbf W_\text{embed} $ 的维度)、dynamic state
维度20
维(即 $ \mathbf{\vec u}_{t} $ 的维度)的单层LSTM
。 - 我们分别对
Netflix
和IMDB
数据集使用20
维和160
维的stationary latent factor
。
- 在以下的实验中,我们使用具有
我们的模型在
MXNet
上实现。我们使用
ADAM
来优化神经网络参数、使用SGD
来更新stationary latent factor
。我们通过交叉验证调优超参数。
我们发现:如果我们首先仅训练
stationary state
,然后联合训练完整的模型,则通常可以获得更好的结果。在接下来的实验中,stationary latent state
分别由一个小的预训练的PMF
初始化(对于Netflix
数据集)、以及一个U-AutoRec
模型来初始化(对于IMDB
数据集)。wallclock
$ \tau_t $ 被缩放为零均值、单位方差。
baseline
方法:PMF
:尽管简单,然而PMF
在评分预测方面取得了鲁棒的、强大的结果。由于我们的模型采用与PMF
相同的因子分解来建模静态效应,因此和PMF
比较的结果直接展示了我们的方法建模temporal dynamic
的好处。我们使用LIBPMF
,并使用网格搜索grid search
来搜索正则化系数 $ \lambda\in \left\{10^0,\cdots,10^{-5}\right\} $ 、factor size
$ k\in \left\{20,40,80,160\right\} $ 从而调优超参数。TimeSVD++
:TimeSVD++
是捕获temporal dynamic
的最成功的模型之一,并在Netflix
竞赛中展示了强大的结果。我们使用网格搜索grid search
来搜索正则化系数 $ \lambda\in \left\{10^0,\cdots,10^{-5}\right\} $ 、factor size
$ k\in \left\{20,40,80,160\right\} $ 从而调优超参数。AutoRec
:AutoRec
学习一个自编码器从而将每个电影(或每个用户)编码到低维空间,然后解码从而进行预测。就评分预测而言,它是迄今为止最好的神经网络模型之一,并在多个数据集上取得了state-of-the-art
结果。我们使用原始论文中的超参数((latent state
维度 $ k=500 $ )。
我们的评估指标是标准的
root-mean-square error: RMSE
。不同数据集的结果如下表所示。这里,我们对Netflix full
和IMDB
使用2
个月粒度的time step
,对6-month Netflix
数据集使用1day/7 days
(对应于user/movie
)粒度的time step
。我们将在后续讨论time step
粒度的选择。我们将模型运行10
个epoch
,在每个epoch
结束之后计算验证集的RMSE
。我们报告在验证集上效果最好的模型在测试集上的测试RMSE
。模型准确性
accuracy
和大小size
:在所有方法中,我们的模型在所有数据集上均达到了最佳的准确性。和
PMF
相比,RRN
在IMDB
上提供了1.7%
的改进,在6-month Netflix
上提供了1.6%
的改进。注意,下表展示的
RMSE
高于Netflix
竞赛的RMSE
,因为我们测试的纯粹是未来的评分。此外,我们的模型非常简洁,因为我们存储转移函数
transition function
而不是实际状态从而建模temporal dynamic
。虽然RRN
优于所有baseline
,但是RRN
比PMF
和TimeSVD++
小2.7
倍、比I-AutoRec
小15.8
倍。具体而言,具有40
维embedding
和20
维stationary state
的RRN
足以超越160
维的PMF
、160
维的TimeSVD++
、500
维的AutoRec
。下图展示了
6-month Netflix
数据集上的模型大小和RMSE
。对于
IMDB
,RRN
的大小与PMF, TImeSVD++, U-AutoRec
相当,但是比I-AutoRec
小得多。这是因为RRN
使用与分解模型相同维度的stationary state
,并且包含一个相对较小的模型来捕获temporal dynamic
。我们看到RRN
在灵活性和准确性方面的明显优势,而不会牺牲模型大小。
鲁棒性
robustness
:RNN
在不同数据集上显示出一致的改进,而其它方法在不同数据集上的排名在变化。PMF
在IMDB
数据集上的表现要比Time-SVD++
差得多,这再次强调了对temporal dynamic
建模的必要性。但是
PMF
在Netflix full
和Netflix 6 months
上的表现要比Time-SVD++
更好,是否说明建模temporal dynamic
是无用的?
时间动态:
电影中的外生动态
exogenous dynamic
:外生动态指的是电影的评分如何随着外部效应exogenous effect
(如电影获奖或得到提名)而变化。我们的目标是了解我们的模型如何对外生动态作出反应。具体而言,我们在
1-year
数据集上运行RNN
,time step
粒度为一个月,并且查看平均预测评分如何沿着时间序列而演变。平均预测评分是根据1000
名随机抽样的用户计算而来。这个平均预测评分代表了电影在当时的平均预测评分,并避免了当时谁选择给该电影评分的bias
。这里评估的是全体用户中随机选择的,而不是从对某个电影有评分的用户中选择的。后一种方式存在选择偏差
select bias
,使得仅评估未来review
过该电影的用户。下图展示了获奖电影的平均预测评分。可以看到,当一部电影获奖或得到提名时,预测评分会显著上升,这与数据趋势相符。这证实了我们的预期,即
RNN
应该自动适应外生变化exogenous change
并调整预测。电影中的内生动态
endogenous dynamic
:除了外生事件之外,电影还可能由于内生原因而随着时间的推移而发生变化。为了了解RRN
如何对内生原因的影响进行建模,我们以2
个月粒度的time step
对完整的6-year
数据集进行了测试。实验与前一个实验相同的方式进行,但是考虑到大多数用户仅在系统上活跃一段时间这个事实,这里对每个time step
我们随机采样了5000
个当时活跃的用户(因此这里采用的是time step
粒度随机选择的用户)。如果用户在time step
内对任何电影进行了评分,那么我们认为该用户是活跃的。我们观察评分变化较大的电影,并观察RRN
如何建模它的temporal dynamic
。首先,我们观察到年龄效应
age effect
。也就是说,一部电影的评分往往在上映后的第一年略有下降,然后随着年龄的增长而上升。在下图中,我们看到我们的模型显著地捕获到这种年龄效应并有效地适应。下图为精心挑选的某部电影的平均预测评分。论文并未讲述这种效应产生的原因,只是说明有这种现象。
此外,我们还注意到
RRN
如何对具有不同反响的电影进行不同的建模。下图展示了奥斯卡最佳影片提名(蓝色曲线)、以及金酸莓最差影片提名(红色曲线)的预测评分。我们看到每个分组中的电影都显示出符合直觉的一致模式:金酸莓提名电影最初经历了平均评分下降,然后上升;而奥斯卡提名电影在开始时平均评分上升,然后保持相对稳定。注意,这些模式不是简单地通过一个bias
项来捕获的shift
。
用户偏好
User Interface
改变:正如《Collaborative filtering with temporal dynamics》
中所指出的,2004
年初评分的scale
发生了改变。显然,没有考虑到这一点的系统将具有较差的估计准确性。我们在完整的Netflix
数据集上测试我们的模型,time step
粒度为2
个月,并查看每个time step
上随机选择的用户所生成的平均评分。注意,由于我们计算随机用户随时间的平均预测,因此我们观察模型的dynamic embedding
如何随时间变化。下图显示了按电影发行年份分组的平均预测评分。我们看到所有的曲线在
2004
年初都有一个与scale change
相匹配的显著上升。这与PMF
形成对比,PMF
的embedding
是静态的,因此随着时间的推移平均预测是恒定的。
冷启动:为了了解我们模型的优势和劣势,我们在训练集中评分很少的用户和电影上与静态
PMF
模型进行了比较。如下图所示,对于训练集中评分很少的用户,
RRN
比PMF
有所改进。对于训练集中评分非常少的用户,RRN
(相比较PMF
)的相对改进最大。整体而言,训练集中评分数量越多,则相对改进越小。
如下图所示,我们发现
RRN
仍然一致性地为评分很少的电影提供改进,但是改进幅度与观察次数之间的关系更加noisy
。这可能是由于这些电影在测试集中的评分相对较少。这个理由缺乏数据的支撑,因为前面关于评分数量少的用户的结论中,这些用户也可能在测试集中的评分很少。
无需重新训练
re-training
从而融合新数据:估计转移函数transition function
而不是估计状态本身的一个优势是:即使没有重新训练re-training
,我们也能够融合新观察到的评分信息从而更新状态(只需要将新的评分输入到网络中)。这里,我们在
6-month Netflix
数据集上评估该策略。具体而言,我们使用从第一个测试time step
观察到的评分来外推状态extrapolate state
,并使用外推到的状态来预测第二个time step
的评分。我们测试了具有不同的评分波动水平的电影。波动fluctuation
被定义为:评分最高的time step
的平均评分,与评分最低的time step
的平均评分之间的差异。下图总结了该策略的
RMSE
改进。我们观察到:虽然我们的预训练模型没有捕获到小的波动,但是它成功地捕获了大的波动,从而显著提高了预测准确性。也就是说,使用RRN
不仅缓解了频繁昂贵的重新训练的需要,而且还开辟了提供实时推荐的新途径。通常小的波动不太重要,此时这些电影的评分比较稳定,甚至直接将它们的评分预估为一个恒定值就足够可以。
time step
粒度granularity
和敏感性sensitivity
:较小的time step
允许模型频繁地更新并捕获短期影响。然而,这也会导致更长的LSTM
序列,从而进一步导致更高的训练成本。下表总结了
6-month
数据集上不同粒度(user
和movie
采用不同的粒度)的训练时间和测试RMSE
。这里我们看到了RMSE
和训练时间之间的trade-off
。可以通过更长的训练时间为代价来获得更好的准确性。注意,性能对粒度不是特别敏感,即使采用最差RMSE
的粒度,它也优于所有的baseline
模型。这可能是因为RRN
是完全通用的,因为它没有假设数据的特定形式或分布。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论