数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
三、ItemBased CF [2001]
世界上信息量的增长速度远远超过我们处理信息的能力。我们都有体会:被每年出版的海量的新书、期刊文章和会议纪要所淹没的感觉。技术大大降低了发布
publishing
和分发distributing
信息的障碍。现在是时候创造新的技术,从而可以帮助我们从所有可用信息中找到最有价值的信息。此类最有前途的技术之一是协同过滤
collaborative filtering
。协同过滤的工作原理是建立用户对item
的偏好数据库。对于一个新用户,假设叫做Neo
,我们从数据库中匹配邻居,这些邻居是历史上与Neo
有相似品味taste
的其它用户。然后我们将邻居喜欢的item
推荐给Neo
,因为Neo
可能也会喜欢这些item
。协同过滤在研究和实践中都非常成功,在信息过滤应用和电商应用中都非常成功。然而,协同过滤推荐系统有两个基本挑战仍然未能克服:可扩展性
scalability
:这些算法能够实时搜索数以万计的潜在邻居,但是现代系统需要搜索数千万个潜在邻居。由于整体计算复杂度为 $ O(m^2\times \bar n) $ ,其中 $ m $ 为用户数量、 $ \bar n $ 为平均每个用户评分的item
数量,因此随着用户规模的增加其计算复杂度难以忍受。此外,现有算法对于拥有大量历史行为的单个用户
individual user
也存在性能问题。例如,某些用户可能在成千上万个item
上有过行为,那么这批用户会拖慢每秒可以搜索的相似用户的数量(因为计算用户之间的相似度的计算复杂度为 $ O(n) $ , $ n $ 为用户评分的item
数量),从而进一步降低了可扩展性。推荐质量
quality
:用户需要他们可以信任的推荐,从而帮助他们找到感兴趣的item
。对于质量较差的推荐,用户一般都是“用脚投票”,直接拒绝使用该推荐系统。
某种程度上这两个挑战是相互冲突的:算法花在搜索邻居上的时间越少,它的可扩展性就越强、推荐质量也就越差。出于这个原因,同时处理这两个挑战很重要,这样的解决方案既有效又实用。 论文
《Item-Based Collaborative Filtering Recommendation Algorithms》
提出了Item-Based CF
来同时解决这两个挑战。传统的协同过滤算法的瓶颈是在大量用户中搜索邻居,而
Item-Based
算法通过首先探索item
之间的关系、而不是用户之间的关系来避免这个瓶颈。通过查找用户喜欢item
相似的其它item
来获取对用户的推荐。 由于item
之间的关系是相对静态static
的,Item-Based
算法可以减少在线计算的数量,同时保持与User-Based
算法相同的推荐质量。论文主要贡献:
- 分析
Item-Based
的预测算法,并识别identification
实现其子任务的不同方法。 - 形式化
item
相似度的预计算模型pre-computed model
,从而提高Item-Based
推荐的在线可扩展性。 - 几种不同的
Item-Based
算法与经典的User-Based
算法(最近邻)的实验效果比较。
相关工作:这里我们简要介绍一些与协同过滤、推荐系统、数据挖掘、以及个性化相关的研究文献。
Tapestry
是基于协同过滤的推荐系统的最早实现之一。该系统依赖于来自紧密社区close-knit community
(如办公室工作组)的人们的显式意见explicit opinion
,其中每个用户都了解其它用户。但是大型社区的推荐系统不能依赖于每个用户都了解其它用户。后来,人们开发了几个基于评级
ratings-based
的自动推荐系统。GroupLens
研究系统为Usenet
新闻和电影提供了匿名协同过滤解决方案。Ringo
和Video Recommender
是分别生成音乐推荐和电影推荐的email-based
系统和web-based
系统。
ACM
的通讯特刊《Recommender Systems》
介绍了许多不同的推荐系统。其他技术也已经应用于推荐系统,包括贝叶斯网络、聚类
clustering
、以及Horting
。贝叶斯网络创建一个基于训练集的模型,每个节点都有一个决策树,边代表用户信息。该模型可以在几个小时或者几天内离线构建。生成的模型非常小,速度非常快,并且基本上与最近邻方法一样准确。
贝叶斯网络被证明可能适用于用户偏好缓慢变化(相对于构建模型所需的时间)的环境,但是不适用于必须快速或频繁更新用户偏好模型的环境。
聚类技术通过识别似乎具有相似偏好的用户组
user group
来工作。一旦创建了簇cluster
,就可以通过对该簇中其它用户的意见进行平均来对单个用户进行预测。某些聚类技术将每个用户划分到多个
cluster
,然后预测时按照跨cluster
取加权平均值,权重是参与这个cluster
的程度。聚类技术通常比其它方法产生较少个性化的推荐,并且在某些情况下聚类的准确性比最近邻算法更差。然而,一旦聚类完成,性能就会非常好,因为必须分析的组的数量要小得多。
聚类技术也可以作为
first step
来应用,用于在最近邻算法中缩小候选集、或者在多个推荐引擎之间分配最近邻计算。虽然将用户划分为clusters
可能会损害cluster
边缘附近用户的准确性或推荐,但是pre-clustering
可能是准确性和吞吐量之间的一个值得的trade-off
。Horting
是一种graph-based
技术,其中节点是用户、节点之间的边表示两个用户之间的相似程度。预测是通过游走到附近节点,然后结合附近用户的意见来产生的。Horting
和最近邻不同,因为它探索了graph
上的高阶关系而最近邻仅探索graph
上的一阶关系(直接关系),从而探索最近邻算法中没有考虑的信息传递。在一项使用人工合成数据的研究中,Horting
产生了比最近邻更好的预测算法。
《Recommender Systems in E-Commerce》
展示了电商中使用的推荐系统的详细分类和示例,以及它们如何提供一对一的个性化,同时可以捕获客户忠诚度loyalty
。
尽管这些系统在过去取得了成功,但是它们的广泛使用暴露了它们的一些局限性,例如数据集的稀疏性问题、与高维相关的问题等。
推荐系统中的稀疏性问题已经在
《Using Filtering Agents to Improve Prediction Quality in the GroupLens Research Collaborative Filtering System》
和《Combining Collaborative Filtering With Personal Agents for Better Recommendations》
中得到解决。推荐系统中与高维相关的问题已经在
《Learning Collaborative Information Filters》
中讨论过,在《Application of Dimensionality Reduction in Recommender System -- A Case Study》
中已经研究了应用降维技术解决这些问题。
我们的工作探索了
Item-Based
推荐算法(一类新的推荐算法)能够在多大程度上解决这些问题。
3.1 模型
3.1.1 CF-Based 推荐系统
推荐系统主要解决以下问题:通过为给定用户生成预测的可能性得分、或者
top-N
的推荐item
列表,从而帮助用户找到他们想在电商网站上购买的item
。可以使用不同的方法进行
item
推荐,例如基于用户的人口统计demographics
、热门item
、或者用户历史购买习惯。协同过滤Collaborative Filtering: CF
是迄今为止最成功的推荐技术。基于CF
的算法的基本思想是:根据其他志趣相投用户的意见提供item
推荐或预测。用户的意见可以显式explicitly
地从用户那里获取,也可以通过一些隐式implicit
的手段获取。协同过滤处理
Overview
:协同过滤算法的目标是根据用户历史偏好、或者其他志趣相投用户的意见,为目标用户推荐新item
或者预测某个item
的效用utility
。在典型的
CF
场景中,有一个 $ m $ 个用户的列表 $ \mathcal U=\{u_1,u_2,\cdots,u_m\} $ 、以及一个包含 $ n $ 个item
的列表 $ \mathcal I=\{i_1,i_2,\cdots,i_n\} $ 。每个用户 $ u_i $ 都有一个item
列表 $ \mathcal I_{u_i} $ ,对该列表中的每个item
,用户 $ u_i $ 已经表达了他/她的意见opinion
。 意见可以由用户显式给出(如位于某个数字区间的评级分数rating score
),也可以通过分析日志从购买记录中隐式地获取。注意, $ \mathcal I_{u_i}\sube \mathcal I $ ,并且 $ \mathcal I_{u_i} $ 可能是空集。给定目标用户 $ u_a\in \mathcal U $ ,协同过滤算法的任务是为 $ u_a $ 找到一个
item
偏好item likeliness
。这种偏好有两种形式:- 预测:预测用户 $ u_a $ 对于
item
$ i_j\notin \mathcal I_{u_a} $ 的评分 $ P_{a,j} $ 。 - 推荐:为用户 $ u_a $ 推荐他/她可能最喜欢的由 $ N $ 个
item
组成的列表 $ \mathcal I_r\sub \mathcal I $ 。注意,推荐列表必须位于目标用户尚未购买的item
上,即 $ \mathcal I_r\cap\mathcal I_{u_a} = \Phi $ 。这被称作Top-N
推荐。
下图给出了协同过滤任务的示意图。
CF
算法将整个 $ m\times n $ 个user-item
数据表示为一个评分矩阵 $ \mathbf R $ ,矩阵中的每一个元素 $ r_{i,j} $ 表示第 $ i $ 个user
在第 $ j $ 个item
上的评分。每个评分在一定范围之内(如1~5
),也可以为0
,表示用户尚未对该item
评分。协同过滤算法可以分为两类:
memory-based
基于内存的(也称作user-based
)协同过滤:利用整个评分矩阵来生成预测。该算法采用统计技术来找出与目标用户最相似的一组用户(称作邻居),然后使用不同的组合方式来组合这些邻居的偏好,从而为目标用户生成推荐或
Top-N
推荐。因此该技术也被称为最近邻nearest-neighbor
或者UserBased CF
技术。model-based
基于模型的(也称作item-based
)协同过滤:通过建立用户打分模型来提供item
推荐。这些方法首采用概率性的方法
probabilistic approach
,然后根据给定用户在其它item
评分的条件下来预测未打分item
上的评分。模型构建过程由不同的机器学习算法执行,例如贝叶斯网络、聚类、以及基于规则rule-based
的方法。- 贝叶斯网络模型为协同过滤问题形式化了概率模型。
- 聚类模型将协同过滤视为分类问题,并通过将相同类别的相似用户聚类,并估计给定用户属于特定类别 $ C $ 的概率来工作,并由此计算评分的条件概率。
- 基于规则的方法应用关联规则挖掘
association rule discovery
算法来发现共同购买co-purchase
的item
之间的关联,然后根据item
之间的关联强度生成item
推荐。
- 预测:预测用户 $ u_a $ 对于
User-Based CF
的挑战:User-Based
协同过滤系统在过去非常成功,但是它们的广泛使用暴露了一些潜在的挑战,例如:稀疏性
Sparsity
:在实践中,许多商业推荐系统用于评估大型item
集合(如Amazon.com
推荐书籍、CDnow.com
推荐音乐专辑)。在这些系统中,即使是活跃用户购买的item
也可能占比远低于1%
(200
万本书的1%
是2
万本书)。因此,基于最近邻算法的推荐系统,其推荐的准确性可能很差。注意:因为
user
的行为太稀疏,导致user-to-user
的相似度不可置信。可扩展性
Scalability
:最近邻算法的计算复杂度随着用户数量和item
数量的增长而增长。对于数以百万的用户和item
,运行现有算法的、典型的web-based
推荐系统将面临严重的可扩展性问题。
最近邻算法在大型稀疏数据集上的弱点促使我们探索替代的推荐系统算法。
我们的第一种方法试图将半智能过滤代理
semi-intelligent filtering agent
结合到推荐系统中来,从而弥合稀疏性。这些代理使用文法特征syntactic feature
对每个item
进行评估和打分。通过提供稠密的评分集合,它们有助于缓解覆盖度coverage
并提高推荐质量quality
。然而,过滤代理解决方案并没有解决志趣相同、但是评分稀疏的用户之间关系不佳的根本问题。为了探索这一点,我们采用了一种算法方法,并使用潜在语义索引Latent Semantic Indexing: LSI
来捕获降维空间中用户和item
之间的相似度。在本文中我们研究了另一种技术,即
model-based
方法,来应对这些挑战,尤其是可扩展性挑战。这里的主要思想是分析user-item
表示矩阵representation matrix
来识别不同item
之间的关系,然后利用这些关系来计算目标user-item pair
的预测分。这种方法背后的直觉是:用户有兴趣购买历史喜欢item
类似的item
,并倾向于厌恶历史不喜欢item
类似的item
。这些技术不需要在请求推荐时识别用户的相似用户,因此它们往往会更快地给出推荐。已经有很多不同的方案来计算
item
之间的关联,从概率性方法到更传统的item-item
相关性。接下来我们将详细分析我们的方法。
3.1.2 Item-Based CF
这里我们研究了一类
Item-Based
的推荐算法,用于对用户进行推荐预测。与前面讨论的User-Based CF
算法不同,Item-Based
的方法查看目标用户历史评分item
集合并计算它们与目标item
$ i $ 的相似度,然后选择top-k
最相似的item
$ \{i_1,i_2,\cdots,i_k\} $ 。同时,top-k
$ item $ 对应的相似度 $ \{s_{i_1},s_{i_2},\cdots,s_{i_k}\} $ 也被计算。一旦得到最相似的
item
及其相似度,我们可以通过目标用户对这些相似item
已有评分的加权均值来执行预测。我们这里详细描述了这两个方面,即相似度计算和预测生成。Item
相似度计算:Item-Based CF
最关键的步骤之一是如何计算item
之间的相似度。计算item
$ i,j $ 之间相似度的基本思想是:首先挑选既对 $ i $ 打分、又对 $ j $ 打分的用户 $ \mathcal U_{i,j} $ ,然后基于这些用户的打分来计算相似度 $ s_{i,j} $ 。下图给出了这一过程,其中矩阵的行代表user
、列代表item
。其中有多种方法可以计算
item
之间的相似度,我们这里介绍三种方法,即基于余弦cosine-based
的相似度、基于相关系数correlation-based
的相似度、基于修正余弦adjusted-cosine based
的相似度。基于余弦的相似度
$ \text{sim}(i,j) = \cos(\mathbf{\vec r}_{\cdot,i},\mathbf{\vec r}_{\cdot,j}) = \frac{\sum_{u\in \mathcal U_{i,j}} r_{u,i}\times r_{u,j} }{\sqrt{\sum_{u\in \mathcal U_{i,j}} r_{u,i} ^2}\sqrt{\sum_{u\in \mathcal U_{i,j}} r_{u,j} ^2}} $cosine-based similarity
:两个item
被认为是 $ m $ 维用户空间中的两个向量。它们之间的相似度是通过计算这两个向量之间夹角的余弦来衡量的。其中 $ r_{u,i} $ 为用户 $ u $ 在
item
$ i $ 上的评分。我们只考虑 $ \mathcal U_{i,j} $ 。基于相关系数的相似度
$ \text{sim}(i,j) = \frac{\sum_{u\in \mathcal U_{i,j}}(r_{u,i}-\bar r_i)(r_{u,j} - \bar r_j)}{\sqrt{\sum_{u\in \mathcal U_{i,j}}(r_{u,i} - \bar r_i)^2}\sqrt{\sum_{u\in \mathcal U_{i,j}}(r_{u,j}-\bar r_j)^2}} $correlation-based similarity
:两个item
之间的相似度是通过计算Pearson-r
相关系数 $ \text{corr}_{i,j} $ 来衡量的。其中 $ \bar r_i = \frac{\sum_{u\in \mathbb U_{i,j}}r_{u,i}}{|\mathcal U_{i,j}|} $ 为
item
$ i $ 在 $ \mathcal U_{i,j} $ 上的打分均值。如果令 $ \mathbf{\vec r}^*_{\cdot,i} = \mathbf{\vec r}_{\cdot,i} - \bar r_i $ ,则上式等价于: $ \text{sim}(i,j) = \cos\left(\mathbf{\vec r}^*_{\cdot,i},\mathbf{\vec r}^*_{\cdot,j}\right) $ 。
基于修正余弦的相似度
$ \text{sim}(i,j) = \frac{\sum_{u\in \mathcal U_{i,j}}(r_{u,i}-\bar r_u)(r_{u,j} - \bar r_u)}{\sqrt{\sum_{u\in \mathcal U_{i,j}}(r_{u,i} - \bar r_u)^2}\sqrt{\sum_{u\in \mathcal U_{i,j}}(r_{u,j}-\bar r_u)^2}} $adjusted-cosine similarity
:基于余弦的相似度有个缺陷:未考虑不同用户之间的打分差异。修正的余弦相似度通过从每个用户的打分中减去该用户的打分均值来修复这个问题:其中 $ \bar r_u $ 是用户 $ u $ 在他/她所有打分
item
上的打分均值。如果令 $ r^*_{u,i} = r_{u,i} - \bar r_u $ ,则上式等价于: $ \text{sim}(i,j) = \cos\left(\mathbf{\vec r}^*_{\cdot,i},\mathbf{\vec r}^*_{\cdot,j}\right) $ 。它和基于相关系数的相似度区别在于:后者仅考虑
item
$ i $ 和item
$ j $ 的评分,而前者考虑了整个评分矩阵的评分。
预测:协同过滤系统中最重要的一步是生成预测。一旦我们根据相似性得到了目标
item
$ i $ 最相似的一组item
,则下一步是为用户执行打分预测。这里我们考虑两种技术:加权和
weighted sum
:该方法通过计算用户 $ u $ 对item
$ i $ 相似item
给出的评分的加权和,从而计算用户 $ u $ 对item
$ i $ 的预测。加权的权重为item
$ i $ 和 $ j $ 之间的相似度 $ s_{i,j} $ 。使用下图中的概念,我们可以将预测 $ P_{u,i} $ 表示为:
$ P_{u,i} = \frac{\sum_{j\in \text{all similar items}} s_{i,j}\times r_{u,j}}{\sum_{j\in \text{all similar items}}|s_{i,j}|} $这种方式捕获了目标用户 $ u $ 对相似
item
的评分。加权的权重进行了归一化,从而确保预测打分在预定范围内。下图中,使用了
5
个相似的item
来进行预测。回归
regression
:这种方式类似于加权和,但是不是直接使用相似item
的打分,而是基于回归模型来拟合的修正打分。实践中使用余弦相似度或者相关系数相似度可能导致两个向量相似度很高,但是实际上差距很远(夹角相同,长度差异较大)。这种情况下使用原始评分来计算,可能会导致预测不佳。
回归方法的思想是:采用加权和相同的公式,但是不使用原始打分 $ r_{u,j} $ ,而是使用基于线性回归的近似值 $ r_{u,j}^\prime $ 。假设目标
$ \mathbf{\vec r}_{\cdot,j}^\prime = \alpha_{i,j} \mathbf{\vec r}_{\cdot,i} + \beta_{i,j} $item
$ i $ 的打分向量为 $ \mathbf{\vec r}_{\cdot,i} $ ,相似item
$ j $ 的修正打分为:然后根据 $ \arg\min_{\alpha_{i,j},\beta_{i,j}}||\mathbf{\vec r}_{\cdot,j}^\prime- \mathbf{\vec r}_{\cdot,j}||^2 $ 最小化来求解参数 $ \alpha_{i,j}, \beta_{i,j} $ 。最终有:
$ P_{u,i} = \frac{\sum_{j\in \text{all similar items}} s_{i,j}\times r^\prime_{u,j}}{\sum_{j\in \text{all similar items}}|s_{i,j}|} $
性能分析:
User-Based CF
中,邻域的生成过程,尤其时user-user
相似度计算步骤被证明是性能瓶颈,从而使得整个过程不适合实时推荐。在本文中,我们提出了一种model-based
方法来预计算item-item
相似度得分。相似度计算方案仍然是基于相关性的(如基于相关系数或者基于余弦),但是计算是在item
空间上执行的。在典型的电子商务场景中,与经常变化的用户数量相比,item
数量相比之下更为静态static
。item
的静态属性使得我们想到了预计算item
相似性的想法。预计算
item
相似度的一种可能方法是计算所有item
之间的相似度,然后执行快速查表从而检索到所需的相似度。这种方法虽然节省时间,但是对于 $ n $ 个item
需要 $ O(n^2) $ 的空间。事实上对于任何一个目标item
,我们只需要一小部分最相似的item
来预测,这使得我们找到了一种替代的mode-based
方案。因此对于每个item
,我们仅计算 $ k $ 个最相似的item
,其中 $ k\ll n $ 。我们称 $ k $ 为模型大小。基于这个模型构建步骤,为目标用户 $ u $ 生成对目标
item
$ i $ 的预测的工作原理如下。邻域生成过程:首先检索与目标
item
$ i $ 对应的、预计算的 $ l $ 个最相似的item
。这里的 $ l \lt k $ 表示预测时使用的相似
item
数量,它不同于模型大小 $ k $ (表示预计算相似度的item
数量)。预测生成过程:查看用户 $ u $ 购买了这 $ l $ 个
item
中的多少个,基于此交集使用Item-Based CF
预测算法。
这里有质量和性能的权衡
quality-performance trade-off
:为了确保高质量,我们必须有较大的模型大小 $ k $ ,而这会导致推荐的可扩展性问题。在极端情况下我们可以将模型大小设置为 $ n $ ,这将确保与原始Item-Based CF
完全相同的质量,但是具有很高的空间复杂度。然而,我们的替代方案确保我们保留最相似的item
,在生成预测时这些item
对预测结果的贡献最大。因此,我们假设这种替代方案即使在 $ k $ 很小时也能够提供相当好的预测质量,从而提供良好的可扩展性。我们后续实验验证了我们的假设。具体而言,我们通过改变 $ k $ 值来验证模型大小对整个系统的质量和性能的影响。
读者注:理论上也可以将
User-Based CF
拆分为两阶段:邻域生成 + 预测生成。考虑到用户行为非常稀疏,因此用户的任何新的行为对user-user
相似度影响较大。因此user-user
相似度必须根据最近的用户行为在线实时计算。相对来说,用户的任何新的行为对
item-item
相似度影响较小,因此item-item
相似度相对静态,可以离线计算。如:假设
user-item
矩阵规模为1000
万用户、100
万item
。假设平均每个用户对5
个item
进行打分,则平均每个item
包含50
个用户。假设某个用户 $ u $ 刚刚对一个新的item
$ j $ 进行打分,则它会影响所有涉及到u
的user-user
相似度,相似度波动范围大致为20%
;它也会影响所有涉及到 $ j $ 的item-item
相似度,但是相似度波动范围大致为2%
。因此相对而言,item-item
相似度要稳定得多。其本质是
user-item
矩阵的行比列更为稀疏。
3.2 实验
数据集:我们使用
MovieLens
数据集来评估Item-Based CF
的效果。MovieLens
是一个web-based
的研究research
推荐系统,于1997
年秋季首次亮相。每周都有数百名用户访问MovieLens
来评估和接受电影推荐。该网站现在拥有超过43000
名用户,他们对3500
多部电影进行评分。我们随机选择打分超过20
部电影的用户及其对应的电影评分,得到十万个打分,其中包括943
个用户、1682
部电影。即我们的user-item
矩阵 $ \mathbf R\in \mathbb R^{943\times 1682} $ 。我们将数据集随机拆分为训练集和测试集,拆分比例为 $ x $ 。如, $ x=0.8 $ 表示
$ \text{sparsity-level} = 1- \frac{\text{num}_{nz}}{\text{num}_{all}} $80%
的训练集和20%
的测试集。实验中我们还考虑了数据集的稀疏水平sparsity level
。给定一个矩阵,我们定义它的稀疏水平为:其中 $ \text{num}_{nz} $ 表示矩阵非零元素的总数, $ \text{num}_{all} $ 表示矩阵所有元素的总数。我们数据集的稀疏水平为 $ 1-\frac{100000}{942\times 1682} = 0.9369 $ 。
评估指标:推荐系统用来评估推荐质量的指标主要可以分为两类:
统计准确性指标
statistical accuracy metrics
:通过测试集上user-item
的真实打分和预测打分的对比,从而评估推荐的准确性。平均绝对误差
$ \text{MAE} = \frac{1}{N}\sum_{i=1}^N|p_i-q_i| $MAE
是其中应用广泛的指标。对每个真实打分和预测打分pair
对 $$ ,平均绝对误差为 $ |p_i-q_i| $ 。考虑所有的 $ N $ 组测试数据,则有: MAE
越低则推荐质量越好。另外,均方误差
RMSE
、相关系数Correlation
也是类似的统计意义上的准确率指标。决策支持准确性指标
decision support accuracy metrics
:评估推荐系统帮助用户筛选高质量item
的有效性。事实上给用户推荐
item
之后,用户会在被推荐item
上给出反馈:推荐有效(用户感兴趣)还是推荐无效(用户不感兴趣)。因此这是一个典型的二元分类:有效推荐则为1
、无效推荐则为0
。我们认为用户打分在4.0
分及以上的item
是有效推荐(5
分制),从而根据预测的二元标签和真实的二元标签得到precision
、recall
、auc
等指标。这种做法基于我们的观察:对于一个无效推荐的item
,算法预测它是1.5
分还是2.5
分没有任何意义。
实验中我们使用 MAE
来报告实验结果,因为它最常用并且最容易直观的解释。另外我们每次随机选择不同的训练集和测试集,重复进行10-fold
交叉验证并报告MAE
的均值。
baseline
模型:一个User-Based CF
模型(基于Pearson
最近邻算法 ),该模型召回全量的user-user
相似度而不考虑计算代价。我们调优了该算法的超参数,从而得到最好的Pearson
最近邻算法。实验配置:我们首先将数据集划分为训练集和测试集 。在开始对不同算法进行全面的实验评估之前,我们确定了不同算法对不同超参数的敏感性,并从敏感性实验中确定了这些超参数的最佳值,并且将这些最佳超参数用于剩余的实验。
为了确定超参数敏感性,我们仅使用训练集,并将其进一步细分为 “训练--训练集” 和 “训练--验证集”,并对其进行实验。
所有的实验都是使用
C
语言实现,在基于linux
的PC
上运行实验。PC
配置为600M HZ
的Intel Pentium III
处理器以及2GM
内存。实验结果主要分为推荐质量结果和推荐性能结果两部分。为了得到较高的推荐质量,我们首先确定了一些超参数敏感性,包括:邻域大小 $ l $ 、训练集拆分比例 $ x $ 、不同的相似度度量。
超参数敏感性:为了确定各种超参数的敏感性,我们仅关注训练集,并将原始的训练集进一步拆分为 “训练--训练集” 和 “训练--验证集”。
相似度算法的影响:我们实现了三种不同的相似度算法,包括基础的余弦相似度、修正的余弦相似度、相关性相似度,并在我们的数据集上测试它们。对于每种相似度算法,我们基于加权和算法来生成预测。实验结果如下图所示,我们给出了验证集的
MAE
。可以看到:修正的余弦相似度效果最好,因为它的MAE
明显更低。因此,在接下来的实验中我们选择修正的余弦相似度。训练集测试集拆分比例的影响:为了确定数据集密度的敏感性,我们以
0.1
的增量将 $ x $ 的值从0.2
增加到0.9
。我们分别使用两种预测生成技术:最简单的加权和,以及基于回归的加权和。实验结果如下图所示。可以看到:预测质量随着 $ x $ 的增加而得到提高。对于较小的 $ x $ ,基于回归加权和的方法更好;随着 $ x $ 的增加,基于简单加权和的方法反而更好。
我们从曲线图中选择 $ x=0.8 $ 作为后续实验的参数。
邻域大小 $ l $ :邻域大小 $ l $ 对预测质量有着显著的影响。 为了确定该参数的敏感性,我们针对不同 $ l $ 值得到了验证
MAE
。我们分别使用两种预测生成技术:最简单的加权和,以及基于回归的加权和。实验结果如下图所示。可以看到:邻域大小 $ l $ 确实会影响预测的质量。但是这两种预测生成技术表现出不同的敏感性:当邻域大小从
10
增加到30
时:简单加权和的方法的推荐质量一直得到改善,但是改善的速度逐渐降低,
MAE
曲线趋于平缓。- 基于回归的加权和的方法推荐质量反而逐渐下降。
我们选择 $ l=30 $ 作为最佳邻域大小。
注意:这里离线预计算
item-item
相似度时,保留全量的相似度(即模型大小 $ k=n $ )。
推荐质量:一旦获得了最佳超参数,我们将
User-Based CF
和Ite-Based CF
进行比较,我们也比较了非个性化算法non-personalized
(如推最热门的),结果如下所示。可以看到:
- 简单加权和的
Item-Based CF
在所有 $ x $ (邻域大小为30
)、以及所有邻域尺寸( $ x=0.8 $ )上的表现都最好。例如在 $ x=0.5 $ (邻域大小为30
)时,User-Based CF
的测试MAE = 0.755
,而简单加权和Item-Based CF
的测试MAE = 0.749
;而在邻域大小为60
( $ x=0.8 $ ) 时,User-Based CF
的测试MAE = 0.732
,而简单加权和Item-Based CF
的测试MAE = 0.726
。 - 回归加权和的
Item-Based CF
的表现比较有趣:它在非常小的 $ x $ 和非常小的邻域大小上战胜了其它两个算法。但是随着 $ x $ 的增加或者邻域尺寸的扩大,它的表现反而更差,甚至比User-Based CF
效果都要差。 - 我们还将我们的算法与朴素的非个性化算法进行了比较。
我们从这些结果中得出两个结论:
- 首先,简单加权和的
Item-Based CF
算法在所有稀疏级别上都比User-Based CF
算法提供更好的推荐质量。 - 其次,回归加权和的
Item-Based CF
算法在非常稀疏的数据集上表现更好,但是随着我们添加更多数据,推荐质量会下降。我们认为这是由于模型过拟合。
- 简单加权和的
推荐性能:在表明
Item-Based CF
算法比User-Based CF
算法提供更好的预测质量之后,我们将重点放在可扩展性问题上。如前所述,Item-Based
的相似度更加静态,并允许我们预计算item
邻居。模型的这种预计算具有一定的性能优势。为了提高系统的可扩展性,我们研究了模型大小 $ k $ 的敏感性,然后研究了模型大小对响应时间和吞吐量的影响。推荐质量对模型大小 $ k $ 的敏感性:我们将相似度计算的
item
数量 $ k $ 从25
增加到200
,增量为25
。模型大小 $ k $ 意味着我们仅考虑 $ k $ 个最相似的item
来构建模型,然后使用其中的 $ l $ 个用于预测生成过程,其中 $ l\lt k $ 。我们前面讨论的 $ k $ 等于全量的item
。下图给出了不同 $ x $ 值在不同模型大小上的验证MAE
。另外我们还给出全量 $ k $ 的测试MAE
(虚线之后的最后一个点)。可以看到:
随着 $ k $ 的增加,
MAE
的值会改善,但是改善的效果逐渐降低。仅仅使用一小部分
item
即可实现高准确性。在 $ x=0.8 $ 时,我们保留1.5%
的模型大小( $ k=25 $ 时,验证MAE=0.754
)即可得到全尺寸模型( $ k=n $ 时,MAE=0.726
)96%
的准确性;保留3%
的模型大小( $ k=50 $ 时,验证MAE=0.738
)即可得到全尺寸模型98.3%
的准确率。这种模型大小敏感性具有重要的性能影响,这表明仅使用一小部分
item
来预计算item
相似度很有效,并且仍然可以获得良好的预测质量。
模型大小 $ k $ 对于运行时间和吞吐量的影响:我们记录测试集生成预测结果所需要的时间,注意不同的 $ x $ 拥有不同的测试集大小。
可以看到:小尺寸模型和全尺寸模型的预测结果生成时间存在很大差异。
- 当 $ x=0.25 $ (测试集大小
7.5
万) $ k=200 $ 的模型的运行时间为2.002
秒,而全尺寸模型为14.11
秒。 - 当 $ x=0.8 $ (测试集大小
2
万) $ k=200 $ 的模型的运行时间为1.292
秒,而全尺寸模型为36.34
秒。
由于不同 $ x $ 的测试集大小不同,因此我们根据吞吐量重新绘制了下图。可以看到:
- 当 $ x=0.3 $ 时, $ k=100 $ 的模型
1.487
秒完成7
万个测试样本的打分,即47361
个/秒,而全尺寸模型只有4961
个/秒。 - 当 $ x=0.8 $ 时, $ k=100 $ 的模型吞吐量为
21505
个/秒,全尺寸模型只有550
个/秒。
- 当 $ x=0.25 $ (测试集大小
讨论:从
Item-Based CF
的试验评估中,我们得出了一些重要的观察:- 首先,
Item-Based CF
比使用User-Based CF
提供更好的预测质量。预测质量的提高在不同邻域大小 $ l $ 和训练集比例 $ x $ 上是一致的,但是改进并不显著。 - 其次,
item
邻域是相当静态的,可以预计算,这会导致非常高的在线性能。 - 此外,
model-based
方法可以只保留一小部分item
并产生相当好的预估质量。我们的实验结果支持这一说法。因此,Item-Based CF
能够解决电商推荐系统中的两个最重要的挑战:预测质量和预测性能。
- 首先,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论