数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
七、HRNN [2017]
session
是在给定时间范围time frame
内发生的一组交互。同一个用户的不同session
可以发生在同一天,也可以发生在数天内、数周内、甚至数月内。一个session
通常有一个目的goal
,例如找到一家好餐馆、或者听到某种风格的音乐。在这些领域提供推荐带来了独有的挑战
unique challenge
,直到最近,这些挑战主要通过在最近一次交互、或者最近一个session
上应用传统的推荐算法来解决。在session-based
推荐中,仅基于当前的user session
来提供推荐,因为假定用户是匿名的。但是在许多此类系统中,用户可能已经登录、或者存在某种形式的user id
(如cookie
)。在这些情况下,可以合理地假设:同一个用户的历史session
行为可能会为next session
中的推荐提供有价值的信息。在
session-based
算法中,结合历史的user session
信息的一种简单方法是:简单地拼接历史的user session
和当前的user session
。虽然这似乎是一种合理的方法,但论文《Personalizing Session-based Recommendations with Hierarchical Recurrent Neural Networks》
将在实验部分看到这不会产生最佳效果。在论文
《Personalizing Session-based Recommendations with Hierarchical Recurrent Neural Networks》
中,作者描述了一种基于RNN
的新算法,该算法可以同时处理如下两种case
:session-aware
推荐:当存在user id
时,将信息从前一个user session
传播到下一个user session
从而提高推荐准确率。session-based
推荐:当没有历史的user session
时(例如没有user id
)。
该算法基于
Hierarchical RNN
,其中当一个user session
结束时,lower-level RNN
的hidden state
作为输入而传递给higher-level RNN
。而这个higher-level RNN
旨在为用户下一个user session
的lower-level RNN
的hidden state
提供良好初始化。论文在来自行业内的两个数据集上评估了
Hierarchical RNN
,结果表明论文的方法优于普通的session-based RNN
、以及item-based
协同过滤。相关工作:
session-based
推荐:当没有用户画像时(因此也没有user id
,从而无法获取该用户的所有历史行为),那么经典的CF
方法(如矩阵分解)在session-based setting
中失效。这个问题的一个自然解决方案是item-to-item
推荐方法。在这个setting
中,从可用的session
数据中预先计算出一个item-to-item
相似度矩阵,并且在session
中经常一起被点击的item
被认为是相似的。然后使用这些相似性来执行推荐。这种方法虽然简单,但是已被证明是有效的,并且被广泛采用。但是,这些方法仅考虑用户的最近一次点击,而忽略了用户之前的点击信息。递归神经网络模型:
RNN
是处理序列数据的首选深度模型。LSTM
网络已被证明是工作良好的RNN
模型,其略微简化的版本是GRU
。我们在这项工作中使用GRU
。- 在
《Session-based recommendations with recurrent neural networks》
中,RNN
被首次用于对session
数据进行建模。RNN
在session
中item ID
的one-hot representation
上使用ranking loss
进行训练。然后,RNN
用于在新的session
中每次点击之后提供推荐。该方法仅关注当前session
,而我们的目标不仅考虑当前session
也考虑跨session
的用户行为建模。 - 在
《Parallel recurrent neural network architectures for feature-rich session-based recommendations》
中,RNN
还被用于联合建模item
的内容以及点击序列。通过包含诸如缩略图或文本描述等item
特征,该论文提出的所谓的parallel- NN
提供了优于普通RNN
的推荐质量。 - 在
《Improved recurrent neural networks for session-based recommendations》
中,作者提出了数据增强技术来提高session-based
推荐的RNN
性能。因为单个session
被分为几个sub-session
进行训练,因此该方法具有增加训练时间的副作用。 RNN
也被用于标准的user-item
协同过滤setting
,其目的是对user factor
和item factor
的演变进行建模。结果虽然不那么突出,该方法几乎没有优于标准的矩阵分解方法。- 在
《A hierarchical recurrent encoder-decoder for generative context-aware query suggestion》
中,Hierarchical Recurrent Neural Network
的seq-to-seq
模型被用于生成上下文感知的query suggestion
。
- 在
7.1 模型
7.1.1 Session-based RNN
我们的模型基于
《Session-based recommendations with recurrent neural networks》
中提出的session-based RNN
模型,其中RNN
基于单层GRU layer
来建模用户在session
内的交互。RNN
将session
中的当前item ID
作为输入,并为每个item
输出一个得分表示成为session
中next item
的可能性。形式上,对于第
$ m $ 个session
$ \mathcal S_m=\{i_{m,1},\cdots,i_{m,N_m}\} $ , $ N_m $ 为第 $ m $ 个session
的item
数量, $ i_{m,t} $ 为第 $ m $ 个session
中的第 $ t $ 个item
,RNN
将计算如下所示的session-level representation
:其中:
$ \text{GRU}_\text{ses} $ 为session-level GRU
, $ \mathbf{\vec s}_{m,t} $ 为GRU
在step t
的hidden state
并且 $ \mathbf{\vec s}_{m,0} = \mathbf{\vec 0} $ (null vector
), $ \mathbf{\vec i}_{m,t} $ 为step t item ID
$ i_{m,t} $ 的one-hot
向量。RNN
的输出是item
集合中每个item
的得分 $ \hat {\mathbf{\vec r}}_{m,t}\in \mathbb R^{|\mathcal I|} $ ,指示每个item
成为session
中next item
(即第 $ t+1 $ 个交互)的可能性,其中 $ \mathcal I $ 为全体item
集合。其中
$ g(\cdot) $ 为一个非线性函数(如softmax
或tanh
),具体取决于损失函数。在训练期间,将得分
$ \hat {\mathbf{\vec r}}_{m,t} $ 与next item ID
$ i_{m,t+1} $ (简写为 $ i^* $ )的onehot
向量进行比较来计算损失函数。网络可以使用多种ranking loss function
进行训练,如交叉熵、BPR
、TOP1
。在这项工作中,TOP1
损失总是优于其它ranking loss
,因此我们在本文的剩余部分仅考虑该损失函数。TOP1
损失是relevant item
(即next item
)的相对排名的正则化近似。relevant item
的相对排名定义为:其中:
$ \hat r_{i^*} $ 为relevant item
的得分。 $ \hat r_{j} $ 为随机采样的irrelevant item
的得分, $ N_S $ 为随机采样的数量。 $ \mathbb I(\cdot) $ 为示性函数并且以sigmoid
来近似。
为了迫使
negative item
(即irrelevant item
)的分数趋于零,在损失函数中添加了一个正则化项。最终的损失函数为:RNN
通过session-parallel
的mini-batch
来进行有效地训练。在每个训练step
, $ \text{GRU}_\text{ses} $ 的输入是一个batch
的current item ID of sessions
(以one-hot
向量来表示)。session-parallel
机制在mini-batch
中保留指向每个session
的当前item
的指针,并会在session
结束时重置RNN
的hidden state
。为了进一步降低计算复杂度,损失函数是在
current item ID
和负采样的item ID
上计算而来。具体而言,在计算损失函数时,将每个session
的current item ID
作为postive item
、将mini-batch
中其它session
的所有item ID
作为negative item
。这使得无需执行显式的negative item
采样,并执行了基于流行度popularity-based
的采样。然而,由于user id
在纯的session-based
场景中是未知的,因此negative item
很有可能被同一个用户在其它session
中交互的postive item
所“污染”。这种方式称作
in-batch
负采样。另外,既可以将其它session
的current item ID
作为negative item
(实现更简单),也可以将其它session
的所有item ID
作为negative item
(效果更好)。
7.1.2 个性化的 Session-based Hierarchical RNN
我们的
HRNN
模型在RNN
之上通过以下方式构建:- 添加一个额外的
GRU layer
来建模跨user session
的信息。 - 使用强大的
user-parallel mini-batch
机制进行高效地训练。
- 添加一个额外的
架构:除了
session-level GRU
之外,我们的HRNN
模型还添加了一个user-level GRU
( $ \text{GRU}_\text{usr} $ )来建模跨session
的用户活动。下图展示了HRNN
的结构示意图。- 在每个
time step
,由 $ \text{GRU}_\text{ses} $ 生成推荐,就像在RNN
中的一样。 - 但是,当
session
结束时,user-level representation
通过 $ \text{GRU}_{usr} $ 被更新。 - 当一个新的
session
开始时, $ \text{GRU}_\text{usr} $ 的hidden state
(即user-level representation
)用于初始化 $ \text{GRU}_\text{ses} $ ,并且也可以传播到 $ \text{GRU}_\text{ses} $ 的输入。
形式上,对于每个用户
$ u $ 及其session
集合 $ \mathbb C^u = \left\{\mathcal S_1^u,\cdots,\mathcal S^u_{M_u}\right\} $ ,user-level GRU
将session-level representation
$ \mathbf{\vec s}_1^u,\cdots,\mathbf{\vec s}_{M_u}^u $ 作为输入来更新user-level representation
$ \mathbf{\vec c}_m^u $ 。其中: $ M_u $ 为用户 $ u $ 的session
数量, $ \mathbf{\vec s}_m = \mathbf{\vec s}_{m,N_m-1}^u $ 是user session
$ \mathcal S_{m}^u $ 的 $ \text{GRU}_\text{ses} $ 的last hidden state
。接下来为了便于表述,我们移除了
user
上标 $ u $ 。user-level representation
$ \mathbf{\vec c}_m $ 的更新为:其中
$ \mathbf{\vec c}_0 = \mathbf{\vec 0} $ (null vector
)。session-level GRU
的last hidden state
作为user-level GRU
的输入。通过这种方式,user-level GRU
可以跨session
跟踪用户的演变,从而无缝地建模动态的用户兴趣。注意,user-level representation
在整个session
期间保持固定,并且仅在session
结束时更新。然后使用
user-level rerepsentation
来初始化session-level GRU
的hidden state
。给定 $ \mathbf{\vec c}_m $ ,接下来的session
的session-level GRU
的初始hidden state
$ \mathbf{\vec s}_{m+1,0} $ 设置为:其中:
$ \mathbf W_\text{init} $ 为initialization
权重矩阵, $ \mathbf{\vec b}_\text{init} $ 为initialization
偏置向量。通过这种方式,用户在先前session
中表达的偏好相关的信息在session-level
被传递。session-level representation
更新为:其中方括号表示
$ \mathbf{\vec c}_m $ 可以选择性地传播到session-level GRU
的输入。如果仅仅是为了跨
session
来传递用户的偏好,那么可以简单地将上一个session
的last hidden state
传递给下一个session
。那么user-level GRU
的价值在哪里?论文的解释是:user-level GRU
建模了user-session
如何随着时间的演变,即 “计算并演变了用户画像” 。此外论文还在实验部分评估了这种做法的效果(即
RNN Concat
这个baseline
),实验发现RNN Concat
和HRNN
在小型数据集上的效果相差无几,但是在大型数据集上HRNN
效果显著优于RNN Concat
。所以HRNN
需要更大规模的数据才能体现其优势,因为HRNN
的模型容量更大。- 在每个
模型使用反向传播进行端到端训练。
- 如果
user-level rerepsentation
$ \mathbf{\vec c}_m $ 仅作为 $ \text{GRU}_\text{ses} $ 的初始化,则 $ \text{GRU}_\text{usr} $ 的权重仅在session
之间更新,即session
结束时以及接下来的session
开始时。 - 如果
user-level rerepsentation
$ \mathbf{\vec c}_m $ 既作为 $ \text{GRU}_\text{ses} $ 的初始化、又作为 $ \text{GRU}_\text{ses} $ 的输入,则即使 $ \mathbf{\vec c}_m $ 保持固定(即,在session
内保持不变), $ \text{GRU}_\text{usr} $ 的权重也会在session
内更新。 - 我们也尝试将
user-level representation
传播到final prediction layer
,即 $ \hat {\mathbf{\vec r}}_{m,t}= g\left(\mathbf{\vec s}_{m,t},\mathbf{\vec c}_m\right) $ ,但我们总是发现相对于简单的RNN
而言,新模型的性能严重下降。因此,我们在本次讨论中放弃了这种setting
。
注意,
$ \text{GRU}_\text{usr} $ 不仅将前一个user session
的hidden state
传递给下一个user session
,而且还学习(在训练期间)user session
如何随时间的演变。我们将在实验部分看到,这对于提高性能至关重要。实际上, $ \text{GRU}_\text{usr} $ 计算并演变了用户画像(用户画像基于之前的user session
),因此实际上个性化了 $ \text{GRU}_\text{ses} $ 。在原始RNN
中,具有相同点击item
序列的user session
,模型将为这些用户提供相同的推荐。在HRNN
中,情况不再如此,推荐结果也会受到用户历史session
的影响。总之,我们考虑了以下两种不同的
HRNN setting
,具体取决于公式 $ \mathbf{\vec s}_{m+1,t} $ 中是否考虑了user representation
$ \mathbf{\vec c}_m $ :HRNN Init
:其中 $ \mathbf{\vec c}_m $ 仅用于初始化next session
的representation
。HRNN All
:其中 $ \mathbf{\vec c}_m $ 既用于初始化next session
的representation
,也用作next session
的输入。HRNN All
相比于HRNN Init
的模型复杂度稍高。
正如我们将在实验部分看到的,根据推荐场景,这两种
setting
可能会导致截然不同的结果。- 如果
学习:为了提高训练效率,我们调整了
《Parallel recurrent neural network architectures for feature-rich session-based recommendations》
中描述的session-parallel mini-batch
机制,从而考虑训练期间的user id
,如下图所示。我们首先根据用户对
session
进行分组,然后按照时间戳对每个分组内的session
事件进行排序。然后我们对用户进行随机排序。在第一次迭代中,前面 $ B $ 个用户的第一个session
的第一个item
构成了HRNN
的输入,对应session
的第二个item
构成了HRNN
的输出。然后我们将HRNN
的输出作为下一次迭代的输入,依此类推。当
mini-batch
中的session
结束时,更新 $ \text{GRU}_\text{usr} $ 的hidden state
、并为下一个session
来初始化 $ \text{GRU}_\text{ses} $ 的hidden state
。当一个用户被完全处理之后, $ \text{GRU}_\text{usr} $ 和 $ \text{GRU}_\text{ses} $ 的hidden state
都被重置,mini-batch
中下一个用户将被放到这个被处理完的用户的位置进行处理。使用
user-parallel mini-batch
,我们可以有效地训练HRNN
从而满足不同session
数量、以及session
内不同长度的用户。此外,这种机制允许以独立于用户的方式对负样本进行采样,从而减少负样本被实际正样本“污染” 的机会。采样过程仍然是基于流行度
popularity
的,因为一个item
出现在mini-batch
中的可能性与其流行度成正比。众所周知,这两个特点都有利于基于隐式用户反馈的pairwise learning
。因为负样本是从其它用户那里采样到的,因此可以减少污染机会。
未来工作:
- 使用注意力模型、
item
特征、用户特征,从而进一步改善user representation
并进一步提升session-based
推荐方法。 - 在其它领域研究
session-based
个性化模型,例如音乐推荐领域、电商领域、在线广告领域。
- 使用注意力模型、
7.2 实验
数据集:
XING
数据集:XING Recsys Challenge 2016
数据集,包含80
天内77
万用户的job posting
交互信息。用户交互带有时间戳和交互类型(点击、添加书签、回复、删除)。VIDEO
数据集:来自类似于Youtube
的视频点播网站的专属数据集,包含13k
用户在2
个月内观看的视频。观看时长小于指定阈值的事件被丢弃。
我们使用
30
分钟空闲阈值来手动地将交互数据拆分为session
。对于XING
数据集,我们丢弃了 “删除” 类型的交互。我们还丢弃了session
中相同类型的重复交互从而减少噪音(例如在session
中重复点击同一个job posting
)。然后我们对两个数据集进行如下预处理:
- 我们删除了
XING
数据集中出现频次低于20
的item
,删除了VIDEO
数据集中出现频次低于10
的item
,因为低频item
不是建模的最佳选择。 - 我们删除了交互次数少于
3
次的session
从而过滤太短且信息量不足的session
。 - 我们删除了
session
总数低于5
个的用户,从而使得用户具有足够多的cross-session
信息,以便对用户进行正确的建模。
我们使用每个用户的最后一个
session
构建测试集,剩余的session
构成训练集。我们还过滤了测试集中不属于训练集的item
。这种划分允许针对具有不同历史session
数量的用户进行评估,从而衡量模型对不同活跃程度的用户的推荐质量。我们使用相同的程序进一步划分验证集从而调优算法的超参数。数据集的统计信息如下表所示。
baseline
方法:Personal Pop: PPOP
:推荐用户交互次数最多(而不是全局交互次数最多的item
)。Item-KNN
:根据session
内item
的共现来计算item-to-item
的余弦相似度。RNN
:采用《Session-based recommendations with recurrent neural networks》
中提出的模型,该模型使用TOP1
损失函数以及session-parallel mini-batch
(来自同一个用户的session
彼此独立地馈入RNN
)。RNN Concat
:与RNN
相同,但是来自同一个用户的所有session
被拼接为单个session
。这相当于
$ \text{GRU}_\text{usr} $ 退化为一个恒等映射。
配置:
我们使用
AdaGrad
来优化TOP1
损失函数的神经网络模型,训练10
个epoch
。在所有模型中,增加epoch
数量并未显著改善损失。我们对
RNN
和HRNN
的hidden state
使用了dropout
正则化。我们还将dropout
应用于HRNN
的 $ \text{GRU}_\text{ses} $ 初始化 $ \mathbf{\vec s}_{m+1,0} $ 。我们在
hierarchy
的两个level
中都采用了单层GRU
,因为使用多层GRU layer
并没有提高性能。为了评估网络容量如何影响推荐质量,我们考虑了每个
GRU layer
具有100
个隐单元的小型网络、以及具有500
个隐单元的大型网络。我们使用随机搜索
random search
在验证集上调优了每个模型(包括baseline
模型)的超参数。为了帮助我们实验的可复现性,我们在下表中报告了我们在XING
数据集上的、在实验中使用的超参数。HRNN
中的user-level GRU
、session-level GRU
、以及初始化都使用了dropout
,因此下表中给出的dropout
概率按照这个顺序提供。对于所有的数据集,Item-KMM
的最佳邻域大小都是300
。神经网络模型在
12GB GPU
内存的Nvidia K80 GPU
上进行训练。训练时间从XING
上的小型RNN
模型的5
分钟,到VIDEO
上的大型HRNN All
的30
分钟不等。所有实验的评估时间不超过2
分钟。我们要强调的是,
RNN
和HRNN
之间的训练时间没有显著差异,其中HRNN All
是计算成本最高的模型,因为其架构的复杂性更高。
评估方式:我们评估序列的
next-item prediction task
,即给定user session
的事件,我们评估算法预测后续事件的效果。所有RNN-based
模型都一个接一个地在session
中输入事件,我们检查next item
的预测排名。此外,
HRNN
模型和RNN Concat
使用测试session
之前的所有历史session
,这会降低评估速度,但是有必要在评估开始之前正确地设置个性化模型的internal representation
(如HRNN
的user-level representation
)。注意,评估指标仍然仅针对测试集中的事件进行计算,因此评估仍然是公平的。此外,我们在每个测试
session
中丢弃了由RNN Concat baseline
计算的第一个预测,因为它是唯一的、能够推荐user session
中首个事件的方法。其它方法都只能最早预测
user session
中第二个事件。由于推荐系统一次只能推荐几个
item
,因此relevant item
应该在推荐列表中排名靠前。因此我们选择Recall@5
、Precision@5
、Mean Reciprocal Rank (MRR@5)
等指标来评估推荐质量。Recall@5
:相当于命中率指标,它衡量所有测试case
中,relevant item
在top-5
的case
的占比。对于推荐顺序无关紧要的场景,这是一个良好的指标,并且该指标与CTR
等重要KPI
密切相关。Precision@5
:衡量所有推荐列表的top-5
位置中正确推荐的比例。MRR@5
:relevant item
的排名的倒数reciprocal rank
,如果排名大于5
则排名的倒数被手动置为零。MRR
会考虑item
的排名,这在推荐顺序要紧的情况下很重要。
实验结果:下表给出了
XING
和VIDEO
数据集的结果。我们使用不同的随机数种子对每个神经网络模型进行了10
次训练,并报告了平均结果。我们使用Wilcoxon signed-rank test
来评估HRNN
模型与baseline
方法之间差异的显著性。XING
数据集的结果:简单的
PPOP baseline
就是一种非常有竞争力的方法,能够大大超越更复杂的Item-KNN baseline
。正如前人工作对数据集的研究已经表明,用户在sessoin
内和跨session
之间的活动具有高度的重复性。这使得在这种情况下生成non-trivial
的个性化推荐非常具有挑战性。session-based RNN
较差的性能进一步突出了这一点,无论网络容量如何,它总是比PPOP
差得多。尽管如此,
session-based
个性化推荐可以克服其局限性,并在小型网络和大型网络的Recall
和Precision
指标上实现卓越的性能。HRNN
在Recall
和Precision
指标上显著优于RNN Concat
,并且在大型网络上提供显著更好的MRR
。此外,
HRNN
在Recall
和Precision
指标上显著优于强大的PPOP baseline
大约11%
,同时获得了可比的MRR
。两个
HRNN
变体之间并没有显著的差异,除了在MRR
指标上HRNN All
比HRNN Init
略有优势。Recall
和Precision
指标上的差异并没有统计显著性。RNN Concat
与HRNN All, HRNN Init
相差无几,但是在文章末尾的大型数据集上,HRNN
效果要好得多。这是符合预期的,因为HRNN
的模型复杂度更高,所以需要更大量的数据才能体现其能力。
VIDEO
数据集的结果:该数据集上显示出与XING
数据集截然不同的结果。Item-KNN baseline
显著优于PPOP
,而session-based RNN
可以大大优于这两个baseline
。这与过去一些工作在类似数据集上的实验结果一致。RNN Concat
相比较于session-based RNN
具有可比的Recall
和Precision
。有趣的是,RNN Concat
大型网络的MRR
指标明显更好。这表明直接拼接session
不会增强RNN
推荐器的检索能力,但是会增强其正确排序item
的能力。HRNN Init
的性能显著优于所有baseline
。换句话讲,在相同的情况下,由HRNN
建模的更复杂的cross-session dynamic
在整体推荐质量方面提供了显著的优势。我们将在后面研究这些结果的可能原因。值得注意的是,
HRNN All
在这种情况下表现不佳。我们将推荐质量的严重下降归因于该setting
中使用的context-enforcing policy
。一种可能的解释是:多媒体内容(在我们的例子中是视频)的消费是一个session-based
场景,比XING
中代表的求职场景强得多。用户可能会遵循通用群体趋势general community trend
并且具有长期兴趣(该长期兴趣由user-level GRU
来捕获)。但是,session
中的用户活动可能与该用户最近的session
完全断开,甚至与用户的一般兴趣general interest
无关(如,对极限运动视频有强烈兴趣的用户可能偶尔也会观看卡通电影预告片)。HRNN Init
让session-level GRU
根据session
中用户兴趣的实际演变来自由地利用这些用户兴趣动态。其更大的灵活性带来了卓越的推荐质量。即该场景中的兴趣更多的是
session
内的,而求职场景中的兴趣更多的是跨session
的。对于session
内的兴趣建模,用HRNN Init
效果更好;对于跨session
的兴趣建模,用HRNN All
效果更好。
用户历史长度分析:我们预计用户历史长度会对推荐质量产生影响,因此我们按照用户历史中的
session
数量对evaluation
进行细分。为此,我们将用户历史分为两组:具有<= 6
个session
的short
用户历史、具有> 6
个session
的long
用户历史。下表中报告了这些数据集中不同分组占比的统计数据。由于我们的目标是衡量
HRNN
中使用的复杂的cross-session dynamic
对于传统RNN
的影响,因此我们将这些分析限制在大型配置中RNN-based
推荐器上。对于每种算法,我们计算测试集中不同分组中test session
的平均Recall@5
和MRR@5
。由于Precision@5
的分析结论与Recall@5
相似,因此由于篇幅有限我们在此省略。为了增强实验结果的鲁棒性,我们使用不同的随机数种子运行10
次评估,并报告每个算法的median value
(而不是均值)。XING
数据集的结果如下所示。可以看到:- 随着用户历史长度的增加,我们注意到所有方法(包括
session-based RNN
)的Recall
略微增加、MRR
略微下降。 - 不同方法的
short
用户历史和long
用户历史的效果之间并没有显著变化。 HRNN All
是性能最好的模型,与session-based RNN
相比,其Recall@5
提高了12%
、MRR@5
提高了14~16%
。- 根据我们之前的发现,
HRNN Init
的性能与RNN Concat
、HRNN All
相当。
VIDEO
数据集的结果如下所示。可以看到:- 所有方法(包括
session-based RNN
)的Recall
都随着用户历史长度的增加而提升。MRR
仅在RNN Concat
、HRNN Init
方法上随着用户历史长度的增加而提升。这凸显了需要有效的个性化策略从而在session-level
获得卓越的推荐质量。 - 此外,
HRNN Init
相对于session-based RNN
在Recall@5/MRR@5
指标上分别提升5%/12% (short)
到7%/19% (long)
,这进一步凸显了我们个性化策略的推荐质量。 - 与我们之前的发现一致,
HRNN All
在这种情况下表现不佳。
综上所述,正如预期的那样,用户历史的长度对推荐质量有很大的影响。在像
XING
这样松散的session-bounded
领域,其中用户活动高度重复并且跨session
的多样性较少,那么将user representation
强制提供给session-level
输入,将得到比initialization-only
方法更好的性能。然而,在更强的session-based
场景中,跨session
的用户活动具有更高程度的变化性,并且可能很大程度上偏离了用户的历史兴趣和偏好,那么更简单有效的HRNN Init
变体将具有更好的推荐质量。- 随着用户历史长度的增加,我们注意到所有方法(包括
session
分析:这里我们按session
中事件数量进行细分,从而衡量个性化在user session
中的影响。我们仅分析长度>= 5
的session
(XING
数据集中仅为6736
个session
、VIDEO
数据集中仅为8254
个session
)。我们根据session
中的位置(开始Beginning
、中间Middle
、结束End
)计算每个指标的均值。开始指的是session
的前2
个事件,中间指的是session
的第3
和第4
个事件,结束指的是session
第5
个及其之后的任何事件。与之前的分析一样,我们关注
large
配置中RNN-based
模型,并报告使用不同随机数种子在10
次运行中均值的median
。Recall@5
和MRR@5
的结果如下图所示。在
XING
数据集上:- 所有方法的性能随着
session
中previous item
的数量增加而增加,这表明session-level
的user context
被所有RNN-based
方法所正确利用。 - 但是,个性化的
session-based
模型和pure session-based
模型之间存在很大差距。两个HRNN
都具有相似的Recall@5
,并且与RNN Concat
相当。有趣的是,HRNN All
的MRR@5
相对于RNN
和RNN Concat
的增益随着处理的item
数量增加而增加,这意味着在这种情况下,随着user session
的继续,历史用户信息变得更加有用。 HRNN Init
的MRR
一直都比RNN Concat
更好,在Begining
和End
具有更高的增益。
在
VIDEO
数据集上:在
session
开始和结束之间,Recall
和MRR
都如预期的增加。HRNN Init
在session
开始时比RNN
和RNN Concat
有很大的提升。这符合直觉,即过去的用户活动也可以有效地用于更准确地预测用户在接下来session
中的首个行为。在最初的几个事件之后,个性化的
session-based
模型相对于pure session-based
模型的Recall
增益在减少,而MRR
的增益保持稳定。换句话讲,在经历一些事件之后,session-level dynamic
开始压制longer-term user interest dynamic
,从而降低了个性化策略的有效性。然而,个性化仍然在整个
session
中提供了卓越的排序质量,正如HRNN Init
和RNN Concat
都比RNN
有更高的MRR
所证明的那样。更重要的是,在session
开始时更好的推荐,要比session
后期更好的推荐更具有影响力,因为前者更有可能增加留住用户的机会。最后,
HRNN All
总是更差的方法,这进一步巩固了HRNN Init
变体的优越性。
- 所有方法的性能随着
大型数据集上的实验:我们在更大版本的
VIDEO
数据集(由先前的论文所使用)上验证了HRNN
。该数据集由81
万用户在2
个月期间对38
万个视频的交互组成,总共包括3300
万个事件、850
万个session
。然后我们应用了与VIDEO
数据集相同的预处理步骤。我们将这个数据集命名为VIDEOXXL
。由于我们的计算资源有限,因此我们只能在这个大型数据集上测试
small
网络(对于RNN
和HRNN
采用100
维的隐层)。我们使用在小型VIDEO
数据集上学到的相同超参数运行一次所有的RNN
和HRNN
。虽然这不是最优的,但是这种方法在更一般的setting
下提供了我们解决方案的初步近似。出于同样的原因,我们没有像对小型数据集所做的那样对实验结果进行详尽的分析。为了加快评估速度,我们计算了相关item
与5
万个最热门item
相比的排名,如《Parallel recurrent neural network architectures for feature-rich session-based recommendations》
中所做的那样。结果在下表中所述,这证实了我们之前在小型
VIDEO
数据集上的发现:RNN Concat
无效,其性能类似于session-based RNN
。另一方面,
HRNN
的性能优于session-based RNN
。具体而言,HRNN Init
相比session-based RNN
,其Recall@5
高了28%
、MRR@5
高了41%
。这些结果进一步证实了本文提出的HRNN
模型的有效性。在更大的数据集上,
HRNN
体现了其优势。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论