这一讲我们将正式进入算法内容的学习。
推荐算法本质
推荐算法本质上是一一种信息处理方法,它将用户信息和物品信息处理后,最终输出了推荐结果。因为 05 讲中基于热门推荐、基于内容推荐、基于关联规则推荐等方法比较粗放,所以推荐结果往往不够精准。如果我们想打造一个千人千面、真正符合用户个性化推荐需求的推荐系统,就需要使用到更为复杂的运算逻辑——推荐算法。
而推荐算法又分为传统机器学习算法和深度学习算法,因此我们会分别通过模块二、三两大模块单独进行介绍,模块二我们主要学习传统机器学习算法。
根据是否使用了辅助信息(如商品的类名、店铺名等),传统机器学习算法分为了基于邻域的方法和基于特征的方法这两类。06 讲我们主要介绍基于邻域的推荐算法——协同过滤算法,基于特征的方法将在 07 中着重介绍。
我们把用户编号作为纵坐标,帖子编号作为横坐标,并通过将用户与帖子是否存在交互过程进行标记,然后填写到如下所示表格中。这时,一个用户与物品的行为矩阵就这样搭建成功了。
请注意:表中的帖子数量和用户数量十分庞大。
针对上表中的内容,如果我们对行为分类进行打分(比如点击浏览 1 分、打电话 3 分、58 微聊 3 分、收藏 5分等),再把对应分数填充到矩阵中,就可以得到一个评分矩阵,具体细节这里不作描述。
此时,如果我们需要对用户 A 进行推荐,根据如下所示表格,我们发现用户 A、用户 B 与用户 C 都对帖子 1、帖子 2、帖子 3 感兴趣,因此我们认为用户 A、用户 B、用户 C 比较相似。
同时,我们还发现用户 B 还看过帖子 4,用户 C 还看过帖子 5,而这 2 个帖子用户 A 都没看过。基于相似性原则,我们认为用户 A 很大概率上会对帖子 4 和帖子 5 感兴趣。因此,生成推荐时,我们也会向用户 A 推荐帖子 4 和帖子 5。
以上就是协同过滤算法的基本思想,接下来我们将协同过滤算法逐个拆解进行说明。
协同过滤算法分类
在互联网应用场景中,存在大量用户看了又看、买了又买、买过还买等情况,因此,我们需要利用集体智慧将用户和物品的所有交互行为实现个性化推荐,此时就可以考虑使用协同过滤算法。
协同过滤算法(Collaborative Filtering,简称 CF)是推荐算法中最成熟、应用最广的一种算法。根据模型相似度计算的对象,我们把协同过滤算法(CF)分为了 UserCF、ItemCF 、ModelCF 这 3 种,下面我们逐一展开说明。
基于用户的协同过滤算法(UserCF)
通过分析用户喜欢的物品,我们发现如果两个用户(用户A 和用户 B)喜欢过的物品差不多,则这两个用户相似。此时,我们可以将用户 A 喜欢过但是用户 B 没有看过的物品推荐给用户 B。
基于用户的协同过滤算法(UserCF)的具体实现思路如下:
(1)计算用户之间的相似度;
(2)根据用户的相似度,找到这个集合中用户未见过但是喜欢的物品(即目标用户兴趣相似的用户有过的行为)进行推荐。
基于物品的协同过滤算法(ItemCF)
通过分析用户喜欢的物品,我们发现如果两个物品被一拨人喜欢,则这两个物品相似。此时,我们就会将用户喜欢相似物品中某个大概率物品推荐给这群用户。
基于物品的协同过滤算法的具体实现思路如下:
(1)计算物品之间的相似度;
(2)根据物品的相似度和用户的历史行为进行推荐。
基于模型的协同过滤算法(ModelCF)
基于模型的协同过滤算法也叫基于学习的方法,通过定义一个参数模型,我们可以描述用户和物品、用户和用户、物品和物品之间的关系,然后将已有的用户与物品评分矩阵(例如矩阵分解、隐语义模型 LFM 等)作为样本优化求解,最终得到模型参数。
关于这个算法的具体实现思路我们会在下面的内容中进行着重说明。
了解了协同过滤算法的具体实现思路,下面我们来看看具体的计算过程,这也是本节课的重点内容,一定要好好学哦~
协同过滤算法计算过程
协同过滤算法(CF) 的本质是矩阵填充问题(Matrix Completion),即基于矩阵内部的已知值填充剩下的未知值。已知值指用户对已经交互过的物品的打分,未知值指用户对未交互过的物品的打分,对未知值的填充也就是指整个模型预测过程。
协同过滤算法(CF)的计算基础是相似度计算,因此,协同过滤算法(CF)计算过程的第一步就是找到与目标用户相似的用户或者与目标物品相似的物品,例如 UserCF 依赖计算用户之间的相似度,ItemCF 依赖计算物品之间的相似度等。
一般来说,常见的相似度计算方法主要分为基于欧式距离的相似度计算、基于 Jaccard 公式的相似度计算、余弦相似度计算、皮尔逊相似度计算等。这里,我们将重点说一下使用最多的 Jaccard 相似度计算、余弦相似度计算和皮尔逊相似度计算。
Jaccard相似度计算
关于 Jaccard 相似度的计算公式如下图所示:
其中 N(u) 表示用户 u 购买物品的数量,N(v) 表示用户 v 购买物品的数量,N(u)⋂N(v) 表示用户 u 和 v 购买相同物品的数量。
余弦相似度计算
关于余弦相似度的计算公式如下图所示:
其中,数学公式: R{ik} 表示用户 i 对物品 k 的打分,数学公式: R{jk} 表示用户 j 对物品 k 的打分,n 为总物品数量。
皮尔逊相似度计算
数学公式: I{ij} 表示用户 i 和用户 j 的打分物品集合,R{i,c} R{j,c} 分别表示用户 i 对物品 c 的打分数、用户 j 对物品 c 的打分数,image.png分别表示用户 i 所有评分的平均数、用户 j 所有评分的平均数。
由此可见,Jaccard 相似度计算和余弦相似度计算结果为绝对距离,而皮尔逊相似度计算结果是相对距离。Jaccard 相似度计算和余弦相似度计算通过将各个用户在评分上的差异性去均值,从而避免了分数膨胀问题的发生,关于相似度算法的细节在 06 讲中我们不作深入讨论。
相似度计算结果输出后,下一步我们需要做的事情是对未知值进行预测。
对 UserCF 来说,假设存在用户 u 和用户 v,由第一步已知用户 u 与用户 v 的相似度是w{uv} ,其中用户 v 对物品 i 有过交互行为,打分为 r{vi} ,用户 u 对物品 i 没有交互行为,即没有打分。于是,通过利用与用户 u 最相似的 k 个用户 S(u,k)对物品 i 的打分,我们就可以得到用户 u 对未交互的物品 i 的预测分数,具体的计算公式如下图所示:
其中 N(i) 是所有对物品 i 有过交互行为和打分的用户集合, w{uv} 代表用户 u 和用户 v 的相似度,r{vi}代表用户 v 对物品 i 进行直接交互的行为打分。
对 ItemrCF 来说,假设存在物品 i 和物品 j,由第一步已知物品 i 和物品 j 的相似度为w{ji} ,其中用户 u 对物品 i 有过交互行为,打分为 r{ui},用户 u 对物品 j 没有交互行为和打分。于是,利用用户 u 对物品 i 最相似的 k 个物品的打分 S(j,k),我们就可以得到用户 u 对未交互的物品 j 的预测分数,具体的计算公式如下图所示:
其中 N(u)代表用户喜欢的物品的集合,w{ji}代表物品 j 和物品 i 的相似度, r{ui}是用户 u 对物品 i 进行直接交互的行为打分。
以上我们介绍了 UserCF 和 ItemCF 算法的计算过程,二者都是基于用户和物品的交互行为进行计算。其中,UserCF 计算用户间的相似度,ItemCF 计算物品间的相似度,然后我们利用相似度计算结果给用户推荐行为历史记录相似度较高的物品。
当然,除了以上两种计算算法外,推荐系统还可以依照用户兴趣分类给用户推荐该类别的物品,也就是我们前面所说的基于模型的协同过滤算法(ModelCF)。
关于基于模型的协同过滤算法(ModelCF)的具体实现思路如下:
(1)根据用户行为得到用户在各个分类的兴趣打分;
(2)将不用的物品分别放入各个分类下。
这里需要说明的是,同一个物品可以分别属于不同的分类,比如对《道德经》这本书进行分类,它既可以归为“哲学”,也可以归为“古典文学”,至于它更偏向于哪个分类,我们以其在这两个分类上对应的权重系数进行判断,即完全取决于用户把《道德经》当成哲学著作来读还是当作文学作品来读,这就是用户行为的具象化。对用户行为进行分类后,我们就能够计算出该用户在每个分类上的偏好权重。
基于模型的协同过滤算法(ModelCF)通过基于用户行为统计的自动聚类,指定了表征用户偏好和物品的向量维度,最终得到用户的偏好向量和物品的表征向量,最终利用表征向量实现对应物品推荐,具体实现步骤为:
(1)计算物品的分类、用户和物品的表征向量;
(2)根据用户和物品的表征向量进行推荐。
这里可以看出,我们需要解决的核心问题是计算用户和物品的表征向量(是不是出现深度学习的影子了?)。而隐语义模型(LFM)正是基于这样的思路,因此它完美解决了这个核心问题。下面我们具体讲解下隐语义模型的实现思路。
假设物品有若干个分类,不同用户对不同分类的兴趣度不同,同时每个分类中又包含若干种物品,每个物品在该分类中又会存在一个对应权重。因此,任何一个用户 u 对物品 i 的偏好计算(用户和物品的表征向量),我们可以使用如下图所示的计算公式:
其中, p{u,k}表示用户 u 和分类 f 的偏好权重, q{i,k} 表示物品 i 和分类 f 的权重。
从公式中,我们发现 LFM 把用户评分矩阵分解为了用户偏好矩阵和物品分类矩阵,这就是所谓的矩阵分解方法。其实,LFM 属于矩阵分解方法中最基础的一种方法,之后逐步衍生出了 FunkSVD、BiasSVD、 SVD++ 等广泛应用的方法。
小结与预告
协同过滤算法曾经是推荐算法中经典的存在,曾几何时只要我们提到推荐系统,就会提起协同过滤算法。因此,06 讲我们主要介绍了典型的推荐算法——协同过滤算法,它本质上是一个矩阵填充问题,通过相似度计算即可完美解决(包括基于用户的相似、基于物品的相似等)。另外,我们还可以通过矩阵分解方法找到用户和物品在某个维度上的表征向量。
《道德经》中说:“和其光,同其尘,是谓玄同”,协同过滤算法真正做到了“从用户中来到用户中去”,它通过摆脱硬性规则,从而在效果上超越了其他策略。07 讲我将带你深入了解传统机器学习算法的另外一种方法——推荐特征交叉算法。
对于协同过滤算法,你是否还有不同的见解?欢迎在留言区与我进行互动、交流。
另外,如果你觉得本专栏有价值,欢迎分享给更多好友哦~