数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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 Top-k Gains [2018]
在推荐系统中,
RNN
已被应用于session-based
推荐,并取得了令人印象深刻的结果。与传统的similarity-based
方法相比,RNN
的优势在于它们可以有效地建模整个session
的用户交互(如点击、查看等等)。通过建模整个session
,RNN
实际上可以学到session
的“主题theme
”,从而提供比传统方法更准确的推荐(效果提升在20% ~ 30%
之间)。推荐的主要目标之一是根据用户偏好对
item
进行排名。即,item list
尾部的item
(用户不喜欢的item
)的确切排名或评分并不那么重要,但是将用户喜欢的item
正确地排名在item list
头部(如top 5/10/20
的位置)非常重要。为了通过机器学习实现这一点,通常必须利用learning to rank
技术,具体而言是ranking
目标和ranking loss
函数。当前的session-based RNN
方法使用ranking loss
函数,具体而言是pairwise ranking loss
函数。与大多数深度学习方法一样,选择良好的
ranking loss
会对模型性能产生非常重要的影响。- 由于深度学习方法需要在多个
layer
上传播梯度,损失函数的梯度会反向传播,因此损失函数的质量会影响优化的质量和模型的参数。 - 此外,由于推荐任务的特性,通常需要大输出空间
large output space
(因为系统的item set
较大)。这为ranking loss
的设计带来了独特的挑战。我们将看到,解决这个大输出空间问题的方式对于模型性能非常关键。
在论文
《Recurrent Neural Networks with Top-k Gains for Session-based Recommendations》
中,作者分析用于session-based
推荐的RNN
中使用的ranking loss
函数。这种分析导致了一组新的ranking loss
函数,与之前的常用损失函数相比,RNN
的性能提高了35%
而没有显著的计算开销。论文本质上设计了一组新的损失函数,它结合了深度学习的learning
、以及learning to rank
的文献。来自工业界的若干个数据集的实验结果表明:论文方法的推荐准确性得到显著提升。结合这些改进,RNN
与传统memory-based
协同过滤方法的差异提高到53%
(以MRR
和Recall@20
指标衡量),这表明深度学习方法为推荐系统领域带来了潜力。- 由于深度学习方法需要在多个
相关工作:
session-based
推荐中采用的主要方法之一是item-to-item
推荐方法,该方法主要用于缺失用户画像(指的是用户历史行为信息)时的session-based
推荐。在该setting
中,item-to-item
相似度矩阵是从可用的session
数据中预先计算的,并且在session
中经常被一起点击的item
被认为是相似的。然后在session
期间使用这个相似度矩阵向用户推荐当前点击item
最相似的item
。Long Short-Term Memory: LSTM
网络是一种RNN
,已被证明可以解决困扰普通类型RNN
的优化问题。LSTM
的一个稍微简化的版本是我们在这项工作中使用的Gated Recurrent Unit: GRU
。RNN
已被成功应用于session-based
推荐领域。《Session-based Recommendations with Recurrent Neural Networks》
为session-based
推荐任务提出了一个具有pairwise ranking loss
的RNN
。《Improved Recurrent Neural Networks for Session-based Recommendations》
提出了数据增强技术来提高用于session-based
推荐的RNN
的性能,但是这些技术具有增加训练时间的副作用,因为单个session
被拆分为若干个sub-session
进行训练。《Parallel Recurrent Neural Network Architectures for Feature-rich Session-based Recommendations》
提出了通过特征信息(如来自被点击item
的文本和图像)增强的RNN
用于session-based
推荐,并显示出比普通RNN
模型更好的性能。
RNN
也被用于更标准的user-item
协同过滤setting
,其目的是建模user factor
和item factor
的演变,结果不那么引人注目,所提出的方法几乎没有优于标准的矩阵分解方法。这是意料之中的,因为在数据集的时间范围内,没有强有力的证据表明用户口味的演变,并且对不在相同session
中消费的item
进行序列建模(指的是协同过滤中未考虑session
信息),可能不会带来很大收益。这项工作涉及的另一个领域是针对推荐系统量身定制的损失函数。在这个领域,特别是在矩阵分解技术的背景下,已有一些工作。协同过滤中最早的
learning to rank
技术之一是由《COFIRANK Maximum Margin Matrix Factorization for Collaborative Ranking》
引入的。本质上,该论文引入了一个listwise loss
函数以及用于优化因子的alternating bundle
方法。后续一些工作为协同过滤引入了更多的ranking loss
函数。注意,这些损失函数虽然在矩阵分解中运行良好,但是并不能以任何方式保证它们是RNN
的最佳选择,因为在RNN
中进行反向传播要比在矩阵分解中更加困难。事实上,我们将看到BPR
(一种流行的损失函数)需要进行重大修改,从提高session-based
推荐中的RNN
的效果。与在深度网络中对大输出空间进行采样从而对语言模型进行有效损失计算相关的另一项工作是
blackout
方法(《Blackout: Speeding up recurrent neural network language models with very large vocabularies》
),该方法本质上应用了类似于《Session-based Recommendations with Recurrent Neural Networks》
中使用的采样过程,以便有效地计算categorical cross-entropy loss
。
11.1 输出采样
我们将
《Session-based Recommendations with Recurrent Neural Networks》
中实现的RNN
算法称作GRU4Rec
。在本节中,我们将重新审视GRU4Rec
如何对输出进行负采样并讨论其重要性。我们扩展了负采样技术,增加了additional sample
,并认为这对于提高推荐准确性至关重要。注意,“样本” 有两种含义:一种含义是用于训练的实例,也称作
example
;另一种含义是采样程序所采样到的实例。在这一章节,我们避免使用 “样本”,而代替以example
(用于模型训练)、sample
(用于采样程序)。在每个训练
step
中,GRU4Rec
将session
中当前事件event
的item
(以one-hot
向量表示)作为输入。网络的输出对应于item set
中每个item
的分数score
,代表每个item
成为session
中的next item
的可能性。训练过程会遍历
session
中的所有事件。基于backpropagation through time: BPTT
训练的复杂度为 $ O\left(N_E\left(H^2 + HN_O\right)\right) $ ,其中: $ N_E $ 为training event
的数量, $ H $ 为隐层维度(隐单元数量), $ N_O $ 为输出维度(输出单元的数量,即item set
规模)。计算所有item
的分数是非常不切实际的,因为这使得模型unscalable
。因此,GRU4Rec
使用采样机制并在训练期间仅计算item set
的某个子集的分数。神经网络通常并不是每次训练一个实例
example
,而是每次训练一批example
,这种做法被称作mini-batch training
。mini-batch training
有若干好处:- 更好地利用当前硬件的并行化能力,从而训练更快
training faster
。 - 产生比随机梯度训练更稳定的梯度,从而收敛更快
converging faster
。
GRU4Rec
引入了基于mini-batch sampling
。对于mini-batch
中的每个example
,相同mini-batch
的其它example
作为negative sample
,如下图所示。从算法实现的角度来看,这种方法是实用的,并且对于GPU
也可以有效地实现。- 更好地利用当前硬件的并行化能力,从而训练更快
可以使用三种不同的
listwise ranking loss
函数之一来训练网络(参考后面的小节)。所有损失函数都需要target item
(即next item
的ground truth
)的分数、以及至少一个negative item
(即target item
以外的item
)的分数。ranking loss
的一个特性是:模型只有当target item
的分数没有大幅超越negative item
的分数时才会进行学习,否则item
已经按正确的顺序排列因此模型没有什么可学的(此时梯度接近于零,模型参数几乎不更新)。因此,在进行负采样时,采样到高分item
作为negative item
中至关重要。一个
item
是否高分取决于实际计算分数的context
(即item
序列)。热门item
在许多情况下通常分数都很高,因此基于热度的采样popularity-based sampling
是一种很好的采样策略。mini-batch sampling
基本上是一种popularity-based sampling
的形式,因为一个item
作为negative item
的概率与它在数据集中出现的频次(即,热门程度)成正比。一个
item
在数据集中出现次数越多,则它成为target item
的机会越多,那么它的平均预估分也就越高。popularity-based sampling
的问题在于:当算法学到将target item
排在热门item
之上,模型几乎停止学习(因为target item
已经排序正确,模型接下来没什么可学的),但是模型对于长尾高分item
(这部分item
不是热门的因此未被负采样,但是预估分数仍然很高) 的排序仍然可能不准确。即,模型对热门
item
学习较好,对中长尾item
的学习较差。另一方面,如果使用均匀负采样,那么由于大量低分
negative item
的存在,均匀负采样会减慢学习速度(对于大部分negative item
,target item
已经排序正确因此模型没什么可学)。但是,如果无限期训练,可能会产生整体上更准确的模型(相比popularity-based sampling
)。根据我们的经验,
popularity-based sampling
通常会产生更好的结果(因为均匀负采样需要“无限期”训练才能得到更好的结果)。将负采样与
mini-batch
联系起来有若干实际好处,但由于以下三个原因导致过于严格:mini-batch size
一般较小,从几十到几百不等。如果item set
的规模很大,那么较小的采样规模使得无法包含所有高分的negative item
。mini-batch size
对训练有直接影响。例如,我们发现使用更小的mini-batch size
(30 ~ 100
)进行训练会产生更准确的模型。但是由于并行化,在GPU
上使用更大的mini-batch size
训练会更快。mini-batch sampling
方法本质上是popularity-based
的,这通常是一个很好的策略,但可能不是对所有数据集都是最优的。第三条理由有点无赖,作者并未给出一些例子来说明。
因此,我们使用
additional sample
来扩展GRU4Rec
。我们采样了 $ N_A $ 个item
用作mini-batch
内所有example
所共享的negative item
。 这些additional sample
与来自mini-batch sampling
的 $ N_B-1 $ 个sample
一起使用,其中 $ N_B $ 为mini-batch size
。additional sample
可以通过任何策略采样得到。我们以 $ \text{supp}_i^\alpha $ 成比例的方式进行采样,其中: $ \text{supp}_i $ 为item
$ i $ 的support
(即数据集中出现的次数)。 $ \alpha $ 为采样的超参数( $ 0\le\alpha\le 1 $ ) 。如果 $ \alpha=0 $ 那么就是均匀采样,如果 $ \alpha=1 $ 那么就是popularity-based sampling
。
添加更多
sample
自然会增加复杂度,因为输出单元的数量从 $ N_B $ (popularity-based sampling
)增加到 $ N_A+B_B $ (additional sample
)。然而,计算很容易并行化,因此当sample
规模达到一定规模之前,增加更多sample
对于现代GPU
上的训练时间并没有实际增加。既然
additional sample
的核心是增加高分negative item
,那么我们可以根据先验知识,为每个target item
构建一批高分的negative item
。例如 :当前用户历史点击的item
、当前用户相似的用户历史点击的item
(基于user-to-user
规则)、已有高分negative item
相似的item
(基于item-to-item
规则),等等。这些就是hard
负样本。注意:
- 训练期间不仅要有
hard
负样本,还要有easy
负样本(即低分negative item
)。至于采样到的negative item
的分数分布是否和item set
保持一致,可以探讨。 - 验证、测试、上线推断期间,必须使得采样到的
negative item
的分数分布和item set
保持一致,否则评估结果可能没有说服力。
然而,
additional sample
的有效实现并非易事。根据GPU
上的分布进行采样目前还没有得到很好的支持,因此采样速度很慢,因此它应该由CPU
处理或者需要某种形式的解决方法。- 如果由
CPU
处理,则被采样的item ID
应该与mini-batch
的item ID
一起提供给GPU
。然而,每次生成一个新的mini-batch
时对分布进行采样需要一些时间,因此GPU
的执行经常被中断,导致GPU
利用率低,从而训练缓慢。 - 如果利用
GPU
上某种形式的解决方法,则基于分布的采样被转换为包含多个GPU
操作的一个序列,与我们使用的深度学习框架的内置采样方法相比,整体执行速度更快。
在这两种情况下,单次采样几个
item
的效率都低于单次采样大量item
的效率。因此,我们还实现了一个缓存cache
用于预采样pre-sample
以及存储大量negative sample
。当训练用完这些sample
并且一旦缓存变空(每用一个sample
就会清空对应的缓存),就会重新计算缓存。我们发现,与完全不使用缓存的方案相比,预采样1
千万到1
亿个item ID
显著提高了训练速度。- 如果由
11.2 损失函数设计
本小节中,我们检查
GRU4Rec
中实现的损失函数并确定它们的弱点。我们提出了两种方法来解决交叉熵损失函数的数值不稳定性numerical instability
。我们展示了当我们向输出中添加更多sample
时,使用TOP1 pairwise loss
和BPR pairwise loss
的learning
如何降级degrade
,并提出一组基于pairwise losse
的损失函数来缓解这个问题。我们注意到,虽然我们的目标是改善
GRU4Rec
,但是本小节中提出的损失函数也可以与其它模型一起使用,例如矩阵分解模型。
11.2.1 categorical cross-entropy
categorical cross-entropy
衡量了预测的概率分布 $ \mathbf q $ 和真实分布 $ \mathbf p $ 之间的距离:该损失函数常用于机器学习和深度学习,特别是多类分类问题。
next item
推荐任务可以解释为分类任务,其中class label
是系统中的item id
,每个item
序列所分配的label
是该序列的next item
。 在single-label
场景下(如next item
推荐),真实分布是next item
的one-hot
向量,其中target item
对应的元素为1
而其它所有位置全零。预测的概率分布由分配给每个item
的预测分数组成。注意,output score
需要执行转换从而形成分布的形式,常见的转换是使用softmax
。交叉熵本身是一个
pointwise loss
,因为它是在单个coordinate
上(即分布上的每个点)定义的独立损失的总和。将交叉熵与softmax
相结合会在损失函数中引入listwise
属性,因为coordinate
现在不再是独立的了。结合交叉熵与softmax
,我们得到如下的、定义在score
上的损失函数(假设target item
的索引为 $ i $ ):其中:
$ r_j $ 为item
$ j $ 的预测分数, $ N $ 为item set
大小。修复不稳定性
instability
:GRU4Rec
中可用的损失函数之一是带softmax
的交叉熵。《Session-based Recommendations with Recurrent Neural Networks》
在实验部分报告了交叉熵比其它损失函数略好的结果,但是论文认为交叉熵损失对于大部分超参数空间而言是不稳定的,因此建议不要使用它。这种不稳定性来自于有限的数值精度
limited numerical precision
。假设存在item
$ k $ 使得 $ r_k\gg r_i $ ,由于精度有限,则 $ s_i $ 变得非常小并且四舍五入为零。然后损失函数计算 $ \log 0 $ ,而 $ \log 0 $ 是未定义的。规避该问题的两种方法为:- 计算
$ -\log(s_i + \epsilon) $ ,其中 $ \epsilon $ 是一个非常小的正数(这里我们使用 $ 10^{-24} $ ) 。 - 通过
$ -r_i + \log\sum_{j=1}^N \exp(r_j) $ 来直接计算 $ -\log s_i $ 。
前者引入了一些噪声,而后者不允许
transformation
和loss
分开使用(即, $ -r_i + \log\sum_{j=1}^N \exp(r_j) $ 将transformation
和loss
融合在一起,无法分离使用)。这两种方法都可以稳定stabilize
损失函数,我们没有观察到这两种变体的结果存在任何差异。- 计算
11.2.2 TOP1&BPR
GRU4Rec
提供了两个基于pairwise loss
的损失函数。pairwise loss
将target item
分数与一个negative item
进行比较。如果target item
分数低于negative item
分数,那么损失较大。GRU4Rec
对每个target item
计算多个negative item
的损失,因此损失函数由这些pairwise loss
的均值组成。这导致了一个listwise loss
函数,它由多个pairwise loss
组成。其中一个损失函数是
TOP1
,其定义为:其中:
$ N_S $ 为negative item
数量, $ j $ 在negative item
上迭代, $ i $ 为target item
。这是一个由两部分组成的、启发式的组合损失:
- 第一部分旨在将
target item
分数推高到negative item
分数之上。 - 第二部分旨在将
negative item
分数降低到零。这一部分充当正则化器regularizer
,但它并不是直接约束模型权重,而是惩罚negative item
的高分。由于每个item
在某个训练example
中都充当negative item
,因此通常会降低整体的分数。
- 第一部分旨在将
另一个损失函数是基于流行的
Bayesian Personalized Ranking: BPR
损失,其定义为:该损失函数最大化
target item
分数超过negative item
分数的概率。由于概率 $ P(r_i\gt r_j) $ 是不连续的,因此近似为 $ \sigma(r_i - r_j) $ 。
梯度消失
vanishing gradient
:取每个pairwise loss
的均值会产生不想要的副作用。我们分析TOP1
损失和BPR
损失相对于target item
分数 $ r_i $ 的梯度,结果表明:在某些情况下梯度将消失,因此模型停止学习。TOP1
损失和BPR
损失相对于target item
分数 $ r_i $ 的梯度为:对于
pairwise loss
,人们通常希望得到高分的negative item
,因为这些sample
会产生大的梯度。或者直观而言,如果negative item
的分数已经远低于target item
的分数,那么就不再可以从该negative item
中学到任何东西了。我们将
$ r_j\ll r_i $ 的negative item
记做negative irrelevant item
, $ r_j\gg r_i $ 的negative item
记做negative relevant item
。对于一个negative irrelevant item
$ j $ , $ \frac{\mathcal L_\text{top1}}{\partial r_i} $ 中的 $ \sigma(r_j-r_i) $ 将趋近于零(以及 $ \frac{\mathcal L_\text{bpr}}{\partial r_i} $ 中的 $ 1-\sigma(r_i-r_j) $ 也将趋于零)。因此,任何negative irrelevant item
基本上不会对总梯度增加任何东西。同时,平均梯度总是被negative item
的数量所打折(即,除以 $ N_S $ )。通过增加sample
数量 $ N_S $ ,negative irrelevant item
数量的增加速度比negative relevant item
数量的增加速度更快,因为大多数item
作为negative item
是不相关irrelevant
的。对于non popularity-based sampling
以及大的sample
数量,情况尤其如此。因此,随着sample
数量 $ N_S $ 的增加,损失函数的梯度开始消失。这种梯度消失是违反直觉的,并且损害了算法的潜力。本质上是由于
negative relevent item
的稀疏性导致。- 如果
negative relevent item
和negative irrelevent item
的数量是1:1
的关系,那么 $ N_S $ 的增加不大可能出现梯度消失,因为 $ N_S $ 的增加使得negative relevent item
也同比例的增加。 - 如果
negative relevent item
和negative irrelevent item
的数量是1:100000
的关系,那么 $ N_S $ 的增加很可能出现梯度消失,因为 $ N_S $ 增加一万个但是negative relevent item
数量几乎不变( $ N_S $ 需要增加十万个才会新增一个negative relevent item
),因此使得损失函数的梯度下降很多。
注意,
TOP1
损失对于 $ r_j\gg r_i $ 的negative relevant item
也有些敏感,这是损失函数设计中的疏忽。虽然这种情况不太可能发生,但是也不能排除。例如,在将一个冷门的target item
与非常热门的sample
进行比较时,尤其在学习的早期阶段,target item
分数可能远低于这个热门sample
的分数。我们专注于损失函数对于
target item
分数 $ r_i $ 的梯度, 而损失函数对于negative item
分数 $ r_j $ 的梯度也存在类似的问题。这意味着即使某些
negative item
$ j $ 是relevant
的,损失函数的梯度也会随着negative item
数量 $ N_S $ 的增加而减少。- 如果
11.2.3 ranking-max 损失
为了克服随着
sample
数量 $ N_S $ 增加导致梯度消失的问题,我们提出了基于单个pairwise loss
的、新的listwise loss
系列。基本思想是:将target item
分数与最相关的negative item
分数进行比较。令最相关的negative item
(即分数最大的negative item
)为 $ r_\max^-=\max_j r_j $ ,则这个损失函数定义为:max
函数是不可微的,因此无法应用于梯度下降。因此,我们使用softmax
函数代替max
从而保持损失函数的可微性。注意,这里的softmax
变换仅用于negative item
(即排除 $ r_i $ ),因为我们想要从negative item
中寻找最大的分数。这使得在 $ \mathcal L_\text{pairwise-max} $ 中,每个negative item
都需要考虑它获得最大分数的可能性。基于这个总体思路,我们现在推导出TOP1-max
损失函数和BPR-max
损失函数。softmax
在交叉熵损失、ranking-max
损失中有所区别:- 在交叉熵损失中需要考虑
target item
和negative item
,即 $ s_j = \frac{\exp(r_j)}{\sum_{j^\prime=1}^N \exp(r_{j^\prime})} $ ,这里 $ N $ 为考虑了target item
的集合大小 - 在
ranking-max
损失中仅考虑negative item
,即 $ s_j = \frac{\exp(r_j)}{\sum_{j^\prime=1}^{N_S}\exp(r_{j^\prime})} $ ,这里 $ N_S $ 为不考虑target item
的集合大小。
另外这里的
softmax
还可以引入温度超参数 $ T $ ,但是注意数值稳定性问题(例如 $ T $ 太大导致梯度不稳定)。- 在交叉熵损失中需要考虑
TOP1-max
损失函数:TOP1-max
损失相当简单,它被定义为:其中:
$ s_j = \frac{\exp(r_j)}{\sum_{j^\prime=1}^{N_S}\exp(r_{j^\prime})} $ 为 $ r_j $ 的softmax
值。可以对所有
negative item
应用正则化(即, $ \sum_{j=1}^{N_S} \left(s_j\times\sigma(r_j-r_i) + \sigma\left(r_j^2\right)\right) $ ),而不一定仅对最大分数的negative item
应用正则化。但是我们发现对最大分数的negative item
应用正则化的实验效果更好,因此我们保持这种方式。TOP1-max
损失的梯度是对单个pairwise
梯度的加权平均(注意, $ \sum_{j=1}^N s_j=1.0 $ ),权重为negative item
分数的softmax
值 $ s_j $ ,即:- 如果
$ r_j $ 远小于 $ r_\max^- $ ,那么权重 $ s_j $ 几乎为零,并且分数接近 $ r_\max^- $ 的example
将有更大的权重。这解决了更多sample
导致梯度的问题,因为negative irrelevant item
将被忽略,最终梯度将指向negative relevant item
的梯度。 - 如果所有的
$ r_j $ 都相差无几,这表明所有sample
都是irrelevant
的,那么每个pairwise
梯度将接近于零。这不是什么问题,因为如果target item
分数大于所有negative item
分数,则没有什么可以学习的。
不幸的是,
TOP1-max
损失对于分数很大的negative item
是敏感的,如 $ r_j\gg r_i $ 时导致 $ (1-\sigma(r_j-r_i)) \simeq 0 $ 。这是由于TOP1 pairwise loss
本身所引起的,与我们的聚合方式无关。- 如果
BPR-max
:BPR
的概率性解释为,最大化target item
分数 $ r_i $ 高于 $ r_\max^- $ 的概率。这可以用条件概率重写为:其中:
$ P(r_j = r_\max^-) $ 表示negative item
$ j $ 为最大分数的概率,它以 $ s_j = \frac{\exp(r_j)}{\sum_{j^\prime=1}^{N_S}\exp(r_{j^\prime})} $ 来近似。 $ P\left(r_i\gt r_j\mid r_j = r_\max^-\right) $ 表示target item
分数高于最大分数的negative item
$ j $ 的概率,它以 $ \sigma(r_i-r_j) $ 来近似。
我们想要最小化负的对数似然,则得到损失函数:
这个损失函数对于
target item
$ r_i $ 的梯度为:BPR-max
的梯度是单个BPR
梯度的加权平均,权重为 $ s_j\times \sigma(r_i-r_j) $ 。negative item
$ j $ 和 $ k $ 之间的相对权重为:如果
$ r_i\gg r_j+r_k $ 或者 $ r_i $ 和 $ r_k $ 都很小,那么这个相对权重的行为类似于softmax
。否则这个相对权重就是一个平滑的softmax
。这意味着当
$ r_i $ 很小的时候,negative item
之间的权重分布会更均匀,但是较高分数的negative item
将得到更多关注。随着 $ r_i $ 变得更高,关注将迅速转移到分数高的negative item
上。这是一种理想的行为。
读者注:
BPR-max
并不是简单地对BPR
的softmax
加权,而是移动了log
的位置:Top1-max
损失函数仅仅是将Top1
损失的均匀权重 $ 1/N_S $ 替换为softmax
权重 $ s_j $ 。但是,BPR-max
损失函数将BPR
的均匀权重 $ 1/N_S $ 替换为 $ s_j $ ,并且将作用于 $ \sigma(\cdot) $ 的log
函数变为作用于 $ \sum(\cdot) $ 。另一个版本的
BPR-max
是:这个损失函数似乎比论文中的
$ \mathcal L_\text{bpr-max} $ 更好,因为 $ \mathcal L_\text{bpr-max} $ 对于分数很大的negative item
是敏感的(如 $ r_j\gg r_i $ ,此时 $ \sigma(r_i-r_j)\simeq 0 $ ) ,而 $ \mathcal L_\text{bpr-max-var} $ 不存在这个问题。为什么论文不采用 $ \mathcal L_\text{bpr-max-var} $ 这个损失函数,作者并未说明。读者猜测 $ \mathcal L_\text{bpr-max-var} $ 的效果更好,可以通过实验来验证。损失函数(
TOP1-max
和BPR-max
损失)对于negative item
$ r_j $ 的梯度与softmax score
$ s_j $ 成正比(注,前面给的公式都是针对target item
$ r_i $ 的梯度),这意味着只有接近 $ r_\max^- $ 的negative item
才会被更新。这是有益的,因为如果negative item
的分数很低,则不需要进行参数更新 。- 如果一个
negative item
的分数远高于其它negative item
,那么它的参数将是唯一被更新的,并且梯度将与target item
分数和negative item
分数之间pairwise loss
的梯度一致。 - 如果如果
negative item
的分数比较平衡,那么梯度介于上述梯度和零之间。
- 如果一个
下图描述了在不同
target item
排名的条件下,BPR
损失的梯度和BPR-max
损失的梯度(针对target item
分数 $ r_i $ 的梯度)的表现。target item
排名指的是超过target item
分数的negative item
数量,例如rank 0
表示target item
分数高于所有negative item
。较小的rank
值意味着negative relevant item
较少。该图描述了两种损失相对于
$ r_i $ 梯度取反(即负的梯度)之后的均值,并且在第一个epoch
(训练开始)、第十个epoch
(训练结束)对整个数据集进行评估:- 左图没有使用
additional sample
,仅使用来自mini-batch size = 32
的batch
内其它example
。 - 中图和右图添加了
2048
个additional negative item
,其中右图聚焦于前200
的排名。
可以看到:
当有更多
negative relevant item
(即rank
值更大)时,BPR
的梯度略高。这是很自然的,因为BPR-max
关注的是最接近 $ r_\max^- $ 的sample
,而忽略了其它negative relevant item
。当target item
排名在list
末尾时,这减慢了BPR-max
的学习,但是差异并不显著。另一方面,随着
negative relevant item
数量的减少(即rank
值更小),BPR
的梯度迅速消失。梯度消失的点与sample
总量有关。- 在
sample
总量较小的情况下(左图),BPR
的梯度在rank = 5
附近开始消失。相比之下,BPR-max
直到rank 0
才开始消失。 - 同时,随着
sample
的增多(中图),BPR
梯度非常低(例如在右图看到rank = 5
时BPR
的梯度相比左图要小得多),即使对于rank 100 - 500
也是如此。相比之下,BPR-max
的梯度仍然是在rank
较小的点才开始显著下降。
这意味着,比如说,我们可以优化算法将
target item
的排名从500
优化到50
,但是很难继续推进到排名为5
(因为这时发生了梯度消失,模型无法继续学习)。并且发生梯度消失的点随着sample
量的增加而提前。另一方面,BPR-max
表现良好,并且能够一路提高target item
分数。- 在
- 左图没有使用
分数正则化
score regularization
的BPR-max
:尽管我们表明启发式的TOP1
损失对于分数非常高的negative relevant item
很敏感,但是在《Session-based Recommendations with Recurrent Neural Networks》
中发现它的性能优于BPR
。据我们的观察,TOP1-max
也是优于BPR-max
。部分原因在于很少同时出现 $ r_j\gg r_i $ 且 $ r_j\simeq 0 $ 。如果仅满足 $ r_j\gg r_i $ 但是 $ r_j\gt 0 $ ,那么关于 $ r_i $ 的梯度可能会消失,但是TOP1
的正则化部分保证 $ r_j $ 向零移动,这甚至可能使得下一次更新 $ r_i $ 成为可能。TOP1
中的分数正则化对整个学习过程非常有益,因此即使损失函数可能不是理论上的最优,它也可以取得很好的效果。GRU4Rec
支持两种形式的正则化:模型参数的dropout
和L2
正则化。TOP1
的正则化与这些正则化是不同的。根据我们的经验,模型参数的L2
正则化会降低模型性能。我们的假设是:某些模型权重不应该被正则化,如用于计算更新门update gate
和复位门reset gate
的权重矩阵。对negative item
高分进行惩罚可以约束模型,但是没有显式地正则化权重。因此,我们也在
BPR-max
损失函数中添加了分数正则化。我们尝试了几种分数正则化的方法。性能最好的一种方法是:我们将negative item
分数设置在独立的零均值高斯分布上,高斯分布的方差与softmax
分数成反比。这需要对接近 $ r_\max^- $ 的negative item
分数进行更强的正则化,这在我们的case
中是理想的。我们最小化负的对数似然并像以前一样进行函数近似,从而得到最终形式的
BPR-max
损失函数:其中:正则化项是
negative item
分数进行加权L2
正则化,权重为softmax
分数 $ s_j $ , $ \lambda $ 为正则化系数(一个超参数)。这里的正则化与
TOP1
正则化有三个区别:- 这里使用平方正则化,而
TOP1
使用 $ \sigma\left(r_j^2\right) $ 正则化。 - 这里使用了正则化系数
$ \lambda $ ,而TOP1
没有使用系数。猜测的原因是:在TOP1
中损失部分和正则化部分处于同一个量级(0.0 ~ 1.0
之间),而这里的损失部分和正则化部分处于不同量级。 - 这里更关注
negative item
的高分,使得尽可能将negative item
高分打压下来。而TOP1
是一视同仁,认为negative item
高分的下降,与negative item
低分的下降,效用是相同的。
这意味着我们也可以改造
TOP1
损失,利用平方正则化、正则化系数、以及权重 $ s_j $ 。- 这里使用平方正则化,而
11.3 实验
数据集:
RSC15
数据集:基于RecSys Challange 2015
的数据集,其中包含来自在线电商的点击事件和购买事件。这里我们仅保留点击事件。VIDEO
数据集和VIDXL
数据集:是专属数据集proprietary dataset
,其中包含来自在线视频服务的观看事件。CLASS
数据集:也是一个专属数据集,包含来自在线分类站点的网页浏览事件。
数据集经过轻微的预处理,然后划分为训练集和测试集。单个
session
要么属于训练集、要么属于测试集。我们基于session
首个事件的时间来拆分数据集。RSC15
数据集以及拆分与《Session-based Recommendations with Recurrent Neural Networks》
中的完全相同。VIDXL
数据集和CLASS
数据集以及拆分与《Parallel Recurrent Neural Network Architectures for Feature-rich Session-based Recommendations》
中的完全相同。VIDEO
数据集与《Session-based Recommendations with Recurrent Neural Networks》
中的来源相同,但是子集略有不同。
下表给出了数据集的主要特性。
评估方式:我们评估
next item prediction
,即我们迭代测试集session
以及它们包含的事件。对于每个事件,算法都预测该session
的next event
对应的item
。由于VIDXL
测试集很大,我们将target item
分数与测试期间最热门的50000
个item
的分数进行比较。由于推荐系统一次只能推荐几个
item
,用户选择的实际item
应该包含在推荐列表的前面几个item
中。因此,我们的主要评估指标是recall@20
,即:在所有test case
的推荐列表的top-20
中,具有target item
的case
的比例。召回不考虑target item
的实际排名,只需要它位于推荐列表的top-N
。这很好地建模了某些实际场景,在这些场景中推荐位置和顺序无关紧要。召回率通常也与重要的在线KPI
密切相关,如点击率CTR
。实验中使用的第二个指标是
Mean Reciprocal Rank: MRR@20
,它是target item
的排名倒数reciprocal rank
的均值。如果target item
的rank > 20
,那么排名倒数设为零。MRR
考虑target item
的排名,这适用于推荐顺序很重要的场景,例如更尾部排名的item
仅在屏幕滚动之后才可见。baseline
方法和配置:我们的baseline
是原始的GRU4Rec
算法,我们的目标是对其进行改进。我们将原始论文提出的TOP1
损失视为baseline
。隐层有100
个单元。- 我们还对比了
item-kNN
的性能,这是next item prediction
的一个natural baseline
。 RSC15
、VIDXL
、CLASS
的结果直接取自相应的论文(《Session-based Recommendations with Recurrent Neural Networks》
、《Parallel Recurrent Neural Network Architectures for Feature-rich Session-based Recommendations》
)。VIDEO
数据集以《Session-based Recommendations with Recurrent Neural Networks》
中给出的最佳超参数进行评估。- 我们针对所提出的改进在单独的验证集上进行单独的超参数调优。
这些方法在
Python
中的Theano
框架下实现。- 我们还对比了
11.3.1 additional sample
第一组实验检查了
additional negative item
对于推荐准确性的影响。我们在CLASS
数据集和VIDEO
数据集上进行了实验。由于结果非常相似,因此我们剔除了VIDEO
数据集的结果从而节省一些空间。下图描述了不同损失函数(TOP1
、交叉熵、TOP1-max
、BPR-max
)的网络的性能。我们度量了不同数量的additional sample
下的推荐准确性,也度量了没有任何采样并计算所有得分时的推荐准确性(即x
轴为ALL
的点)。正如我们之前所讨论的,后一种情况更具理论性,因为它是不可scalable
的。正如理论所暗示的,
TOP1
损失不能很好地处理大量的sample
。当增加少量的additional sample
时,模型性能略有提高,因为包含negative relevant item
的机会在增加。但是随着sample
的继续增加,模型性能迅速下降,因为会包含大量negative irrelevant item
。另一方面,所有其它三个损失函数都对添加更多
sample
反应良好。对于交叉熵损失,收益递减的点发生在大约几千个
additional sample
。而
TOP1-max
在那个点之后开始略微降低准确性。BPR-max
随着更多的sample
而性能一直提升,但是在使用到所有item
时会略微降低准确性。BPR-max
使用所有item
时,会失去随机性。众所周知,一定程度上的随机性有利于学到更好的模型。
添加
additional sample
会增加计算成本,但由于现代GPU
上易于并行化,大部分成本都得到了缓解。下图显示了不同sample size
的训练时间。注意,y
轴的时间为对数坐标。实际的训练时间不仅取决于数据集,还取决于模型超参数(尤其是
mini-batch size
)以及框架如何支持某些用于计算损失函数的算子。然而,所有损失的趋势都是相似的。- 例如,网络的完整训练大约需要
6 ~7
分钟,即使增加到512
个additional sample
也不会增加训练时间。 - 在收益递减的点,即在
2048
个additional sample
时,训练时间仍然在7 ~ 8
分钟左右,只是略有增加。 - 在那之后,由于超出了我们使用的
GPU
的并行化能力,训练时间迅速增加。
VIDEO
数据集上的趋势也是相似的,训练时间从20
分钟左右开始,在2048
个additional sample
时开始增加(到24
分钟),此后迅速增加。这意味着与数据增强方法不同,我们提所提出的方法在实践中使用时可以是零成本或很少的额外成本的。- 例如,网络的完整训练大约需要
在接下来的实验中,我们对控制采样的
$ \alpha $ 参数进行参数敏感性分析。下图给出了交叉熵、TOP1-max
、BPR-max
在不同 $ \alpha $ 值上的性能。对于交叉熵,当
sample size
较小时它倾向于较高的 $ \alpha $ 值,当sample size
较大时它倾向于较低的 $ \alpha $ 值。这与我们在前面的讨论是一致的:热门sample
在sample size
非常有限并且训练开始阶段非常有用,但是可能很快就会耗尽。 因此,如果我们有办法(例如足够大的sample size
)切换到更平衡的采样,那么可能是有益的。此外,在这种情况下,均匀采样可以被少量的、从minibatch
采样得到的popularity based sample
所补充。另一方面,
ranking-max loss
似乎更喜欢中间略偏高一点的值,而在极端情况下的表现最差。我们假设这主要是由于:- 它们是基于
pairwise losse
,而这通常需要popular sample
。 - 它们采用了
score regularization
:通过popularity based sampling
,最热门item
的分数将降低到超出预期的水平,因此效果较差。
- 它们是基于
11.3.2 损失函数
我们度量了所提出的改进在
baseline
上的性能增益。准确性的大幅提升来自于additional sample
和损失函数的组合。下图展示了我们最重要的结果。除了原始版本的GRU4Rec
和item-kNN
之外,我们还包括了没有additional sampling
的交叉熵cross-entropy: XE
损失的结果,从而确认固定交叉熵损失的性能仍然略好于TOP1
。additional sample
和适当的损失函数的组合,其效果是惊人的,其最好的结果比原始GRU4Rec
的准确性高出18% ~ 37.5%
、比item-kNN
的准确性高出55%
。当都采用additional sample
时,BPR-max
的性能与交叉熵相似或更好。实际上发现带
additional sample
的交叉熵损失函数已经效果很好了,将交叉熵损失替换为ranking-max
损失的收益不大。在
RSC15
上,《Improved Recurrent Neural Networks for Session-based Recommendations》
使用数据增强报告了recall@20
大约在0.685
、MRR@20
大约在0.29
。与我们的解决方案不同,数据增强大大增加了训练时间。数据增强和我们的改进并不互斥,因此通过结合这两种方法,可以获得更好的结果。
11.3.3 统一的 item representation
以前的实验没有发现在
GRU layer
之前使用embedding layer
的任何好处。embeddinhg layer
的作用是将item ID
转换为潜在representation
空间。在推荐系统的术语中,item embedding
对应于item feature vector
。现有的GRU
网络已有另外一个item feature matrix
,它是output weight matrix
的形式。通过统一representation
,即在embedding layer
和output layer
之间共享权重矩阵,我们可以更快地学习更好的item representation
。初步实验(如下表)显式,对于大多数数据集,
recall@20
有额外的轻微改进,而MRR@20
则略有下降。然而,对于CLASS
数据集,当使用统一embedding
时,召回率和MRR
都显著增加。此外,统一embedding
还具有将整体内存占用和模型大小减少约4
倍的额外好处。作者并没有探索这里的原因,遗憾。
11.3.4 在线测试
基于本文提出的改进,在
online video portal
上的大规模在线A/B test
中评估GRU4Rec
在技术上也变得可行。推荐展示在每个视频页面上,并且在页面加载后立即可用。该网站具有自动播放功能,类似于Youtube
上的。如果用户点击推荐的某个item
、或者通过自动播放来访问推荐的某个item
(这意味着用户开始访问推荐队列),那么系统不会计算新的推荐列表,因此用户可以与一组推荐的item
进行多次交互。用户也可以直接访问视频(而不是通过推荐列表的方式,比如直接访问视频的url
地址),那么系统为该用户生成一组新的视频推荐。实验配置:将
GRU4Rec
与经过微调的复杂推荐逻辑进行比较,持续时间为2.5
个月。用户分为三组:第一组由
baseline
逻辑提供推荐服务。第二组由
GRU4Rec
以next best
来提供推荐服务,这意味着算法推荐的item
很可能是用户session
中的next item
。第三组由
GRU4Rec
以sequence mode
来提供推荐服务,其中GRU4Rec
根据迄今为止的session
来生成一个item
序列。序列是贪婪地生成的,即算法假设它的next guess
到目前为止是正确的。sequence mode
会生成next item
、next next item
... 等等的序列,而不是next item
。
机器人
bot
和power
用户(例如,长时间播放视频的用户)会从评估结果中过滤掉,因为它们可能会扭曲结果。机器人是根据user agent
过滤的。每天过滤掉身份不明的机器人和power
用户以及具有不切实际行为模式的用户。受过滤影响的non-bot
用户比例非常低(占比大约0.1%
)。评估指标:我们使用不同的
KPI
来评估效果,每个KPI
都与推荐请求的数量相关:观看时长是该组观看视频的总秒数,视频播放量是改组至少观看了一定时长的视频数量,点击量是改组点击推荐的次数。当实验组和对照组的请求数量几乎相等时,总量的比较结果与均值的比较结果几乎相同。
下图展示了
GRU4Rec
相对于复杂逻辑的相对性能增益。error bar
代表p=0.05
的置信区间。GRU4Rec
在两种预测模式下都优于baseline
。观看时长提高了5%
、视频播放量提高 了5%
、点击量提高了4%
。- 在观看时长和视频播放量方面,
sequence mode
比next best
的表现更好,但是在点击量方面则不然。这是因为sequence mode
更适合自动播放功能,从而导致用户的点击量减少。另一方面,虽然基于next best guess
的预测是相关的,但是它们是更加多样化的,并且用户更有可能跳过推荐列表中的视频。sequence mode
更适合视频系列video series
和其它紧密结合的视频。 - 我们还注意到,随着两种预测模式同时运行,并通过反馈环
feedback loop
从彼此的推荐中学习,它们之间观看时长和视频播放量的差异开始慢慢消失。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论