使用协同滤波(Collaborative Filtering)实现内容推荐系统

协同滤波可以同时使用不同用户与内容之间的相似度进行内容推荐,这样可以产生一些意料之外的推荐结果。也就是说,如果用户A和用户B具有类似的兴趣,它可以向用户A推荐一些用户B喜欢的内容。另外,协同滤波模型可以自动地学习对用户和内容的特征表达(Embedding),而不需要手工来设计这些特征。假设内容的特征表达是固定的,那么该模型可以学习对用户的特征表达来最佳地解释用户的偏好。这样的结果就是,具有类似偏好地用户在特征空间中也是相近的。类似的,如果用户的特征表达是固定的,我们便可以学习对内容的特征表达,来最佳的阐释用户对内容的反馈。这样的结果就是,被类似用户喜欢的电影,他们在特征空间中也是相近的。

假设我们有m个用户以及n个可以推荐的内容(例如音乐、电影、软件和商品等等),用户对内容的反馈则存储在一个矩阵A \in \mathbb{R}^{m \times n}当中。A_{ij}代表用户i对内容j的反馈,它可以代表用户是否喜欢该内容,也可以是对内容的评分。那么,协同滤波(Collaborative Filtering)则会学习以下的内容:

  • 一个用户的特征表达矩阵U\in\mathbb{R}^{m \times d}, 其中第i行是对第i个用户的特征表达,d(d\ll m)是用户特征表达的维度
  • 一个内容的特征表达矩阵V\in\mathbb{R}^{n \times d},其中第j行是对第j个内容的特征表达,d(d\ll n)是内容特征表达的维度

协同滤波模型学习的目标是,使得矩阵乘积UV^T近似逼近于反馈矩阵A,也就是说使得每一对特征向量的内积(U_i,V_j),都尽可能地接近A_{i,j}的值。于是,我们可以写出如下的目标函数,并设法求出使其达到最小值的参数UV

Loss(U,V)=\frac{1}{|\Omega|}\sum_{(i,j)\in\Omega}(A_{ij}-(U_i,V_j))^2

其中\Omega=\{(i,j)|A_{i,j} \neq \varnothing, i\in[1,m], j\in[1,n]\},即反馈矩阵A中非空元素的下标集合。可以看到,这也是一个矩阵分解问题,即把矩阵A分解成两个矩阵的乘积UV^T,可以通过奇异值分解(Singular Value Decomposition)的方法求解。但由于实际应用中,用户仅能对少量的内容进行反馈,A矩阵是极其稀疏的,大多数时候奇异值分解并不能很好的解决该问题。不过,我们还是可以使用一种通用的随机梯度下降法(Stochastic Gradient Descent)来迭代求解该问题,一个基于Tensor Flow的实现例子在这里可以找到。

协同滤波模型的优点有:1)不需要专业领域的知识,因为对用户和内容的特征表达都是通过自动学习完成的。2)通过比较相似用户的偏好,该模型可以帮助用户发现新的感兴趣内容。3)它只需要一个用户反馈矩阵作为输入,因此实现起来相对简洁。但是该模型的缺点在于,如果某内容在训练时没有出现,则无法对向用户推荐该内容,这是由于在训练时要计算每一对用户特征向量和内容特征向量的内积。

内容推荐系统在音乐、电影、软件、交友及电子商务网站上有着很广泛的应用,它极大的方便了用户对感兴趣内容的探索,并一定程度提高了对网站内容的流量。随着人们对该话题研究的深入,也出现了很多基于深度学习的实现方法,例如图神经网络(Graph Neural Network)。对该方法的介绍将会在之后的文章中对其进行讨论。

 

你可能感兴趣的:(机器学习)