您的位置:首页 > 其它

【每周一文】Factorization Meets the Neighborhood:a Multifaceted Collaborative Filtering Model

2016-03-15 23:48 211 查看

概述

在推荐系统中,协同过滤(CF:Collaborative Filtering)算法由于其领域无关性以及比较好的推荐效果被广泛使用;

CF模型比较常用的包括最近邻方法和因子分解算法,由于这两种算法各有优缺点;该文提出了一种策略将这两种方法进行综合建模,并且可以适用于隐式反馈数据。

已有模型

最近邻方法

CF常用的有user_based和item_based两个模型,后者由于其推荐效果和可解释性比较强,比较被推荐使用。

item_based方法思路是根据用户个人偏好推荐和这些item最相关的物品。过程如下

1. 根据用户和物品的打分矩阵或者相关数据,计算物品两两之间的相似度s(i,j)s(i,j),常用相似度算法包括皮尔逊系数、jaccard系数

2. 通常情况下相似度计算可能需要大量数据支持,对于稀疏数据需要对数据规模进行置信度加权,常用加权方法可以是sij=nijnij+λpijs_{ij}=\frac{n_{ij}}{n_{ij}+\lambda}p_{ij}

3. 用户对某物品打分公式为rui=bui+∑j∈Ski;usij(ruj−buj)∑j∈Ski;usijr_{ui}=b_{ui}+\frac{\sum_{j\in S_{i;u}^k}s_{ij}(r_{uj}-b_{uj})}{\sum_{j\in S_{i;u}^k}s_{ij}},其中bui为基准推荐模型,计算公式为bui=μ+bu+bi,即全局偏置+用户偏置+物品偏置b_{ui}为基准推荐模型,计算公式为b_{ui}=\mu+b_u+b_i,即全局偏置+用户偏置+物品偏置;Ski;uS_{i;u}^k表示在用户关注的物品集合中和物品i最相似的前K个

4. 另外为了进一步刻画效果,可以通过下面方式进行改进rui=bui+∑j∈Ski;uθuij(ruj−buj)r_{ui}=b_{ui}+\sum_{j\in S_{i;u}^k}\theta_{ij}^u(r_{uj}-b_{uj})更和用户相关

因子分解模型

因子分解模型可以将用户和物品分别映射到一个低维空间中,这样根据数据可以得到一个全局的向量表示,用于计算用户与用户、物品与物品以及用户和物品之间的相似度。

可以通过SVD分解得到向量表示,常用的方法是最优化如下问题min ∑rui≠0(rui−μ−bu−bi−pTuqi)2+λ(||pu||2+||qi||2+b2u+b2i)min \ \sum_{r_{ui}\ne0}(r_{ui}-\mu-b_u-b_i-p_u^Tq_i)^2+\lambda(||p_u||^2+||q_i||^2+b_u^2+b_i^2)

新模型

已有模型的问题

最近邻方法根据用户已经打分过的物品,计算和这些物品最相似的物品,相当于一个局部最优问题,没有考虑全局。由于一个用户关注的物品是有限的。

因子分解模型可以得到一个全局表示,可解释性不好。

最近邻模型改进

改进1

以item_based方法为例,之前item之间的相似度都是通过数据统计得到,现在变成模型参数通过模型训练得到,即rui=bui+∑j∈R(u)wij(ruj−buj)r_{ui}=b_{ui}+\sum_{j\in R(u)}w_{ij}(r_{uj}-b_{uj})和之前不同点包括:

1. Item之间的相似度通过学习得到

2. 通过搜索用户所有相关的物品得到最后打分,而不是前K个

3. 模型wij(ruj−buj)w_{ij}(r_{uj}-b_{uj})综合考虑了用户到已有物品j的喜好程度以及物品j到物品i的相关度

改进2

另外可以将隐式数据加入到模型中,则模型变为rui=bui+∑j∈R(u)wij(ruj−buj)+∑j∈N(u)cijr_{ui}=b_{ui}+\sum_{j\in R(u)}w_{ij}(r_{uj}-b_{uj})+\sum_{j\in N(u)}c_{ij}其中N(u)为隐式反馈数据中用户u相关的物品集合

改进3

用户偏置项也可以通过模型学习得到,而不是统计得到,即bui=μ+bu+bib_{ui}=\mu+b_u+b_i都设置为模型参数,通过学习得到,这样可以进一步去除用户和物品偏置,这样更容易推荐长尾数据。

改进4

为了解决模型中参数两级分化问题,对邻域个数进行归一,即rui=bui+|R(u)|−12∑j∈R(u)wij(ruj−buj)+|N(u)|−12∑j∈N(u)cijr_{ui}=b_{ui}+|R(u)|^{-\frac12}\sum_{j\in R(u)}w_{ij}(r_{uj}-b_{uj})+|N(u)|^{-\frac12}\sum_{j\in N(u)}c_{ij}为了降低复杂度可以提前去除一些不相关的物品集合,即定义Rk=R(u)∩Sk(i)R^k=R(u) \cap S^k(i)去代替全部邻域数据

求解算法

可以通过梯度方法进行求解

SVD模型改进

异步SVD

模型表示为rui=bui+qTi(|R(u)|−12∑j∈R(u)xj(ruj−buj)+|N(u)|−12∑j∈N(u)yj)r_{ui}=b_{ui}+q_i^T(|R(u)|^{-\frac12}\sum_{j\in R(u)}x_j(r_{uj}-b_{uj})+|N(u)|^{-\frac12}\sum_{j\in N(u)}y_j)

其中参数qi,xj,yjq_i,x_j,y_j都是物品在低维空间中的表示。

主要思路是将用户表示为其相关物品向量的累加。

好处

更少的参数,模型仅和物品有效个数相关,一般情况下用户个数会更多。

2.对于新用户可以解决冷启动问题,用户表示直接通过用户点击的物品得到

可解释性相对于原始模型较强

可以更有效的集成隐式反馈数据,可以通过调整隐式向量系数得到。

SVD++

为了进一步集成隐式反馈数据,可以通过直接将隐式数据反馈到模型中,rui=bui+qTi(pu+|N(u)|−12∑j∈N(u)yj)r_{ui}=b_{ui}+q_i^T(p_u+|N(u)|^{-\frac12}\sum_{j\in N(u)}y_j)相当于对原始模型的直接改进。

模型集成

将以上两个模型集成到一起可以得到

rui=μ+bu+bi+qTi(pu+|N(u)|−12∑j∈N(u)yj)+|Rk(u)|−12∑j∈Rk(u)wij(ruj−buj)+|Nk(u)|−12∑j∈Nk(u)cijr_{ui}=\mu+b_u+b_i+q_i^T(p_u+|N(u)|^{-\frac12}\sum_{j\in N(u)}y_j)+|R^k(u)|^{-\frac12}\sum_{j\in R^k(u)}w_{ij}(r_{uj}-b_{uj})+|N^k(u)|^{-\frac12}\sum_{j\in N^k(u)}c_{ij}相当于将三层模型进行累加

1. 第一层模型:基准模型

2. 第二层模型:因子分解模型,会考虑到全局用户和物品画像

3. 第三层模型:最近邻模型,会考虑到用户本身偏置特征。

结论

在该文中作者还提出了一种评估推荐系统的方法,不在赘述。

该文提出对CF模型进行改进,改进效果针对Netfix数据取得不错效果,在实际中这种科研推进方式还是可以推荐的。

另外SVD++算法应用比较广泛,有效将显示和隐式数据进行结合,值得注意的是本文对隐式数据建模比较简单,复杂建模方法考虑相关论文。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: