数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
五、Slope One Rating-Based CF [2005]
基于评分的协同过滤
RatingBased CF
方法是从其它用户的评分中预估目标用户如何对目标商品进行评分的过程。一个理想的RatingBased CF
需要满足以下条件:- 易于实现和维度:算法的可解释性强,并且易于实现和维护。
- 即时更新:添加新的评分之后,模型能够立即更新预测。
- 高性能:在线推荐速度应该非常快速,这可能需要以内存为代价。
- 数据需求低:能够为评分数量较少的目标用户提供高质量的推荐。
- 合理的推荐准确性:和效果最好的推荐相比具有可比的推荐质量,其中推荐质量的小幅提升并不值得牺牲简单性
simplicity
和可扩展性scalability
。
为此,论文
《Slope One Predictors for Online Rating-Based Collaborative Filtering》
提出的Slope One
算法满足上述五个目标。论文的目标并不是比较各种CF
算法的准确性,而是证明Slop One
算法可以同时满足这五个目标。相比之下,其它的一些CF
方法追求其中的一部分目标而牺牲了另外一些目标。Slope One
算法的基本思想是:不同item
之间的流行度差异popularity differential
。我们以pair
对的方式来决定item
$ j $ 比item
$ i $ 要好多少,从而计算流行度差异。一种简单的计算方式是:用item
$ j $ 的评分减去item
$ i $ 的评分。反之,如果已知item
$ i $ 的评分,以及 $ j $ 和 $ i $ 的流行度差异,那么item
$ j $ 的评分就可以计算到。考虑下图中的两个用户 $ A $ 和 $ B $ 以及
item
$ I $ 和 $ J $ 。用户 $ A $ 给item
$ I $ 评分1
分、用户 $ B $ 给item
$ I $ 评分2
分、用户 $ A $ 给item
$ J $ 评分1.5
分。我们观察到item
$ J $ 比item
$ I $ 的评分更高,差异在1.5 - 1 = 0.5
分,因此我们预计用户 $ B $ 将给item
$ J $ 的评分为2 + 0.5 = 2.5
分。我们称 $ B $ 为目标用户,item
$ J $ 为目标商品。对于每个未知的评分,在训练集中存在大量的这种差异,则我们可以取这些差异的均值。
Slop One
算法提供了三种方式来选择差异,并最终得到单个预测结果。Slope One CF
的预测形式为 $ f(x) = x + b $ ,其中 $ b $ 为平均的流行度差异。论文的主要贡献是提出了一个
Slope One CF
算法,并证明它和memory-based
算法相比具有几乎相同的准确性,同时更适合CF
任务。相关工作:
MemoryBased CF
使用u-2-u
相似性来执行预测,其中相似函数的选择决定了推荐的质量。其缺点包括:- 可扩展性
scalability
:MemoryBased CF
依赖于的u-2-u
相似性计算复杂度太高,而这些计算无法通过离线预计算。 - 数据稀疏的敏感性
sensitivity
:为满足推荐的高质量,MemoryBased CF
要求最低数量的用户(如至少100
个用户)、最低数量的评分(如至少20
个评分)。
本文中我们将
Slope One CF
和众所周知的MemoryBased CF
算法Pearson
进行对比。- 可扩展性
也有一些
ModelBased CF
,如基于线性代数的方法(如SVD、PCA
)、基于机器学习的方法(如贝叶斯方法)、基于神经网络的方法、基于聚类的方法。与MemoryBased CF
相比,ModelBased CF
在线计算的性能很高,但是它们具有昂贵的离线学习阶段或者离线更新阶段。当在线速度至关重要时,ModelBased CF
算法相比MemoryBased CF
更可取。我们的
Slope One CF
的形式为: $ f(x) = x + b $ ,其中 $ b $ 为常数、 $ x $ 表示评分变量,因此该方法叫做slope one
。对于任何item pair
对,我们试图找到从一个item
评分中预测另一个item
评分的最佳函数 $ f $ ,不同item pair
的函数 $ f $ 可能不同。在
《Item-based collaborative filtering recommender algorithms》
中,作者考虑了item pair
之间的相关性,然后将用户评分的加权均值作为评分变量,其中权重为相关系数。在该论文的简单版本中,预估形式为 $ f(x) = x $ ;在该论文的回归版本中,预估形式为 $ f(x) = ax+b $ 。
在论文
《A regression-based approach for scaling-up personalized recommender systems in e-commerce》
中,作者也使用了 $ f(x) = ax+b $ 形式的预估。
这两篇论文工作的一个自然扩展是考虑 $ f(x) = ax^2 + b x+c $ 形式的预估。相反,本文中我们使用形式为 $ f(x) = x + b $ 的预估。在
《A regression-based approach for scaling-up personalized recommender systems in e-commerce》
中观察到,即使他们使用基于回归的 $ f(x) = ax+b $ 算法也没有导致相对MemoryBased CF
算法的较大改进。因此,证明 $ f(x) = x +b $ 形式的预估可以与MemoryBased CF
算法竞争,这是本文的一个重要结果。
5.1 模型
给定用户 $ u $ ,定义他/她的评分
$ \mathbf{\vec r}_u = (r_{u,1},r_{u,2},\cdots,r_{u,n})^T $array
记作:其中第 $ i $ 个元素 $ r_{u,i} $ 对应于
item
$ i $ 的评分。由于存在大量的未评分item
,因此这个向量是不全的incomplete
。定义用户 $ u $ 评分的所有
$ \mathbb I_u = \{i\mid r_{u,i} \gt 0\}, \quad \bar r_u = \frac{1}{|\mathbb I_u|}\sum_{i\in \mathbb I_u}r_{u,i} $item
为 $ \mathbb I_u $ ,用户 $ u $ 的平均打分为 $ \bar r_u $ :定义训练集的所有评分
array
为 $ \mathbb X $ : $ \mathbb X = \{\mathbf{\vec r}_u\mid u\in \mathbb U\} $ ,其中 $ \mathbb U $ 为所有用户。定义 $ \mathbb U_i $ 为包含
item
$ i $ 的用户集合 : $ \mathbb U_{i} = \{u\mid u\in \mathbb U \;\text{and}\; r_{u,i} \gt 0\} $ 。定义同时包含item
$ i,j $ 的用户集合为: $ \mathbb U_{i,j} = \{u\mid u\in \mathbb U \;\text{and}\; r_{u,i} \gt 0\;\text{and} \; r_{u,j}\gt 0\} $ 。定义用户 $ u,v $ 共同评分的item
集合为: $ \mathbb I_{ u,v}=\{i\mid i\in \mathbb I\;\text{and}\; r_{u,i}\gt 0\;\text{and} \; r_{v,i}\gt 0\} $ 。定义预测 $ \mathbf{\vec p}_u = (p_{u,1},\cdots,p_{u,n})^T $ ,其中每个元素代表一个预测结果。
RatingBased CF
在线预测时, 首先提供一个评分array
(称作query array
), 它包含用户的所有评分item
;模型返回一个预测array
(称作response array
),其中包含用户尚未评分的item
及其预估的评分。
5.1.1 baseline
最简单的
$ p_{u,i} = \bar r_u,\quad i\notin \mathbb I_u $baseline
为PER USER AVERAGE
:即:预测用户的所有未评分
item
的评分为该用户的评分均值。针对
$ p_{u,i} = \bar r_u + \frac{1}{|\mathbb U_i|}\sum_{v \in \mathbb U_i}(r_{v,i} - \bar r_v),\quad i\notin \mathbb I_u $PER USER AVERAGE
的一种改进方式为BIAS FROM MEAN
(也被称作NON PERSONNALIZED
),其预测结果为:它考虑了用户 $ u $ 的评分均值,以及所有其它用户在该
item
上的评分差异(其它用户在该item
上的评分减去用户平均均值)。基于
$ p_{u,i} = \bar r_u + \frac{\sum_{v \in\mathbb U_i} \gamma(u,v)(r_{v,i} - \bar r_v)}{\sum_{v \in\mathbb U_i} |\gamma(u,v)|},\quad i\notin \mathbb I_u $MemoryBased CF
的一个经典实现是PEARSON
方案:它在
$ \text{corr}(u,v) = \frac{\sum_{i\in\mathbb I_{u,v}}(r_{u,i}- \bar r_u)(r_{v,i}- \bar r_v)}{\sqrt{\sum_{i\in \mathbb I_ {u,v}}(r_{u,i}- \bar r_u)^2\sum_{i\in\mathbb I_{u,v}}(r_{v,i} - \bar r_v)^2}}\\ \gamma(u,v) = \text{corr}(u,v)|\text{corr}(u,v)|^{\rho-1} $BIAS FROM MEAN
的基础上考虑了用户 $ u,v $ 之间的相似性。其中 $ \gamma $ 为Pearson
相关系数,它刻画了用户之间的相似性:其中 $ \rho=2.5 $ 为
Case Amplification
系数,它降低了数据中的噪音。- 如果相关系数很高,如
corr = 0.9
,则经过Case Amplification
之后它仍然很高: $ 0.9^{2.5} \simeq 0.8 $ 。 - 如果相关系数很低,如
corr = 0.1
,则经过Case Amplification
之后它可以忽略不计: $ 0.1^{2.5}\simeq 0.003 $ 。
尽管存在更准确的方法,但是
PEARSON
相关系数以及Case Amplification
一起已经能够提供相当好的推荐质量。- 如果相关系数很高,如
采用
$ \text{sim}(i,j) = \frac{\sum_{u\in \mathbb U_{i,j}}(r_{u,i}-\bar r_u)(r_{u,j}-\bar r_u)}{\sum_{u\in \mathbb U_{i,j}}(r_{u,i}-\bar r_u)^2\sum_{u\in \mathbb U_{i,j}}(r_{u,j}-\bar r_u)^2} $adjusted cosine
相似度的ItemBased CF
:给定item
$ i $ 和 $ j $ ,定义相似度为:使用基于回归
$ p_{u,i} = \sum_{j\in \mathbb I_u} w_{i,j} (\alpha_{i,j}r_{u,j} + \beta_{i,j}),\quad i\notin \mathbb I_u\\ w_{i,j} = \frac{|\text{sim}(i,j)|}{\sum_{j^\prime\in \mathbb I_u} |\text{sim}(i,j^\prime)|} $Regression
的预测为:其中 $ \alpha_{i,j},\beta_{i,j} $ 为回归系数,它根据最小化目标来求得:
$ \arg\min_{\alpha_{i,j},\beta_{i,j}} \sum_{u\in \mathbb U_{i,j}} (\alpha_{i,j} r_{u,j} +\beta_{i,j} - r_{u,i})^2 $
5.1.2 Slope One
slope one
方法同时考虑了来自相同item
的其它用户的评分(就像ItemBased CF
)、来自相同用户的其它item
的评分(就像MemoryBased CF
),除此之外slope one
方法还依赖于既不是相同item
、也不是相同用户的那些评分。因为这些评分数据都有助于我们进行预测。slope one
方法的大部分优势都来自于ItemBased CF
、MemoryBased CF
未考虑的数据。给定用户 $ u,v $ ,我们寻找最佳的预测器
predictor
来从 $ u $ 的评分中预测 $ v $ 的评分。
$ r_{v,i}^\prime = r_{u,i} + b ,\quad i\in \mathbb I_{u,v} $slope one
方法选择的predictor
为斜率为1
的线性函数 $ f(x) = x + b $ ,这就是名字slope one
的由来。 具体而言,我们需要拟合方程:我们通过最小化残差:
$ \arg\min_b \sum_{i\in \mathbb I_{u,v}}(r_{v,i} - r^\prime_{v,i})^2 $通过残差的偏导数为
$ b = \frac{\sum_{i\in \mathbb I_{u,v}}(r_{v,i} - r_{u,i})}{|\mathbb I_{u,v}|} $0
,我们得到:因此 $ b $ 是用户 $ u $ 和 $ v $ 的评分差异的均值。
类似地,我们可以通过利用
$ b = \frac{\sum_{u\in \mathbb U_{i,j}}(r_{u,j} - r_{u,i})}{|\mathbb U_{i,j}|} $item
$ i $ 的评分来预测item
$ j $ 的评分。同样的推导过程,我们有:给定训练集 $ \mathbb X $ ,以及任意两个
$ \text{dev}_{j,i} =\frac{1}{|\mathbb U_{i,j}|} \sum_{u\in \mathbb U_{i,j}} (r_{u,j} - r_{u,i}) $item
$ i,j $ ,我们定义item
$ i $ 到item
$ j $ 的平均偏移为:因此在给定 $ r_{u,i} $ 的条件下, $ r_{u,j} $ 的预测值为:
$ r_{u,j}^\prime = \text{dev}_{j,i} + r_{u,i} $考虑所有这样的 $ r_{u,i} $ ,因此用户 $ u $ 在
$ p_{u,j} = \frac{1}{|\mathbb S_{u,j}|} \sum_{i\in \mathbb S_{u,j} } (\text{dev}_{j,i} + r_{u,i}) $item
$ j $ 上的predictor
定义为:其中 $ \mathbb S_{u,j}=\{i\mid i\in \mathbb I_u\;\text{and}\;i\ne j\;\text{and}\; \mathbb U_{i,j} \ne \Phi\} $ ,即:用户 $ u $ 同时评分的、且与 $ j $ 有共同评分用户的
item
的集合。当数据足够稠密,即几乎所有
$ \frac{1}{|\mathbb S_{u,j}|}\sum_{i\in \mathbb S_{u,j}}r_{u,i}\simeq \frac{1}{|\mathbb I_{u}|}\sum_{i\in \mathbb I_{u}}r_{u,i} = \bar r_u $item pair
对之间都有评分时,有: $ \mathbb S_{u,j} = \mathbb I_u $ 。考虑到:因此有:
$ p_{u,j} = \bar r_u + \frac {1}{|\mathbb I_u|}\sum_{i\in \mathbb I_u}\text{dev}_{j,i} $可以看到:
slope one
方法不依赖于用户对具体item
的评分,而依赖于用户的平均评分,以及用户对哪些item
进行评分。
$ \mathbf E = \begin{bmatrix} 0&\text{dev}_{1,2}& \text{dev}_{1,3}& \cdots & \text{dev}_{1,n}\\ \text{dev}_{2,1}&0& \text{dev}_{2,3}& \cdots & \text{dev}_{2,n}\\ \vdots&\vdots&\vdots& \ddots & \vdots\\ \text{dev}_{n,1}&\text{dev}_{n,2}& \text{dev}_{n,3}& \cdots & 0 \end{bmatrix} $slop one
方法的关键数据是item
之间的偏移矩阵:其中 $ E_{i,j} = - E_{j,i} $ 。
偏移矩阵 $ \mathbf E $ 可以预计算,并且当有新数据进来时实时更新。
ItemBased CF
中,我们需要根据相似商品的评分来给出结果。朴素版本的
$ p_{u,i} = \sum_{j\in \mathbb I_{u,i}}w_{i,j} \times r_{u,j}\\ w_{i,j} = \frac{s_{i,j}}{\sum_{j^\prime\in \mathbb I_{u,i}}s_{i,j^\prime}} $predictor
可以视作 $ f(x) = x $ 的加权聚合结果:基于回归的
$ p_{u,i} = \sum_{j\in \mathbb I_{u,i}}w_{i,j} \times (\alpha_{i,j}\times r_{u,j}+\beta_{i,j}) \\ w_{i,j} = \frac{s_{i,j}}{\sum_{j^\prime\in \mathbb I_{u,i}}s_{i,j^\prime}} $predictor
可以视为 $ f(x) = \alpha x +\beta $ 的加权聚合结果:
$ p_{u,i} = \bar r_u + \frac {1}{|\mathbb I_u|}\sum_{j\in \mathbb I_u}\text{dev}_{i,j} $slope one
方法采用 $ f(x) = x +b $ 的聚合结果,但是没有使用相似性进行加权:事实上可以进一步的扩展到 $ f(x) = ax^2 + b x +c $ 的形式。
Weighted Slope One
:slope one
方法的一个缺点是未考虑已经评分的数量。假设给定用户
A
对item
J, K
的评分,我们需要预测用户A
对item
L
的评分。如果有2000
个用户同时对item
J,L
评分、有20
个用户对item
K,L
评分,则商品J
相比商品K
更适合作为商品L
的predictor
。因为 $ \text{dev}_{L,J} $ 比 $ \text{dev}_{L,K} $ 更为置信。因此定义
$ p_{u,j} = \frac{\sum_{i\in \mathbb S_{u,j} }(\text{dev}_{j,i} + r_{u,i})\times |\mathbb U_{i,j}|}{\sum_{i\in \mathbb S_{u,j} } |\mathbb U_{i,j}|} $Weighted Slope One
预测为:.
5.1.3 Bi-Polar Slope One
给定一个
0
到10
的评分等级表,我们认为评分超过5
分表示用户喜欢的item
,评分低于5
分表示用户不喜欢的item
。如果用户的评分是均匀分布的,则阈值设置为5
分没有问题。但是通常用户的评分不是均匀分布的,如EachMovie
数据集中超过70%
的评分都超过5
分。考虑到用户评分的分布多种多样,如均匀分布、倾向于乐观的分布(均值超过
5
分)、倾向于悲观的分布(均值低于5
分)、双峰分布(同时偏向于两个极端)。为了自适应这些分布,我们不再设置固定的阈值,而是使用自适应的阈值:将喜欢/不喜欢阈值设定为用户评分的均值。对于一个用户而言:- 评分低于该用户所有评分均值的
item
被视为用户不喜欢的item
。 - 评分高于该用户所有评分均值的
item
被视为用户喜欢的item
。
这种方式可以确保我们能够为每个用户提供合理数量的喜欢/不喜欢
item
。- 评分低于该用户所有评分均值的
Weighted Slope One
倾向于更加高频的评分模式,Bi-Polar Slope One
倾向于某种偏好的评分模式。Bi-Polar Slope One
方法将预测拆分为两个部分:- 从用户喜欢的
item
中使用Weighted Slope One
得出一个预测。 - 从用户不喜欢的
item
中使用Weighted Slope One
得出另一个预测。
然后合并这两部分的预测,即可得到
Bi-Polar Slope One
的预测。- 从用户喜欢的
Bi-Polar Slope One
方法从两个角度进行了改进:首先在
item
方面,仅考虑用户的两个喜欢item
之间的评分偏差,或者两个不喜欢item
之间的偏差。即对 $ \mathbb S_{u,j} $ 进行限制。根据用户不喜欢的
item
去预估用户喜欢的item
(或者反过来)没有意义。其次在用户方面,在计算
item
之间偏差时,我们仅仅考虑同时喜欢、或者同时不喜欢这两个item
的用户。即对 $ \text{dev}_{i,j} $ 进行限制。
我们拆分每个用户的评分
$ \mathbb I_u^{like} = \{i\mid i \in \mathbb I \;\text{and}\; r_{u,i} \gt \bar r_u\}\\ \mathbb I_u^{dislike} = \{i\mid i \in \mathbb I \;\text{and}\; r_{u,i} \lt \bar r_u\} $item
集合为:然后对于每对
$ \mathbb U_{i,j}^{like} = \{u\mid i\in \mathbb I_u^{like} \;\text{and}\; j\in \mathbb I_u^{like}\}\\ \mathbb U_{i,j}^{dislike} = \{u\mid i\in \mathbb I_u^{dislike} \;\text{and}\; j\in \mathbb I_u^{dislike}\} $`item pair
对 $ (i,j) $ ,拆分它们的共同评分用户集合为:我们计算偏差矩阵为:
$ \text{dev}_{j,i}^{like} =\frac{1}{|\mathbb U_{i,j}^{like}|} \sum_{u\in \mathbb U_{i,j}^{like}} (r_{u,j} - r_{u,i})\\ \text{dev}_{j,i}^{dislike} =\frac{1}{|\mathbb U_{i,j}^{like}|} \sum_{u\in \mathbb U_{i,j}^{dislike}} (r_{u,j} - r_{u,i}) $最终我们的预测为:
$ p_{u,j} = \frac{\sum_{i\in \mathbb S_{u,j}^{like} }(\text{dev}_{j,i}^{like} + r_{u,i})\times |\mathbb U_{i,j}^{like}|+ \sum_{i\in \mathbb S_{u,j}^{dislike} }(\text{dev}_{j,i}^{dislike} + r_{u,i})\times |\mathbb U_{i,j}^{dislike}|}{\sum_{i\in \mathbb S_{u,j}^{like} } |\mathbb U_{i,j}^{like}|+ \sum_{i\in \mathbb S_{u,j}^{dislike} } |\mathbb U_{i,j}^{dislike}|} $其中 :
- 其中 $ \mathbb S_{u,j}^{like}=\{i\mid i\in \mathbb I_u^{like}\;\text{and}\;i\ne j\;\text{and}\; \mathbb U^{like}_{i,j} \ne \Phi\} $ ,即:用户 $ u $ 同时喜欢的、且与 $ j $ 有共同喜欢用户的
item
的集合。 - 其中 $ \mathbb S_{u,j}^{dislike}=\{i\mid i\in \mathbb I_u^{dislike}\;\text{and}\;i\ne j\;\text{and}\; \mathbb U_{i,j}^{dislike} \ne \Phi\} $ ,即:用户 $ u $ 同时不喜欢的、且与 $ j $ 有共同不喜欢用户的
item
的集合。
Bi-Polar Slope One
将每个用户的item
区分为喜欢、不喜欢,这相当于使得用户数量增加一倍。但是由于算法在计算过程中的限制(item
方面的限制和用户方面的限制),这使得预测过程的计算量总体上得到降低。另外,由于用户数量翻倍、评分数量不变,这加剧了数据稀疏性。在数据更加稀疏的条件下
Bi-Polar Slope One
还能够改善推荐质量,这似乎是违反直觉的。但是如果在预测过程中不去剔除无关的评分,其危害更大。Bi-Polar Slope One
无法从 “用户A
喜欢商品K
、用户B
不喜欢商品K
” 中预测任何结果,这也是符合直觉的。
5.2 实验
评估指标:测试集上的预测的均方误差
MAE
。我们采用All But One MAE
。在计算MAE
时,我们从测试集每个用户中随机隐藏一个评分,然后预估这个评分。数据集:
EachMovie
数据集:Compaq Research
提供的EachMovie
数据集,评分等级从0.0
到1.0
, 每0.2
一个等级。MovieLens
数据集:Minnesota
大学Grouplens Research Group
提供的Movielens
数据集,评分等级从1
分到5
分,每1
分一个等级。
我们选择
5
万个用户作为训练集 $ \mathbb X $ ,至少10
万个用户作为测试集。当预测结果超出范围时,进行修正:EachMovie
预测结果超过1.0
调整为1.0
分,MovieLens
预测结果超过5
调整为5
分。由于
MovieLens
分值范围比EachMovie
大4
倍,因此MovieLens
评估的MAE
指标除以4
从而得到可比的结果。实验结果如下表所示,可以看到:
Slope One
方法在所有baseline
中表现最好,达到和PEARSON
相匹配的准确率。这表明尽管Slope One
具有理想的特点,它的准确率仍然可以得到保持。- 针对原始的
Slope One
的改进确实能够提高推荐的准确性。Weighted Slope One
能够提高大约1%
,Bi-Polar Slope One
能够提高大约3%
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论