Press "Enter" to skip to content

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

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

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

 

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

一个用户的特征表达矩阵 , 其中第 行是对第 个用户的特征表达, 是用户特征表达的维度
一个内容的特征表达矩阵 ,其中第 行是对第 个内容的特征表达, 是内容特征表达的维度

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

 

 

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

 

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

 

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

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注