数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
二、GRU4Rec [2015]
有些电商推荐系统、新闻网站、媒体网站不会跟踪用户
ID
。虽然cookie
和浏览器指纹技术可以提供一些程度上的用户识别,但是这些技术通常不可靠并且容易引发隐私问题。即使可以跟踪用户ID
,但是用户在一些小型电商网站上可能只有一两个会话session
,并且在某些领域(如分类网站classified site
)中,用户的行为通常表现出session-based
的特征。因此,同一个用户的每个会话应该独立地处理。在中国的互联网早期,存在大量的、可以匿名访问的网站或
APP
,因此不会跟踪用户ID
。随着移动互联网浪潮的兴起,中国互联网大多数网站或APP
需要登录才能访问,典型的例子是淘宝,因此可以跟踪到用户ID
。即使能够跟踪到用户ID
,我们也无法保证操作手机的是同一个用户。目前大多数电商的
session-based
的推荐系统都使用相对简单的方法,如item-to-item
相似性、item
共现、转移概率等等。虽然有效,但是这些方法仅考虑用户的最后一次行为,而忽略了用户的历史行为。此外,推荐系统中最常用的是因子模型
factor model
和邻域方法neighborhood method
。- 因子模型将稀疏的
user-item
交互矩阵分解为一组 $ d $ 维潜在因子向量,然后根据user
潜在因子向量和item
潜在因子向量来完成矩阵补全问题(例如用潜在因子向量的内积)。由于无法跟踪用户ID
(导致无法获取用户历史交互的item
),所以因子模型很难应用于session-based
的推荐。 - 邻域方法依赖于会话内的
item
共现,因此被广泛应用于session-based
推荐中。
RNN
在翻译、对话建模、图像标注image captioning
等领域取得了显著成功,但是很少有人将其用于推荐领域。在论文《Session-Based Recommendations With Recurrent Neural Networks》
中,作者认为RNN
可以应用于session-based
推荐并取得了显著效果。作者处理了在建模这类稀疏序列数据进行时出现的问题,并通过引入适当的、新的ranking loss function
来使得RNN
模型适应推荐setting
。session-based
推荐问题在建模方面与一些NLP-related
问题相似,比如它们都处理序列数据。在session-based
推荐中,我们可以将用户在会话中的第一个交互item
作为RNN
的初始输入,然后我们根据这个初始输入来query
模型从而获得推荐。然后,用户的每次后续交互都会产生一个推荐,这个推荐取决于所有先前的、同一个会话内的交互。item
集合可能是数万甚至数十万,另外交互行为可能非常频繁,因此训练时间和可扩展性非常重要。和大多数信息检索和推荐
setting
一样,论文主要关注于建模用户最感兴趣的top item
,为此论文使用ranking loss function
来训练RNN
。- 因子模型将稀疏的
相关工作:
session-based
推荐:推荐系统领域的大部分工作都集中在当user ID
可用并且可以获取用户画像时的模型上。这种情况下,矩阵分解模型、邻域模型在文献中占据主导地位。session-based
推荐中采用的主要方法之一是item-to-item
推荐,此时item-to-item
相似度矩阵是从可用的会话数据中预计算而来,也就是说,在同一个会话中共现的item
被认为是相似的。这种方法虽然简单但是已被证明有效,并被广泛采用。但是,该方法仅考虑用户的最近一次行为,忽略了用户历史行为信息。session-based
推荐的另一个稍微不同的方法是马尔科夫决策过程Markov Decision Processes: MDP
。MDP
是序列随机决策问题的模型,最简单的MDP
本质上是一阶马尔科夫链,其中next
推荐可以简单地根据item
之间的转移概率来计算。 在session-based
推荐中应用马尔科夫链的主要问题是:当试图包含所有可能的用户行为序列时,状态空间很快变得无法管理。通用分解框架
General Factorization Framework: GFM
的扩展版本能够使用会话数据来推荐。该方法通过事件event
的sum
来建模会话,并对item
使用两种潜在representation
:一种代表item
本身、另一种代表item
是会话的一部分。然后将会话中所有item
的第二种representation
取平均从而作为会话的representation
。但是,该方法不考虑会话中的行为顺序。推荐系统中的深度学习:在推荐系统中最早应用深度学习的相关方法之一是
《Restricted boltzmann machines for collaborative filtering》
,它使用RBM
来对user-item
交互进行建模并执行推荐。此外,深度模型也用于从音乐或图像等非结构化内容中提取特征,然后与更传统的协同过滤模型一起使用,如《Deep content-based music recommendation》
。最近,《Collaborative deep learning for recommender systems》
引入了一种更通用的方法,该方法使用深度网络从任何类型的item
中抽取通用的内容特征,然后将这些特征集成到标准的协同过滤中从而提高推荐性能。这些方法在缺乏足够user-item
交互的setting
中特别有用 。
2.1 模型
2.1.1 模型
标准的
RNN
:其中:
$ \mathbf{\vec x}_t $ 为 $ t $ 时刻的输入, $ \mathbf{\vec h}_t $ 为 $ t $ 时刻的隐状态hidden state
, $ \mathbf W $ 和 $ \mathbf U $ 为待学习的权重矩阵, $ g(\cdot) $ 为一个平滑有界的函数(如sigmoid
函数)。Gated Recurrent Unit: GRU
是一个更精细的RNN
模型,旨在处理梯度消失问题。GRU gates
本质上是学习何时更新单元的隐状态、以及更新多少:其中:
$ \odot $ 为逐元素乘积, $ \mathbf{\vec z}_t $ 为更新门update gate
, $ \mathbf{\vec r}_t $ 为复位门reset gate
, $ \sigma(\cdot) $ 为sigmoid
激活函数, $ \hat{\mathbf{\vec h}}_t $ 为候选激活值candidate activation
。我们在模型中使用
GRU-based RNN
来进行session-based
推荐。网络的输入是每个时刻会话的实际状态actual state
,输出是会话中下一个事件的item
。会话的状态可以是最新的事件(即当前事件)。此时使用
OneHot
编码,即输入向量的长度为 $ N $ 并且仅最新事件对应的item
为1
而其它位置为0
,其中 $ N $ 为item
集合大小。会话的状态也可以是截止到当前的所有事件(即累计事件)。此时对每个事件的
OneHot
编码进行加权和,权重根据事件发生时刻距离当前时间间隔进行衰减。为了稳定性,我们对输入向量进行归一化。我们希望这种累计事件的方式会有所帮助,因为它增强了记忆效应
memory effect
。但是实验发现,这种方式并不会带来额外的准确率增益。这毫不奇怪,因为GRU
像LSTM
一样,同时具有长期记忆和短期记忆。
我们尝试添加一个额外的
embedding layer
,但是发现OneHot
编码总是表现得更好。如果没有
embedding layer
,则 $ \mathbf W_z, \mathbf W_r,\mathbf W $ 分别充当不同的embedding
矩阵; 如果添加额外的embedding layer
,则 $ \mathbf W_z,\mathbf W_r,\mathbf W $ 表示在已有的embedding
矩阵之上的投影矩阵。网络的核心是
GRU layer
。可以使用多层GRU layer
,其中前一层的hidden state
是下一层 的输入。最后一个GRU layer
和输出层之间添加了额外的前馈层Feedforward layer
(但是实验发现增加这个额外的前馈层对于效果提升没有帮助)。输出是每个item
在当前会话中成为next
的可能性。input
层也可以选择连接到网络中更深的GRU layer
,因为我们发现这可以提高性能。完整的架构如下图所示,该架构描述了事件时间序列中单个事件的
representation
。图中包含了
embedding layer
和feedforward layer
,但是根据实验描述,这两个layer
是无益的,需要移除。
2.1.2 调整
由于推荐系统不是
RNN
的主要应用领域,我们修改了基础网络从而更好地适应任务。我们还考虑了实际场景,以便我们的解决方案可以应用于现场环境。session-parallel mini-batch
:用于NLP
任务的RNN
通常使用in-sequence mini-batch
。例如,通常在句子的单词上使用滑动窗口,并将这些窗口片段彼此相邻从而形成mini-batch
。这不适合于我们的任务,因为:- 首先,会话之间长度的差异非常大(远远大于
NLP
中的句子)。一些会话仅包含一到两个事件,而另一些会话可能包含超过数百个事件。 - 其次,我们的目标是捕获会话如何随时间的演变,因此将会话分解为片段是没有意义的。
因此,我们使用
session-parallel mini-batch
,如下图所示。具体而言:首先,我们将所有会话进行排序。
注意,这里是以会话为基本单元进行排序,而不是对会话内的事件进行排序。
然后,我们使用前
X
个会话的第一个事件来构成第一个mini-batch
的输入(所需的输出是这些会话的第二个事件)。第二个mini-batch
是由这些会话的第二个事件形成的,依次类推。如果任何一个会话结束了,则下一个可用的会话将填补该结束会话的位置。假设会话之间是相互独立的,因此我们在发生这种会话切换的时候重置对应的
hidden state
。这种训练方式可以支持任意长度的
session
,而无需将session
进行长度限制(比如截断为固定长度)。
- 首先,会话之间长度的差异非常大(远远大于
sampling on the output
:当item
集合规模太大时,在每个step
计算每个item
在当前会话中成为next
的可能性是不现实的。因此我们需要负采样技术。我们根据
item
的流行程度进行负采样:item
越流行,那么用户就越可能知道它,那么用户未对该item
交互则意味着用户更有可能不喜欢该流行item
。我们没有为每个训练样本生成单独的负采样,而是使用来自
mini-batch
的其它训练样本的item
作为负采样。这种方法的好处是我们可以减少计算时间、降低代码复杂性、并且也易于实现。同时,该方法也是一种基于流行程度的采样,因为一个item
出现在mini-batch
中的可能性与其流行程度成正比。ranking loss
:推荐系统的核心是item
的relevance-based ranking
。尽管该任务也可以解释为分类任务,但是learning-to-rank
方法通常优于其它方法。ranking
可以是point-wise
、pair-wise
、或者list-wise
的。point-wise ranking
彼此独立地估计item
的score
或者ranking
,并且损失函数的定义方式使得相关的item
的排名应该靠前。pair-wise ranking
比较一个positive item
和一个negative item
组成的ranking pair
对,损失函数强制positive item
的排名应该比negative item
的排名更靠前。list-wise ranking
使用所有item
的score
或ranking
,并将它们与完美排序进行比较。它通常在计算上代价太大,因此不经常使用。
此外,如果仅有一个相关的
item
(例如我们这里的例子),list-wise ranking
可以通过pair-wise ranking
来解决。我们在我们的解决方案中包含了几个point-wise ranking loss
和pair-wise ranking loss
。我们发现模型的point-wise ranking loss
不太稳定,而pair-wise ranking loss
表现良好,最终我们使用以下两个pair-wise ranking loss
:BPR
:贝叶斯个性化排名Bayesian Personalized Ranking: BPR
是一种矩阵分解方法,它使用pair-wise ranking loss
。它比较一个positive item
和一个负采样的negative item
的score
。这里,我们将positive item
的score
和几个负采样的negative item
的score
进行比较,并将它们的均值作为损失。具体而言,pair-wise ranking loss
为:其中:
$ K $ 为负采样的数量, $ \sigma(\cdot) $ 为sigmoid
函数, $ \hat r_{t,j} $ 为会话s
中 $ t $ 时刻在item
$ j $ 上的score
, $ i $ 为positive item
, $ j $ 为负采样的negative item
。TOP1
:这个ranking loss
是我们为这项任务而设计的,它是relevant item
的相对排名relative rank
的正则化近似。relevant item
$ i $ 的相对排名定义为:其中
$ \mathbb I(\cdot) $ 为示性函数。我们用sigmoid
函数来代替示性函数,优化这个相对排名将会修改parameter
从而使得item
$ i $ 的score
会很高。然而,这个目标函数不稳定,因为某些
positive item
也会扮演负样本角色,因此score
往往会变得越来越高。为避免这种情况,我们希望强制
negative item
的score
在零左右,这是negative item
的score
的自然预期。为此,我们在损失函数中添加了一个正则化项。重要的是,这一项与相对排名在同一取值区间并且作用与其相似。最终的损失函数为:.
2.2 实验
数据集:
RecSys Challenge 2015
数据集(RSC15
):该数据集包含电商网站上的click-streams
,其中某些stream
以购买事件而结束。我们仅保留点击事件,并且过滤掉长度为1
的会话。我们使用前6
个月的数据进行训练,使用第二天的会话进行测试。每个会话要么是训练集要么是测试集,我们不会在会话中拆分数据。由于协同过滤方法的性质,我们从测试集中过滤掉训练期间
unseen
的item
,并且删除测试集中长度为1
的会话。VIDEO
数据集:包含某个视频服务平台收集的视频观看事件。预处理步骤如前所述,但是也过滤掉了很长的会话,因为这些会话可能是由机器人生成的。训练数据集包含最后一天除外的所有数据,测试数据集包含最后一天的数据。
评估方式:通过
one-by-one
提供会话的事件并检查下一个事件的item
排名来完成评估。GRU
的隐状态在会话结束之后重置为零。item
按照score
降序排名。对于
RSC15
数据集,我们对训练集中出现的37483
个item
进行排名。对于VIDEO
数据集,因为item
集合太大因此我们将next item
和最流行的30000
个item
进行排名。这种评估的影响可以忽略不计,因为冷门的item
通常score
很低。此外,基于流行度的预过滤在实际推荐系统中很常见。recall@20
:在top 20
排名的item
中,召回的next item
占所有next item
的比例。召回不考虑
item
的实际排名,只要它位于top N
的位置。这很好地建模了某些实际场景,其中绝对顺序无关紧要。此外,召回率通常还与重要的在线指标密切相关,如点击率CTR
。MRR@20
:Mean Reciprocal Rank: MRR
是next item
的排名的倒数的均值。如果排名在20
之后则排名的倒数置为零。MRR
考虑item
的排名,这在推荐顺序很重要的场景下很重要(如排名靠后的item
仅在滚动屏幕之后才可见)。
baseline
方法:POP
:流行度的predictor
,它总是推荐训练集中的流行item
。尽管简单,但是它通常是某些领域的强大baseline
。S-POP
:推荐当前会话中最流行的item
(而不是全局最流行的item
)。该baseline
在具有高重复性的领域中很强。Item-KNN
:基于item
相似性来推荐和当前item
最相似的item
。相似度定义为此外,我们还使用正则化从而避免冷门
item
的偶然发生导致的高度相似性。该
baseline
是实际系统中最常见的item-to-item
解决方案之一。尽管简单,它通常也是一个强大的baseline
。BPR-MF
:它通过SGD
优化pair-wise ranking
目标函数,是最常用的矩阵分解方法之一。矩阵分解无法直接应用于session-based
推荐,因为新会话没有预先计算的特征向量。然而,我们可以通过使用会话中出现的item
的特征向量的均值作为user
特征向量来克服这个问题。换句话讲,我们对next item
的特征向量、迄今为止会话中item
特征向量的相似性进行平均。
这些
baseline
的效果如下表所示,其中item-KNN
方法显著优于其它baseline
方法。参数配置:我们通过单独优化每个超参数来进行超参数调优,其中调优是在单独的验证集上进行的。然后我们在训练集和验证集上对网络进行重新训练,并最终在测试集上进行评估。下表给出了最佳的超参数。
此外还有一些探索如下:
权重矩阵从
$ [-x,x] $ 中均匀随机初始化,其中 $ x $ 取决于矩阵的行数和列数。我们评估了
rmsprop
和adagrad
优化器,发现adagrad
效果更好。我们对
GRU
以外的其它RNN
单元进行了简单的实验,发现常规的RNN
单元和LSTM
单元的效果都更差。我们尝试了几种损失函数。
point-wise ranking loss
(如交叉熵和MRR
)优化通常是不稳定的,即使添加正则化也是如此。我们认为:这是由于这种方法试图为positive item
获得高分,而负样本的negative push
太小。- 另一方面,
pair-wise ranking loss
表现良好。
我们检查了几种架构,发现:
- 单层
GRU
表现最好。我们假设这是由于会话的生命周期通常都很短,不需要表达不同分辨率的多个时间尺度。然而,确切原因尚不明确,需要进一步研究。 - 使用
item embedding
得到的效果稍差,因此我们仅使用OneHot
编码。 - 此外,将会话的所有历史事件(而不是最新的事件)作为输入并不能带来额外的准确率增益。这毫不奇怪,因为
GRU
像LSTM
一样,同时具有长期记忆和短期记忆。 - 在
GRU layer
之后添加额外的前馈层也没有帮助。 - 然而,增加
GRU layer
的大小提高了性能。 - 我们还发现使用
tanh
作为输出层的激活函数是有益的。
- 单层
实验结果:下表给出了性能最佳的网络的结果(括号表示相对于
item-KNN
中的提升。)。具有1000
个隐单元的VIDEO
数据集的交叉熵在数值上不稳定,因此我们没有提供结果。结论:- 即使隐单元数量为
100
,GRU-based
的方法在两个数据集上都显著优于item-KNN
。增加隐单元数量进一步改善pair-wise loss
的结果,但是降低了交叉熵损失(即point-wise loss
)的准确率。 - 在隐单元数量为
100
时,尽管交叉熵损失给出了更好的结果,但是随着隐单元数量的增加,pair-wise loss
超过了该结果。 - 尽管增加隐单元数量会增加训练时间,但是我们发现
GPU
上从隐单元100
提升到1000
的代价不太昂贵。 - 交叉熵损失在数值上不稳定,因为网络独立地尝试增加
positive item
的score
,而其它item
的negative push
相对较小。因此,我们建议使用上述两个pair-wise loss
中的任何一个。
- 即使隐单元数量为
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论