数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
十四、 Netflix BellKor Solution [2009]
Netflix
数据集包含从1999-12-31
到2005-12-31
期间,所有用户在所有电影上的评分。其中用户数量为 $ m=480189 $ ,电影数量为 $ n=17770 $ ,评分数量超过1
亿,每个评分关联有评分日期。另外,所有用户都是脱敏的。比赛数据以
training-test
的形式给出,其中:大约420
万个评分被保留,这些评分包括每个用户最近的9
部电影评分。如果用户评论电影的数量少于18
个,则保留的电影评分数量会少于9
部。剩余的电影评分都作为训练集给出。保留的电影评分被随机划分为三个数据集:
Probe
数据集:这部分数据集给出了label
,即评分。参赛选手可以自由地在本地利用这部分数据集来作为训练或测试。Quiz
数据集:这部分数据集未给出label
。参赛选手可以将他们模型在Quiz
数据集上的预估结果上传到比赛网站,网站会给出Quiz
数据集上的评估的RMSE
,并根据该RMSE
在公开的排行榜上公布。在比赛结束之前,参赛者可以反复提交他们的在
Quiz
数据集上的预估评分,每次都可以看到网站给出的RMSE
结果。Test
数据集:这部分数据集未给出label
。参赛选手可以将他们模型在Test
数据集上的预估结果上传到比赛网站,但是只有到比赛结束的那一刻网站才会公布在Test
数据集上的评估的RMSE
。网站取其中得分最高的结果作为获胜者。
与训练集相比,保留的电影评分数据集包含更多评分稀疏的用户,因此更难预测。从某种意义上看,这代表了对协同过滤系统的实际需求:系统需要从已有的评分中预估新的评分,并且平等地对待所有用户,而不仅仅是活跃用户。
论文
《The BellKor Solution to the Netflix Grand Prize》
给出了作者参加Netflix
比赛获胜的模型及其思路,论文中所有的结果都是在Quiz
数据集上评估的。令用户 $ u $ 对电影 $ i $ 的评分为 $ r_{u,i} $ ,评分取值为
1~5
分;令用户 $ u $ 对电影 $ i $ 的预估评分为 $ \hat r_{u,i} $ 。令评分时间为 $ t_{u,i} $ ,其粒度为天级。大约
99%
的user-item
评分是缺失的,因为一个用户通常只会观看很小一部分比例的电影。因此定义观察到的 $ (u,i) $ 集合为: $ \mathcal K = \{(u,i)\mid r_{u,i} \text{ is known}\} $ 。注意: $ \mathcal K $ 也包含了Probe
集合。定义所有用户集合为 $ \mathbb U $ , 所有电影集合为 $ \mathbb I $ ,用户 $ u $ 的评分电影集合为 $ \mathbb I_u $ ,定义电影 $ i $ 收到评分的用户集合为 $ \mathbb U_i $ 。
另外,在
Quiz
数据集和Test
数据集中,我们知道用户对哪些电影评分,但是具体评分不知道。评分这一行为(即使不知道具体数值)已经包含了有效信息,因此我们定义集合 $ \mathbb N_u $ 为用户 $ u $ 发生评分行为的电影集合。 $ \mathbb N_u $ 是 $ \mathbb I_u $ 的扩展,因为它考虑了Quiz
数据集和Test
数据集。在比赛中,为了防止过拟合我们使用 $ L_2 $ 正则化。
另外,所有超参数都是通过手动搜索的方式来调优:执行多次搜索并在
Netflix
的Probe
数据集上选择RMSE
最佳的参数。这种方式并不是最优的,有两个原因:- 首先一旦设置了超参数的值,我们就不会对其进行修改。但是如果未来引入了新的超参数,则可能还需要回过头来修改它的值,使得整体效果最优。
- 其次我们在相同算法的多个变种之间使用了相同的超参数值,事实上需要对每个变种进行更精细的调整从而使用不同的超参数值。
我们之所以选择这种方便快捷、但是准确性较低的方式是因为我们的经验表明:单个预测器
predictor
上准确性的过度调整,并不能在整体组合predictor
中起到多大贡献。我们采用的是多个模型混合
blending
的方式,而不是采用单个模型。
14.1 Baseline Predictor
协同过滤模型试图建模
user
和item
之间的交互interaction
,这些交互使得用户对不同电影产生了不同的评分。但是,很多观察到的评分是由于用户或item
本身导致的,与user-item
的交互无关。典型的例子是:系统中某些用户的评分普遍高于其它用户,即user bias
;另外系统中某些item
收到的评分也普遍高于其它item
,即item bias
。我们在
baseline predictor
中封装了不涉及user-item
交互的因素,这使得后续的predictor
可以专注于建模user-item
交互的部分。令 $ \mu $ 为所有用户在所有电影上的平均评分,则用户 $ u $ 对电影 $ i $ 的
$ b_{u,i} = \mu + b_u + b_i $baseline
预估为:其中参数 $ b_u $ 表述用户 $ u $ 的
bias
,参数 $ b_i $ 为电影 $ i $ 的bias
。如:假设所有用户在所有电影上的平均评分为 $ \mu = 3.7 $ 分。“张三” 是比较苛刻的用户,其评分普遍比平均水平低
0.3
分;电影 《流浪地球》 比较热门,其评分普遍比平均水平高0.5
分。则“张三” 对于 《流浪地球》 的评分预估为 $ 3.7 + 0.5 - 0.3 = 3.9 $ 分。求解参数 $ b_u,b_i $ 的一种简单方法是分别计算 $ b_i $ 和 $ b_u $ :
首先对每个电影 $ i $ ,根据它收到评分对 $ \mu $ 的偏离的均值来计算 $ b_i $ :
$ b_i = \frac{\sum_{u\in \mathbb U_i}(r_{u,i} - \mu)}{\lambda_1 + |\mathbb U_i|} $然后对每个用户 $ u $ ,根据用户评分对 $ \mu $ 和 $ b_i $ 的偏离的均值来计算 $ b_u $ :
$ b_u = \frac{\sum_{i\in \mathbb I_u}(r_{u,i} - \mu - b_i)}{\lambda_2 + |\mathbb I_u|} $其中分母中的 $ \lambda_1,\lambda_2 $ 为正则化参数,这是为了防止除以零。这两个参数通过对
Probe
数据集交叉验证得到,这里我们使用 $ \lambda_1 = 25,\lambda_2 = 10 $ 。求解参数 $ b_u,b_i $ 的一种更准确的方法是求解下列目标函数的最优化问题:
$ \min_{\mathbf {\vec b}} \sum_{(u,i)\in \mathcal K}(r_{u,i} - \mu - b_u - b_i)^2 + \lambda_3\left(\sum_u b_u^2 + \sum_i b_i^2\right) $这里 $ \mathbf {\vec b} $ 代表所有的用户和
item
的bias
。第一项表示通过 $ b_{u,i} $ 来拟合 $ r_{u,i} $ ;第二项为正则化项来防止过拟合。该最优化问题可以通过随机梯度下降法来求解。在实际应用中我们也采用这个更准确的求解方法。
14.1.1 时间效应
随着时间的变化,
baseline predictor
有两个主要影响:- 电影的热门程度会发生变化。如,电影可能会受到外部事件的发生而热门或爆冷。因此我们将
item bias
$ b_i $ 作为时间的函数。 - 用户的平均评分会发生变化。如,用户可能会因为近期失业或失恋从而对电影的整体评分下降。因此我们将
user bias
$ b_u $ 作为时间的函数。
因此带时间效应的
$ b_{u,i} = \mu + b_u(t_{u,i}) + b_i(t_{u,i}) $baseline predictor
在时刻 $ t_{u,i} $ 的预估值为:其中 $ b_u(t), b_i(t) $ 都是时间相关的实值函数。
- 电影的热门程度会发生变化。如,电影可能会受到外部事件的发生而热门或爆冷。因此我们将
长期的时间效应和短期的时间效应是不同的。一方面,我们不希望电影每天的热门程度都在波动,而是在更长周期内变化;另一方面,我们观察到用户的时间效应每天可能变化,这反映出用户行为的天然不一致性
inconsistency
。因此与电影的时间效应相比,用户的时间效应更短期,因此捕获用户的时间效应需要更高的分辨率(即时间粒度更细)。
我们首先建模电影的时间效应。我们发现可以将
item bias
根据时间分桶,在每个桶内item bias
都是固定的。- 分桶数量越大,则时间粒度越细(即,分辨率更高),但是每个桶内的评分数量越少,统计结果越不准确。
- 分桶数量越小,则时间粒度越粗(即,分辨率越低),但是每个桶内的评分数量越多,统计结果越准确。
因此我们需要在分辨率和桶内评分数量之间取得平衡。实际上,很多不同的分桶大小都可以产生相同的模型预估准确率。在我们的实现方式中,我们使得每个分桶对应于连续十周的数据,从而仅用
30
个分桶就覆盖了数据集的所有日期。每个时间 $ t $ 关联一个桶编号 $ \text{Bin}(t) $ ,在我们这里它就是一个从
$ b_i(t) = b_i + b_{i,\text{Bin}(t)} $1
到30
的整数。每个item bias
被拆分为一个稳定的部分、一个时变的部分:通过最近 $ N $ 天的统计量来刻画 $ b_i(t) $ 。但是两个前提:
item
的bias
波动缓慢,统计数据规模足够大从而置信。在
item
上对item bias
分桶的效果很好,但是在user
方面这是一个挑战。一方面我们希望为用户提供更高的分辨率,从而捕获短期的时间效应;另一方面我们希望每个分桶内有足够数量的评分从而产生可靠的参数估计。可以考虑为
user bias
使用不同的表现形式,一个简单的选择是:使用线性函数来捕获user bias
随时间的偏移drift
。对用户 $ u $ , 定义其平均的评分日期为 $ t_u $ 。假设用户 $ u $ 在日期 $ t $ 有过评分,则在日期 $ t $ 定义:
$ \text{dev}_u(t) = \text{sign}(t-t_u)\times |t-t_u|^\beta = \begin{cases} |t-t_u|^\beta,&t \ge t_u\\ - |t-t_u|^\beta,& t\lt t_u \end{cases} $其中:
- $ |t-t_u| $ 衡量时刻 $ t $ 到 $ t_u $ 之间的天数。
- $ \text{sign}(\cdot) $ 为符号函数。
- $ \beta \gt 0 $ 为超参数,它根据
Probe
数据集进行交叉验证得到,这里我们设置为 $ \beta = 0.4 $ 。
则
$ b_u(t) = b_u +\alpha_u\times \text{dev}_u(t) $user-bias
定义为线性函数:其中 $ \alpha_u $ 为斜率, $ b_u $ 为截距,它们都从数据中学习得到。
这里用线性函数来拟合,虽然简单但是实用。当然也可以采用更复杂的函数来拟合。
建模
user bias
的线性函数和用户行为中的渐进式漂移gradual drift
相吻合。但是我们还观察到用户的突发式漂移sudden drift
。如,我们发现用户在某一天给出的多个评分往往几种在单个值。这种效应的跨度通常不到一天,这很可能反映了用户当时的心情。为解决这种超短期效应,我们为每个用户在每一天配置了一个参数 $ b_{u,t} $ ,从而解决
$ b_u(t) = b_u + \alpha_u\times \text{dev}_u(t) + b_{u,t} $day-specific
效应:考虑了以上这些时间效应之后,
$ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} + b_i + b_{i,\text{Bin}(t_{u,i})} $baseline predictor
现在为:如果将它作为一个独立的
predictor
,则其在Quiz
数据集上的RMSE
结果为0.9605
。除了
item bias
和user bias
之外,另一个时间效应影响的因素是用户评分范围(即评分的上限和下限)的改变。之前我们考虑
$ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) $item bias
$ b_i(t) $ 时,认为item bias
是和用户无关的。事实上由于用户的评分范围的变化, $ b_i(t) $ 也不完全和用户无关。为解决该问题,我们定义一个用户相关的、依赖时间的范围参数 $ c_u(t) $ ,则baseline predictor
进一步改进为:$ c_u(t) $ 的实现可以参考 $ b_u(t) $ ,即:
$ c_u(t) = c_u + c_{u,t} $其中 $ c_u $ 是 $ c_u(t) $ 的时不变的部分, $ c_{u,t} $ 代表每天变化的部分。
采用了 $ c_u(t) $ 之后,
baseline predictor
在Quiz
数据集上的RMSE
下降到了0.9555
。有意思的是,这个不包含
user-item
交互的基准模型得到了和Netflix Cinematch
推荐系统几乎相同的效果,后者在Quiz
数据集上的RMSE
为0.9514
。这种思考方式是自顶向下拆解任务的模型:先判断影响任务的背后要素,然后对这些要素分别建模。
14.1.2 频次效应
我们位于另一个参赛小组的同事发现的规律引起了我们的注意:用户在给定日期的评分数量是当天数据变化的重要因素。
令 $ F_{u,i} $ 为用户 $ u $ 在日期 $ t_{u,i} $ 上评分的数量,则它就是当天的评分频次。考虑到不同用户的频次差异非常大,我们采用对数之后四舍五入,即 $ f_{u,i} = \lfloor \log_a F_{u,i}\rfloor $ , $ a $ 为超参数。
有意思的是:即使 $ f_{u,i} $ 完全由用户 $ u $ 驱动,它也会影响
$ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) + b_{i,f_{u,i}} $item bias
而不是user bias
。其原因在后面解释。因此,对于每个item
$ i $ ,我们定义变量 $ b_{i,f} $ ,它捕获item
$ i $ 在对数频次 $ f $ 上的bias
。因此baseline predictor
进一步改进为:我们注意到:将 $ b_{i,f_{u,i}} $ 乘以 $ c_u(t_{u,i}) $ 也是有道理的,因为这表示对
bias
的范围进行约束。但是我们并未在实际中应用,也没有对此展开实验。将频次项添加到
item bias
中的效果非常明显,baseline predictor
在Quiz
数据集上的RMSE
从0.9555
下降到了0.9278
。这已经优于原始的Netflix Cinematch
算法。对于
baseline predictor
无论它多么准确,都无法产生个性化的推荐,因为它没有包含任何user-item
之间的交互。从某种意义上讲,它捕获了与个性化推荐不太相关的数据部分,这使得后续的个性化推荐模型能够使用更加干净、更加高质量的数据,从而产生更好的推荐。频次为什么效果好?为观察频次贡献的来源,我们有两个经验洞察:
- 首先可以看到:对于单独的
baseline predictor
,引入频次项的效果非常强大。但是在后面我们将会看到,它们在完整的predictor
中贡献小得多。当添加了user-item
交互项(矩阵分解方法或邻域方法)时,它们的大部分收益都会消失。 - 其次,频次与
item bias
配合使用时似乎有所帮助,但是与user bias
配合使用时却毫无帮助。
- 首先可以看到:对于单独的
频次有助于区分用户对大量电影进行评分的日期,通常这些评分日期和用户观看电影的日期有一定的距离,这使得评分日期的评分和观看日期的评分存在一定差异。我们认为:当用户进行大量评分时,用户仍然会反映其正常偏好,但是电影会呈现不对称的评分。
某些电影被部分用户喜欢,并能很长时间内记住(印象深刻);但是另一部分用户不喜欢它们,并逐渐遗忘掉,即沉默的负样本。因此,只有非常喜欢它们的用户才会在观看日期之后一段时间对其进行评分,而不喜欢它们的用户则压根不会想起它们。
这在热门电影上表现得非常明显,即:要么被用户喜欢且记忆深刻,要么被用户遗忘或忽略。
某些电影很糟糕,不喜欢它们的用户总是做出负面评价;但是另一部分喜欢的用户会逐渐将其遗忘,即沉默的正样本。因此,在观看电影很长时间之后,只有不喜欢该电影的用户才对其进行评分。
这就解释了这种
bias
和电影相关联,和用户无关联。这也解释了为什么当添加了user-item
交互项时,大多数效果消失了:这些交互项已经 “了解” 用户对于电影是喜欢还是不喜欢。因此,我们假设高频次并不能代表用户偏好的较大变化,但是我们假设大多数情况下高频次会对电影的频分带来
bias
:有些电影会带来大量的正面评价(沉默的负样本)、有些电影会带来大量的负面评价(沉默的正样本)。进一步验证我们的假设具有实际意义。如果频次确实代表了选择性的偏见
biased selection
,则应该将它们视为噪声,并在进行推荐的时候分离出来。即:训练的时候考虑频次项,但是推荐的时候剔除这一项。因为我们考虑的是:给用户推荐的时候,用户的当时的评价(而不是经过一段时间之后)。
14.1.3 预测未来
我们的模型包含大量的
day-specific
具体于日期的参数,如 $ b_{u,t_{u,i}}, c_{u,t_{u,i}},b_{i,f_{u,i}}, b_{i,\text{Bin}(t_{u,i})} $ 。在训练期间我们可以从训练数据中学得它们的值,但是在预测期间,尤其时在未来的日期(如明天),如何选择它们的取值?比如在训练集中 $ t_{u,i} $ 最大为300
,但是预测时 $ t_{u,i} = 301 $ 。一种简单的方法是:将这些具体于日期的参数设为默认值,如 $ c_{u,t_{u,i}} $ 默认为零, $ b_{u,t_{u,i}} $ 默认为零。
一个问题是:如果我们不能用这些具体于日期的参数来预估未来的评分,那么它们存在的意义是什么?我们大费周章的建立模型、训练参数,结果在预测期间将它们都置为零,似乎这些参数存在的意义不大。
事实上,我们对时间的建模并未尝试捕获未来的变化,它捕获的是短时效应,这些短时效应对用户的历史反馈产生了重大影响。当模型识别出这类影响时,必须对其进行打压以便让我们能够对更长期的信号进行建模。这使得我们的模型可以更好的捕获数据的长期特征,同时让这些
day-specific
参数吸收掉短期的波动。因此,
day-specific
参数完成了训练数据的清理,从而改善了模型对将来的预测。
14.1.4 混合模型
我们最终的混合模型包含了时间效应的
$ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) $baseline predictor
:为学习参数 $ b_u,\alpha_u,b_{u,t},b_i,b_{i,\text{Bin}(t)},c_u,c_{u,t} $ 我们最小化目标函数,并通过随机梯度下降法来优化:
$ \mathcal L = \sum_{(u,i)\in \mathcal K}\left (r_{u,i} - \mu-b_u - \alpha_u\times \text{dev}_u(t_{u,i}) - b_{u,t_{u,i}} -\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times (c_u+c_{u,t_{u,i}}) \right )^2 +\\ \lambda_1 b_u^2+\lambda_2 \alpha_u^2 + \lambda_3b_{u,t_{u,i}}^2 + \lambda_4 b_i^2+\lambda_5 b_{i,\text{Bin}(t_{u,i})}^2+\lambda_6(c_u-1)^2 +\lambda_7 c_{u,t_{u,i}}^2 $我们对每个参数都是用独立的学习率、对每个参数使用独立的正则化系数:
注意: $ c_u $ 的正则化尽可能接近
1.0
,其它正则化则尽可能接近0.0
。另外,除了 $ c_u $ 的初始值为1.0
之外, 所有其它参数的初始化值为0.0
。该
predictor
在Quiz
数据集上的RMSE
为0.9555
。我们最终的混合模型包含了频次效应的
$ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) + b_{i,f_{u,i}} $baseline predictor
:我们也是用随机梯度下降进行优化,并使用独立的学习率、正则化系数。
对于超参数 $ a $ 我们选择为
6.76
。该
predictor
在Quiz
数据集上的RMSE
为0.9278
。我们将这个模型记作[PQ1]
。
14.2 MF Predictor
MF
模型假设每个用户 $ u $ 关联一个用户因子向量 $ \mathbf{\vec p}_u\in \mathbb R^d $ ,每个item
$ i $ 关联一个item
因子向量 $ \mathbf{\vec q}_i\in \mathbb R^d $ , $ d $ 为向量的维度。另外,可以将 $ \mathbb N_u $ 视为用户 $ u $ 隐式反馈的item
集合(知道有评分,但是不知道评分的具体取值)。因此,每个item
$ i $ 还关联一个item
隐式反馈因子向量 $ \mathbf{\vec y}_j\in \mathbb R^d $ 。进一步的,我们考虑时间效应,即:用户的偏好随着时间改变,即 $ \mathbf{\vec p}_u(t) $ 。这里我们认为
$ \hat r_{u,i} = b_{u,i} + \mathbf{\vec q}_i\cdot \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right) $item
的特质是时不变的。因此得到timeSVD ++
模型:其中 $ b_{u,i} $ 为考虑时间效应的
$ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) $baseline predictor
:注意:这里的归一化形式为 $ |\mathbb N_u|^{-\alpha} $ ,我们选择了 $ \alpha = \frac 12 $ 。
我们对 $ \mathbf{\vec p}_u(t) $ 的每个分量进行建模:
$ \mathbf{\vec p}_u(t) = \left(p_{u,1}(t),\cdots,p_{u,d}(t)\right)^T $类似于
$ p_{u,k}(t) = p_{u,k} + \alpha_{u,k}\times \text{dev}_u(t) + p_{u,k,t} $user bias
,我们有:其中:
- $ p_{u,k} $ 捕获了用户因子的时不变部分,即用户兴趣的稳定部分。
- $ \alpha_{u,k}\times \text{dev}_u(t) $ 捕获了用户因子的时间线性变化部分,即用户兴趣的长期变化部分。
- $ p_{u,k,t} $ 捕获了用户因子的瞬时变化部分,即用户的兴趣的
day-specific
部分。
我们还可以使用内存效率更高的版本,此时没有
$ p_{u,k}(t) = p_{u,k} + \alpha_{u,k}\times \text{dev}_u(t) $day-specific
部分:我们还可以引入频次效应。由于频次会影响电影的感知,因此我们尝试将频次诸如到
$ \hat r_{u,i} = b_{u,i} +\left(\mathbf{\vec q}_i + \mathbf{\vec q}_{i,f_{u,i}}\right)\cdot \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right) $item
因子向量中。因此,我们为每个电影因子建立另一个版本:这里 $ b_{u,i} $ 为引入频次效应的
$ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) + b_{i,f_{u,i}} $baseline predictor
:这里 $ \mathbf{\vec q}_{i,f_{u,i}} = (q_{i,1,f_{u,i}},\cdots,q_{i,d,f_{u,i}})\in \mathbb R^d $ 。
注意:虽然引入了频次效应的
item bias
效果非常显著,但是引入了频次效应的item
因子(即 $ \mathbf{\vec q}_{i,f_{u,i}} $ )的增益非常小。我们在最终混合模型中包含了矩阵分解的多个变种。所有模型都是通过直接应用于原始数据的随机梯度下降来学习,无需任何预处理或后处理。
在对模型混合的过程中,我们发现 每个
predictor
的过拟合是有益的。即:让每个predictor
训练更长的step
, 从而对训练集过拟合。第一个
$ \hat r_{u,i} = b_{u,i} + \mathbf{\vec q}_i\cdot \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right)\\ p_{u,k}(t) = p_{u,k} + \alpha_{u,k}\times \text{dev}_u(t) $MF predictor
为:bias
相关参数的学习率和正则化系数如下:对于因子向量 $ \mathbf{\vec p}_u,\mathbf{\vec q}_i,\mathbf{\vec y}_j $ ,我们使用
0.0015
的正则化系数,初始学习率为0.008
并以0.9
的衰减系数在每轮迭代中衰减。 对于 $ \alpha_{u,k} $ ,其学习率为1e-5
,正则化系数为50
。该
predictor
的三个变种,以及各自在Quiz
数据集上的RMSE
为:xxxxxxxxxx
31 d=20, 迭代step = 40, RMSE = 0.89142 d=200, 迭代step = 40, RMSE = 0.88143 d=500, 迭代step = 50, RMSE = 0.8815第二个
$ \hat r_{u,i} = b_{u,i} + \mathbf{\vec q}_i\cdot \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right)\\ p_{u,k}(t) = p_{u,k} + \alpha_{u,k}\times \text{dev}_u(t) + p_{u,k,t} $MF predictor
为:$ p_{u,k,t} $ 的学习率为
0.004
,正则化系数为0.001
。其它参数的学习率和正则化系数如前所述。每个predictor
也针对训练集过拟合。该
predictor
的两个变种,以及各自在Quiz
数据集上的RMSE
为:xxxxxxxxxx
21 d=200, 迭代step = 80, RMSE = 0.88252 d=500, 迭代step = 110, RMSE = 0.8841第三个
$ \hat r_{u,i} = b_{u,i} +\left(\mathbf{\vec q}_i + \mathbf{\vec q}_{i,f_{u,i}}\right)\cdot \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right)\\ p_{u,k}(t) = p_{u,k} + \alpha_{u,k}\times \text{dev}_u(t) + p_{u,k,t} $MF predictor
为:$ \mathbf{\vec q}_{i,f_{u,i}} $ 的学习率为
2e-5
,正则化系数为0.02
。其它参数的学习率和正则化系数如前所述。每个predictor
也针对训练集过拟合。该
predictor
的六个变种,以及各自在Quiz
数据集上的RMSE
为:xxxxxxxxxx
61 d = 200, 迭代step =40, RMSE=0.87772 d = 200, 迭代step =60, RMSE=0.87873 d = 500, 迭代step =40, RMSE=0.87694 d = 500, 迭代step =60, RMSE=0.87845 d = 1000, 迭代step =80, RMSE=0.87926 d = 2000, 迭代step =40, RMSE=0.8762我们将其中 $ d=200 $ 以及迭代
step
为40
的变种记作[PQ2]
。
14.3 Neighborhood Predictor
除了矩阵分解之外,邻域模型也是协同过滤常用的方法。尽管邻域方法的准确性通常不如矩阵分解方法,但是邻域方法具有可解释性、对新输入的评分无需重新训练模型等优点而受到欢迎。
邻域模型通常分为
Userbased CF
和Itembased CF
,这里我们主要基于Itembased CF
。我们考虑邻域模型:
$ \hat r_{u,i} = b_{u,i} + |\mathbb I_u|^{-1/2} \sum_{j\in \mathbb I_u}(r_{u,j}-\tilde b_{u,j})w_{i,j} + |\mathbb N_u|^{-1/2} \sum_{j\in \mathbb N_u} c_{i,j} $其中:
$ b_{u,i} $ 为
baseline predictor
,它给出了user-item
交互以外的预估部分。$ w_{i,j} $ 为基于显式反馈得到的
item-item
相似度。$ \tilde b_{u,j} $ 为根据经验公式得到的基准预估:
$ \tilde b_i = \frac{\sum_{u\in \mathbb U_i}(r_{u,i} - \mu)}{\lambda_1 + |\mathbb U_i|}\quad \tilde b_u = \frac{\sum_{i\in \mathbb I_u}(r_{u,i} - \mu - \tilde b_i)}{\lambda_2 + |\mathbb I_u|}\\ \tilde b_{u,i} = \mu +\tilde b_u + \tilde b_i $$ c_{i,j} $ 为基于隐式反馈得到的
item-item
相似度。这里它和 $ w_{i,j} $ 的主要区别在于:在计算隐式反馈时仅考虑是否产生评分,而不考虑评分的具体数值。事实证明使用两组相似度是有益的:一组 $ w_{i,j} $ 与评分值相关;另一组 $ c_{i,j} $ 与是否评分相关。
注意:这里的相似度 $ w_{i,j},c_{i,j} $ 以及
baseline predictor
$ b_{u,i} $ 中的biase
都是从数据中学到。当考虑时间效应时,需要考虑两个部分:
一个是
$ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i})\\ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) + b_{i,f_{u,i}} $baseline predictor
,它解释了大多数观测到的信号。这部分和因子模型没有什么区别,可以根据下面两种方式来考虑时间效应。另一个是捕获
user-item
交互的部分,这部分需要采用不同的时间效应处理策略。item-item
相似度 $ w_{i,j},c_{i,j} $ 反映了item
的固有属性,因此不会随着时间变化。因此学习过程应该确保它们能够捕获无偏的长期价值,而不会受到漂移drifting
的影响。实际上如果处理不当,数据的时变性质
time-changing nature
会掩盖很多长时间的item-item
关系:- 一方面, 如果用户在短时间内将
item
$ i,j $ 都给予很高的评分,这使得它们的相似度很高从而具有较高的 $ w_{i,j} $ 。 - 另一方面,如果用户在很长时间(如
3
年)内将item
都给予很高的评分,则由于用户的口味很可能发生变化,因此这两个item
之间可能没有任何关系。这时它们应该具有较低的相似度从而具有较低的 $ w_{i,j} $ 。
因此我们考虑同一个用户 $ u $ 评价的两个
$ \exp(-\beta_u\times \Delta t) $item
之间的相似性进行时间衰减加权:时间间隔越大权重越小,时间间隔越小权重越大。这里我们考虑指数时间衰减:其中 $ \beta_u $ 控制了用户 $ u $ 的衰减系数,并且从数据中学习。
- 一方面, 如果用户在短时间内将
最终我们考虑时间效应的
$ \hat r_{u,i} = b_{u,i}(t_{u,i})+ |\mathbb I_u|^{-1/2}\sum_{j\in \mathbb I_u}\exp(-\beta_u|t_{u,i} - t_{u,j}|)\times\left((r_{u,j} - \tilde b_{u,j})w_{i,j}\right) \\+ |\mathbb N_u|^{-1/2} \sum_{j\in \mathbb N_u} \exp(-\beta_u|t_{u,i} - t_{u,j}|)\times c_{i,j} $ItemBased CF
模型为:我们采用随机梯度下降法来最优化带正则化的平方误差代价函数,与
bias
相关参数的学习率、正则化系数如前所述。这里 $ w_{i,j},c_{i,j} $ 的学习率都为0.005
,正则化系数为0.002
。 $ \beta_u $ 使用了一个非常小的学习率1e-7
,正则化系数为0.01
。我们还尝试了其它的时间衰减模式,如对计算更友好的 $ (1+\beta_u\Delta t)^{-1} $ ,这导致了相同的准确率并大大降低了训练时间。
引入时间效应之后,邻域模型的准确率得到提高。相比静态领域模型,考虑时间的邻域模型在
Quiz
数据集上的RMSE
从0.9002
降低到了0.8870
。从某种角度来看,通过使用混合方法,其结果甚至比报告的结果要更好。如:在其它算法的残差上应用邻域方法,比如在
baseline predictor
的残差上。我们从中得到的一个经验教训是:与设计更复杂的模型相比,解决数据中的时间动态性可能对结果准确性产生更大的影响。
我们在最终混合模型中包含了邻域分解的多个变种。
第一个
$ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i})\\ \hat r_{u,i} = b_{u,i}(t_{u,i})+ |\mathbb I_u|^{-1/2}\sum_{j\in \mathbb I_u}\exp(-\beta_u|t_{u,i} - t_{u,j}|)\times\left((r_{u,j} - \tilde b_{u,j})w_{i,j}\right) \\+ |\mathbb N_u|^{-1/2} \sum_{j\in \mathbb N_u} \exp(-\beta_u|t_{u,i} - t_{u,j}|)\times c_{i,j} $Neighborhood Predictor
为:该
predictor
的三个变种,以及各自在Quiz
数据集上的RMSE
为:xxxxxxxxxx
31 迭代 step = 20, RMSE = 0.88872 迭代 step = 25, RMSE = 0.88853 迭代 step = 30, RMSE = 0.8887最终迭代
20
和30
次的变种进入到最终混合模型中。第二个
$ b_{u,i} = \mu +b_u + \alpha_u\times \text{dev}_u(t_{u,i}) + b_{u,t_{u,i}} +\left( b_i + b_{i,\text{Bin}(t_{u,i})}\right)\times c_u(t_{u,i}) + b_{i,f_{u,i}}\\ \hat r_{u,i} = b_{u,i}(t_{u,i})+ |\mathbb I_u|^{-1/2}\sum_{j\in \mathbb I_u}\exp(-\beta_u|t_{u,i} - t_{u,j}|)\times\left((r_{u,j} - \tilde b_{u,j})w_{i,j}\right) \\+ |\mathbb N_u|^{-1/2} \sum_{j\in \mathbb N_u} \exp(-\beta_u|t_{u,i} - t_{u,j}|)\times c_{i,j} $Neighborhood Predictor
为:我们使用随机梯度下降法迭代
20
步,在Quiz
数据集上的RMSE
为0.8870
。该predictor
被记作[PQ3]
。
我们还尝试扩展了邻域模型:添加一个没有归一化的
$ \hat r_{u,i} = b_{u,i}+ |\mathbb I_u|^{-1/2}\sum_{j\in \mathbb I_u}\exp(-\beta_u|t_{u,i} - t_{u,j}|)\times \left((r_{u,j} - \tilde b_{u,j})w_{i,j}\right) \\ + |\mathbb N_u|^{-1/2} \sum_{j\in \mathbb N_u} \exp(-\beta_u|t_{u,i} - t_{u,j}|)\times c_{i,j} \\ + \sum_{j\in \mathbb I_u} \exp(-\gamma_u|t_{u,i} - t_{u,j}|)\times((r_{u,j} - \tilde b_{u,j})d_{i,j}) $item-item
相似性 $ d_{i,j} $ :我们认为同一个用户给出的评分都比较相似,因此 $ \gamma_u $ 使用较高的初始值
0.5
来初始化(相比而言 $ \beta_u $ 采用0.0
来初始化)。对于 $ d_{i,j} $ 我们使用较慢的学习率1e-5
。我们采用随机梯度下降法迭代
25
步,最终在Quiz
数据集上的RMSE
为0.8881
。我们认为:如此微不足道的RMSE
收益并不能证明第三个item-item
相似度 $ d_{i,j} $ 的引入是合理的。该
predictor
也包含在最终的blend
中。
14.4 RBM 扩展
我们扩展了受限玻尔兹曼机
Restricted Boltzmann Machines:RBM
模型。原始模型通过使隐单元成为当前用户对电影评分的条件,从而显著提升性能。但我们发现,通过调节可见单元也可以达到类似的显著性能提升。直观的讲,每个
RMB
可见单元都对应于一个特定电影,因此它们的bias
代表了电影bias
。但是我们知道其它类型的bias
在数据中更为重要,即user bias
、single-day user bias
、以及frequency-based movie bias
。因此我们根据当前用户和日期,把这些bias
添加到可见单元。首先,我们使用条件多项式分布对观察到的二元评分矩阵 $ \mathbf V $ 的每一列进行建模:
$ p(v_i^k = 1 \mid \mathbf{\vec h}) = \frac{\exp(b_i^k + \sum_{j=1}^F h_j W_{i,j}^k)}{\sum_{l=1}^5 \exp(b_i^l + \sum_{j=1}^F h_j W_{i,j}^l)} $其中:
$ \mathbf{\vec h} = (h_1,\cdots,h_F)^T $ 为隐向量, $ F $ 为隐单元数量。
$ v_i^k $ 表示对
$ \mathbf V = \begin{array} {c|ccccc} n & \text{score=1} & \text{score=2}& \text{score=3} &\text{score=4}&\text{score=5} \\ \text{item 1} & \hline 1 & 0 &0 & 0&0\\ \text{item 2} & 0 &1 & 0&0&0\\ \vdots&\vdots&\vdots&\vdots&\vdots&\vdots\\ \text{item n} &0 & 0 & 0&1&0 \end{array} $item
$ i $ 评分为 $ k, k\in \{1,2,\cdots,5\} $ , $ \mathbf V $ 为:$ b_i^k $ 和 $ W_{i,j}^k $ 对应于模型的
bias
和权重。
我们扩展了原始的条件分布。令当前的用户为 $ u $ ,当前的日期为 $ t $ ,则我们添加了
$ p(v_i^k = 1 \mid \mathbf{\vec h},u,t) = \frac{\exp(b_{u,t}^k + b_u^k + b_i^k + \sum_{j=1}^F h_j W_{i,j}^k)}{\sum_{l=1}^5 \exp(b_{u,t}^l + b_u^l + b_i^l + \sum_{j=1}^F h_j W_{i,j}^l)} $user-date bias
:其中 $ b_u^k $ 为
user-specific
参数, $ b_{u,t}^k $ 为user-date-specific
参数。我们通过随机梯度下降来训练模型,其中 $ b_u^k $ 的学习率为
0.0025
, $ b_{u,t}^k $ 的学习率为0.008
。另外我们这里采用online
学习,即每次仅对一个训练样本进行更新。注意:除非另有说明,否则我们将使用原始论文中建议的相同学习率权重衰减
weight decay
,即0.001
。考虑到频次的显著影响,我们这里进一步考虑频次。假设用户 $ u $ 在日期 $ t $ 关联了一个评分频次 $ f $ ,则调整后的
$ p(v_i^k = 1 \mid \mathbf{\vec h},u,t,f) = \frac{\exp(b_{i,f}^k+ b_{u,t}^k + b_u^k + b_i^k + \sum_{j=1}^F h_j W_{i,j}^k)}{\sum_{l=1}^5 \exp(\exp(b_{i,f}^l+b_{u,t}^l + b_u^l + b_i^l + \sum_{j=1}^F h_j W_{i,j}^l)} $RBM
为:其中 $ b_{i,f}^k $ 是一个
movie-frequency-specific
变量,其学习率为0.0002
。这里也采用online learning
。受到
$ W_{i,j,f}^k = W_{i,j}^k(c+C_{f,j}) $Pragmatic Theory
团队的启发,我们在使用频次时,也对visible - hidden
权重进行修改。我们使用frequency-dependent
权重 $ W_{i,j,f}^k $ 来代替原始权重 $ W_{i,j}^k $ :我们通过
online-learning
来学习新的参数 $ C_{f,j} $ ,其学习率为1e-5
。但是事实证明:当存在
frequency-bias
时,权重的这种扩展几乎不会提高性能,并且还提高了训练时间,因此我们不太推荐。但是这仍然是我们frequency-aware RBM
实现的一部分。受到
day-specific
用户因子(即 $ p_{u,k}(t) = p_{u,k} + \alpha_{u,k}\times \text{dev}_u(t) + p_{u,k,t} $ )的影响,我们尝试创建day-specific RBM
隐单元:在 $ F $ 个隐单元的基础上,我们还添加 $ G $ 个day-specific
隐单元。如果一个用户在 $ r $ 个不同日期进行评分,则我们创建这 $ G $ 个day-specific
隐单元的 $ r $ 个并行的拷贝,所有这些拷贝共享相同的hidden-visible
权重、hidden bias
、conditional connection
。同样地,每个并行的拷贝仅连接到与其对应日期给出评分相应的可见单元。即:设当前日期为 $ t $ ,对应的
day-specific
隐单元为 $ j $ 。定义指示向量 $ \mathbf{\vec r}^t\in \{0,1\}^n $ 表示当前用户在日期 $ t $ 对哪些电影产生评分。因此建模用户特征的隐单元为:
$ p(h_j=1\mid \mathbf V, \mathbf{\vec r}^t) = \sigma\left(b_j + \sum_{i=1}^n\sum_{k=1}^5 r_i^t v_i^kW_{i,j}^k + \sum_{i=1}^nr_{i}^t D_{i,j}\right) $在我们的实现中,我们将该模型和
frequency-biased RBM
一起使用。所有该day-specfic
单元相关的参数都是通过mini-batch
随机梯度下降来学习,学习率为0.005
,权重衰减为0.01
。事实表明,这种方法的效果不大理想,并且需要进一步完善。
我们在最终混合模型中包含了
RBM
的多个变种。第一个
$ p(v_i^k = 1 \mid \mathbf{\vec h},u,t) = \frac{\exp(b_{u,t}^k + b_u^k + b_i^k + \sum_{j=1}^F h_j W_{i,j}^k)}{\sum_{l=1}^5 \exp(b_{u,t}^l + b_u^l + b_i^l + \sum_{j=1}^F h_j W_{i,j}^l)} $RBM Predictor
为:根据我们的参数配置,
RBM
通常在Quiz
数据集上大约迭代60~90
轮就可以收敛。但是为了最终的模型混合我们继续对训练集训练从而过拟合。该
predictor
的四个变种,以及各自在Quiz
数据集上的RMSE
为:xxxxxxxxxx
41 F=200, 迭代 step = 52, RMSE = 0.89512 F=200, 迭代 step = 62, RMSE = 0.89423 F=400, 迭代 step = 82, RMSE = 0.89444 F=400, 迭代 step = 100, RMSE = 0.8952最终迭代
20
和30
次的变种进入到最终混合模型中。第一个
$ p(v_i^k = 1 \mid \mathbf{\vec h},u,t,f) = \frac{\exp(b_{i,f}^k+ b_{u,t}^k + b_u^k + b_i^k + \sum_{j=1}^F h_j W_{i,j}^k)}{\sum_{l=1}^5 \exp(\exp(b_{i,f}^l+b_{u,t}^l + b_u^l + b_i^l + \sum_{j=1}^F h_j W_{i,j}^l)} $RBM Predictor
为:该
predictor
的两个变种,以及各自在Quiz
数据集上的RMSE
为:xxxxxxxxxx
21 F = 200, 迭代 step =90, RMSE=0.89282 F = 200, 迭代 step =140, RMSE=0.8949这两个变种分别称作
[PQ4]
和PQ[5]
。
有意思的是:仅仅通过
RBM
最好的结果是RMSE=0.8928
,但是通过利用kNN
来进一步拟合RBM
的残差,则可以进一步显著降低RMSE
。但是,我们并未针对这个现象进行专门的试验。最后,一个具有
50
个隐单元,以及50
个day-specific
隐单元的RBM
迭代70
轮,产生的RMSE = 0.9060
。该模型被称作[PQ6]
。
14.5 GBDT 混合
在
Netflix
数据集上获得有竞争力的结果,其关键在于使用精细sophisticated
的混合方案blending scheme
。这些混合方案将很多单独的predictor
合并为最终的解决方案solution
。我们的混合技术应用于三组不同的
predictor
:- 第一组由
454
个predictor
组成,代表了BellKor
的Pagmatic Chaos
小组的所有predictor
。 它们匹配了Probe
和Qualifying
的结果。 - 第二组由
75
个predictor
组成,它们从前面454
个predictor
中选择而来。 - 第三组由
24
个predictor
组成,它们匹配了Probe
和Qualifying
结果。
- 第一组由
尽管通过挖掘数据的新特征可以在竞赛中取得重大突破,但是这些新特征越来越稀少(绝大多数好用的特征都已经被人们发现)并难以获取。当进入比赛尾声时我们意识到:即使是一些新颖和准确的
predictor
(采用新特征、新模型),它也难以对混合结果产生重大影响。因为在上百个predictor
之间,单个predictor
的影响太小。我们推断:通过探索新的混合技术,或改进现有的混合技术,可以获得更好的效果。混合技术提供了在很短的时间内以较低的代价来改善预测性能:
- 首先,与单个
predictor
不同,更好的混合技术与最终结果直接相关。 - 其次,混合技术同时涉及多个
predictor
,而不是一次影响一个predictor
,影响范围更大。
- 首先,与单个
我们利用
GBDT
来混合我们的众多predictor
,我们将每个predictor
的输出作为一路特征,并额外增加了四路特征:user support
(用户所有评分的电影总数)、movie support
(电影所有被评分的总数)、频次frequency
(用户当天评分的电影总数)、评分日期(数据集中最早一个评分到当前的天数)。我们将
GBDT
应用于上述454
个predictor
和75
个predictor
。我们将Probe
数据集用于训练GBDT
,并将其应用于Qualifying
数据集。GBDT
的参数配置为num_tree = 200
、tree_size=20
、学习率0.18
、采样率0.9
。最终得到Quiz
数据集上的RMSE
为:454
个predictor
的RMSE=0.8603
、75
个predictor
的RMSE=75
。当
GBDT
应用在更小的24
个predictor
上时,GBDT
的参数配置为num_tree = 150
、tree_size=20
、学习率0.2
、采样率1.0
。最终得到Quiz
数据集上的RMSE
为0.8664
。注意:我们的实验并未对
GBDT
的四个参数(num_tree
子树的数量、tree_size
子树大小、学习率、样本采样率)进行敏感性分析。引入用户和电影的聚类也是有益的,这可以在
GBDT
中引入用户或电影的 “类别” 特征(即用户/电影是属于哪个类簇)。我们可以根据用户的
user support
将用户分为多个桶,然后同一个桶内的用户视为同一个粗。由于我们在GBDT
中已经增加了用户支持度特征,因此这一能力已经被GBDT
实现:GBDT
本身就有分桶并划分样本到各个桶的能力。但是,我们也可以引入其它类型的聚类,如:根据矩阵分解模型计算用户因子向量,然后根据用户因子向量来聚类。
item
因子向量也可以类似地进行聚类。我们在
24
个predictor
的GBDT
中实验了以下三种聚类形式:从
timeSVD ++
模型中得到因子向量: $ \hat r_{u,i} = b_{u,i} +\left(\mathbf{\vec q}_i + \mathbf{\vec q}_{i,f_{u,i}}\right)\cdot \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right) $ ,其中维度 $ d=20 $ 。另外所有的单个
bias
项都作为GBDT
的特征。另外,每个
user-item
组合 $ (u,i) $ ,我们增加了20
维的电影因子 $ \left(\mathbf{\vec q}_i + \mathbf{\vec q}_{i,f_{u,i}}\right) $ 、以及20
维的用户因子 $ \left(\mathbf{\vec p}_u(t_{u,i}) + |\mathbb N_u|^{-1/2}\sum_{j\in \mathbb N_u} \mathbf{\vec y}_j\right) $ 作为GBDT
的特征。最终导致模型的
RMSE = 0.8661
。然后我们采用具有
20
个隐单元的RBM
,隐向量作为用户的embedding
来代替timeSVD ++
中的用户因子向量。电影的representation
仍然使用timeSVD ++
模型。最终导致模型的RMSE
也是0.8661
。最后,我们在
timeSVD++
特征的基础上增加了kNN
特征,即:对每对 $ (u,i) $ ,我们找到与 $ i $ 最相似的top 20
部电影,并由 $ u $ 对其进行评分。我们添加了这些电影的评分乘以对应的相似度作为额外的特征,这些相似度是通过归一化的Pearson
相关性计算而来。最终模型的RMSE
略微降低到0.8860
。
上述的
GBDT
用于用户对电影评分的类别:1~5
一共五类。这是作为分类任务来处理。另一种用法是视为回归问题来处理。对每个用户,我们计算了由相应
RBM
的50
个隐单元的值组成的50
维特征向量。对每部电影,我们使用GBDT
来将50
维用户向量来拟合真实的用户评级,从而解决回归问题,最终RMSE = 0.9248
。该模型记作[PQ7]
。
14.6 总结
广泛的参与、广泛的新闻报道、许多出版物都反映了
Netflix
大奖赛的巨大成功。处理 “电影” 这个贴近老百姓身边的话题,绝对是一个好的开端。然而,由于以下几个因素,大赛最终取得了成功:第一个成功因素是在
Netflix
的组织方面。他们发布了一个珍贵的数据集,从而为推荐领域做出了巨大的贡献。除此之外,比赛的设计和进行都是完美的。例如,数据集规模正好符合目标:比同类型数据集大得多、更具代表性,但是又小到足以让任何拥有商业
PC
的人都能参与比赛。再举个例子,前面提到将数据集分为三个部分:Probe, Quiz, Test
,这对于确保比赛的公平性至关重要。第二个成功因素是众多选手的广泛参与。该比赛引起了巨大的轰动,导致更多的人进一步参与。选手之间广泛有着的合作精神,他们在网络论坛和学术期刊上公开发表和讨论了他们的创新成果。这是一个大社区的共同进步,使得所有参与者的体验更加愉悦和高效。事实上,这提升了比赛的性质,比赛就像一场长距离马拉松,而不是一系列短距离冲刺。
另一个有帮助的因素是运气。最突出的一个是
10%
提升目标的设定。这个数字的任何微小偏差都会使得比赛过于简单或者过于复杂从而难以进行。推荐系统科学是这场比赛的主要受益者。许多新人开始涉足该领域并做出了贡献,相关出版物数量明显激增,
Netflix
数据集是该领域开发更好算法的直接催化剂。在众多新算法的贡献中,我想强调一个:那些不起眼的
baseline
预测器(或者bias
),它们捕获数据中的主要影响。当大多数文献集中于更复杂的算法方面,但是我们知道:对主要效应的精确处理,至少与提出突破性的模型同样重要。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论