![4ee28fc7e595d3c6617b8fbab35eb5b3.png](https://i-blog.csdnimg.cn/blog_migrate/88f84fc487b668eb4ecde0f34c43ed0c.jpeg)
Netflix发起的Netflix Prize百万美金竞赛,是推荐系统领域最标志性的事件之一,比赛不但吸引了众多专业人士开始投身于推荐系统领域的研究工作,也让这项技术从学术圈真正地进入到了商业界,引发了热烈的讨论并逐渐深入到了商业的核心腹地。今天学习和分享的论文为经典的《MATRIX FACTORIZATION TECHNIQUES FOR RECOMMENDER SYSTEMS》发布于2009年,虽然过去了10年,但作为整个推荐算法大厦的基础,值得认真学习。
MATRIX FACTORIZATION TECHNIQUES FOR RECOMMENDER SYSTEMSdatajobs.com该论文属于传统算法中协同过滤中的矩阵分解算法,即traditional>collaborative filtering>matrix factorization。之后的每一篇分享都会对应整个推荐系统算法树形结构中的某一条路径,方便归纳整理。
目录:
- 推荐系统策略分类,对应Recommender System Strategies
- 矩阵分解方法介绍,对应Matrix Factorization Methods
- 基础的矩阵分解模型实现,对应A Basic Matrix Factorization Model
- 求解的两种方法,对应Learning Algorithm
- SGD推导及实现
- ALS spark实现
- 4种优化方案
- 加入bias偏置
- 加入更多信息
- 加入动态时间考虑
- 加入观测值的置信度
- 简单回顾SVD
- 下期预告
下面进入今天分享的论文正题:
1. 推荐系统策略分类-RECOMMENDER SYSYTEM STRATEGIES
Recommender system主要有两种策略:一个方向是content filtering(基于内容的过滤),另一个方向是collaborative filtering(协同过滤,CF),CF又可以拆分成两个主要领域,一个是neighborhood methods,另一个是latent factor models。今天介绍的Matrix Factorization属于Latent factor models。
对应层次结构如下:
![9f82e696f9e169fce6dacc106920adce.png](https://i-blog.csdnimg.cn/blog_migrate/04a835631db8d1752b50f7729e7a1e4b.jpeg)
各方法的优缺点整理如下供参考:
- Content Filtering:
- 简述:专家需要人工针对特定的领域去定义用来描述user和item的属性,在实际预测时基于设定的属性对user和item进行关联。成功案例:Music Genome Project - Wikipedia
- 优点:可解释性强,无冷启动问题。
- 缺点:特定领域限定,依赖专家规则,惊喜度低。
- Collaborative Filtering:
- Neighborhood Methods:
- 简述:依赖user与user、item与item的历史行为,为user推荐与其相似的user喜欢的items,或为user推荐与他所喜欢的items相似的items。论文提供了一个图例。图例见下。
- 优点: User-Based(计算用户之间的相似度并推荐新的item),推荐惊喜度更高,对长尾物品也更友好。Item-Based(基于用户的行为计算item之间的相似度,并为user推荐新的item),相对来说更容易得到好的结果。无特定领域依赖。一般选择数量较少且稳定的一方(item or user)作为based算法
- 缺点:有冷启动问题,解释性一般。
- Latent Factor Models:
- 简述:将用户评分矩阵拆解成user隐向量矩阵和item隐向量矩阵,基于隐向量的点积进行评分预测并推荐。图例见下。
- 优点:无特定领域依赖。准确率高且稳定。有一定的惊喜度。
- 缺点:有冷启动问题。解释性差。
- Neighborhood Methods:
![56a7458edd14ea3c363585882e3349df.png](https://i-blog.csdnimg.cn/blog_migrate/230ac51da67d99d4690a0dc053ce2229.jpeg)
![b64217cb02455cdf8ffb8e60d5f60f2e.png](https://i-blog.csdnimg.cn/blog_migrate/b47493b9aa622d066a9229a7453ca56d.jpeg)
2. 矩阵分解方法介绍-MATRIX FACTORIZATION METHODS
Matrix factorization对历史评分矩阵进行分解,得到user和item的
![fcf20662ed5900cbfe4e0fe80872665d.png](https://i-blog.csdnimg.cn/blog_migrate/82eb509634a32ce6294cbb5785916a10.jpeg)
在得到user和item的隐向量之后,可以将user和item画在二维坐标系中,以隐向量值为对应的坐标。这样的可视化图片在一定程度上可以帮助理解把难以解释的隐向量。比如论文中的例子,如果给Gus推荐The Color Purple这种严肃地讨论黑人妇女社会地位的影片肯定不会吸引他:
![de6040ca858bc780b25a3a01737e5dfb.png](https://i-blog.csdnimg.cn/blog_migrate/b9c0f3878e47219e6e4047ad91bf0942.jpeg)
3. 基础的矩阵分解模型实现-A BASIC MATRIX FACTORIZATION MODEL:
Item i的隐向量为
那么主要难点就是如何得到
本质上要解的是最优化问题:
换句话来说就是我们希望
4. 求解的两种方法-LEARNING ALGORITHM
因为
- Stochastic gradient descent
- Alternating least squares
4.1 Stochastic gradient descent(SGD):
Simon Funk提出了使用SGD的方法(http://sifter.org/~simon/ journal/20061211.html)。 这里给出
假设我们有一个参数为θ的function
那么我们使用SGD的目标就是寻找最优的θ使得
- 随机初始化
;
- 循环指定的迭代轮数,执行:
- 对于所有的样本
,执行:
- 计算
;
- 按照
更新
,
为学习速率;
- 计算
- 对于所有的样本
在我们的这个问题里面,参数
首先,我们需要计算
同理,
即:
那么SGD的流程为:
- 随机初始设定
和
- 循环指定的迭代轮数,执行:
- 对于所有的打分
执行:
- 计算
,
;
- 按照
,
更新,
为学习速率;
- 计算
- 对于所有的打分
对应的python实现:
def
4.2 Alternating Least Squares:
一般来说SGD更容易实现且更快,但ALS在两种情况下是比较有优势的:
- 在系统可以并行化时。系统可以并行独立计算每一个
与
,这也导致了算法的潜在大规模并行化。
- 以隐式数据为中心的系统。
具体实现可以参考pyspark ALS:
from
到这里我们就完成了Basic版本的MF方法。
5. 四种优化方案-论文后面作者给出的多种进化版本:
5.1 ADDING BIAS
作者认为评分应该更个性化一些。比如有些user看电影即使烂片儿也给辛苦钱,再烂起步也是6分。有点user极微苛刻,再好顶天儿了也给6分。同理对item也是一样。那么这里笼统地使用
![fa2186142a71b1bc66b272fe2b3a4861.png](https://i-blog.csdnimg.cn/blog_migrate/689a63d6b2d3b236a17cf6328a212a02.png)
那么我们的最优化问题会变成:
![4aa36e64d85299d36813f7c139987eb9.png](https://i-blog.csdnimg.cn/blog_migrate/f6f658e367905fda4f93ca3f881fa7b1.jpeg)
仍可参考上面使用SGD方法来进行求解。
5.2 Additional Input Sources
前面我们对比不同方法的时候,提到Latent Factor Models会导致冷启动问题。这里作者引入user的implicit feedback和user attributes等信息。
user implicit feedback指的是浏览记录、购买记录等。定义N(u)为user有过implicit feedback的items set,每一个item i对应
![4c7cf5654b10fd5740adecf3b76fb225.png](https://i-blog.csdnimg.cn/blog_migrate/d25e781940b35691e162c18aca72ef25.jpeg)
假设user attributes集合为A(u),这里属性集指的是gender、age、income等等属性。每一个属性a对应
![c3d424de9c202ebe5860178350999504.png](https://i-blog.csdnimg.cn/blog_migrate/9ea467a6e506a94d640716492f79ad0d.jpeg)
那么对评分的预测可以被更新为:
![998bacbed65c156b44f4d1a60f28f43e.png](https://i-blog.csdnimg.cn/blog_migrate/735b32673846f4c9ae3b5f655155a9d7.png)
5.3 Temporal dynamics
引入时序信号适应因素随时间而发生的变化:
![6a3e33c0de1418af5b3445973d130a44.png](https://i-blog.csdnimg.cn/blog_migrate/1b08ded897d3a61522a6ea950c04e786.png)
- item的bias变成与时间t相关的;
- user的bias变成与时间t相关的;
-
体现了user的品味随时间t不同而不同;
5.4 Inputs With Varying confidence Levels
作者认为不是所有观测到的rate的权重都应该是一致的,所以引入confidence level参数
![84203005297c87d313f31465d4a221ae.png](https://i-blog.csdnimg.cn/blog_migrate/1a10718343c5e143fbdb5d62f499c960.jpeg)
6.SVD Review
CF问题本质上是一个matrix completion问题。要解决的问题可以被定义为:基于user对历史交互的item的打分情况,给没有看过的item进行打分预测。
SVD全称为Singular Value Decomposition,中文名称叫奇异值分解,是线性代数中的一种常用的矩阵分解方法。在推荐系统、数据压缩等方法经常会被用到。需要回顾的同学见李宏毅老师的线性代数视频。 具体解释和特征值分解的关系可见维基百科:奇异值分解 - 维基百科,自由的百科全书
![0e4a271d0667b6b41737392a7e255357.png](https://i-blog.csdnimg.cn/blog_migrate/466fdf3bc90434333295aabc70210d20.jpeg)
- 将评分矩阵R作为输入,SVD通过factorizing R矩阵,输出M,Σ和U;
- M的列可以重建R的所有列;U的行可以重建R的所有行;
- M的列是orthogonal的,U的列也是orthogonal的;
- Σ是一个diagonal矩阵
本质上SVD在解决的问题为:
![3979aca0c22fc6611893750886bfd845.png](https://i-blog.csdnimg.cn/blog_migrate/4fd3412c24f3abce9e330553de5e8f7b.jpeg)
但有些明显缺陷:
- 缺失数据权重与已知的评分数据的权重是一样的;
- 无正则约束,容易overfitting。
7. 下期预告
下期即第2期要介绍的是FISM《FISM: Factored Item Similarity Models for Top-N Recommender Systems 》
http://glaros.dtc.umn.edu/gkhome/fetch/papers/fismkdd13.pdfglaros.dtc.umn.edu觉得有用有收获的话,关注我吧!多谢多谢!