最近在学习推荐系统的相关内容,所以在这里做一些笔记。
推荐系统算法的概述
1、协同过滤
基于用户和基于物品的协同过滤算法的区别在于:基于用户的协同过滤回答的是“将物品A推荐给哪个用户?”(假设答案是用户B),基于物品的协同过滤回答的是“将哪个物品推荐给用户B?”(在之前的假设中,答案是用户B)。也就是说,两者的问法不一样,但是最终的推荐结果是相同的。基于用户的协同过滤是用在用户少,物品多的场景,反之,基于物品的协同过滤是用在用户多,物品少的场景。总的来说,都是为了减少计算量。只是进行一个转置操作即可。
2、矩阵分解
这是一个非常优雅的推荐算法,因为当涉及到矩阵分解时,我们通常不会太多地去思考哪些项目将停留在所得到矩阵的列和行中。但是使用这个推荐引擎,我们清楚地看到,u是第i个用户的兴趣向量,v是第j个电影的参数向量。所以我们可以用u和v的点积来估算x(第i个用户对第j个电影的评分)。我们用已知的分数构建这些向量,并使用它们来预测未知的得分。
3、聚类
聚类是一种比较弱的个性化推荐,因为这种方法的本质是识别用户组,并对这个组内的用户推荐相同的内容。当我们有足够数据时,最好使用聚类作为第一步,来缩减协同过滤算法中相关邻居的选择范围。这个方法还能挺高复杂推荐系统的性能。每个聚类都会根据其中用户的偏好,来分配一组典型的偏好。每个聚类中的用户,都会收到为这个聚类计算出的推荐内容。
4、深度学习
这里举例其中一个模型:双塔模型
双塔模型最大的特点就是「user和item是独立的两个子网络」,左侧是用户塔,右侧是item塔,这两个塔的参数不共享。
「User特征」主要包括和用户相关的特征:用户id、手机系统、地域、年龄、历史行为序列等
「Item特征」主要包括和Item相关的特征:ItemId、Item类别、Item来源等
之后我们将User特征和Item特征分别输入到特征提取网络(比如说DNN等)得到User Embedding和Item Embedding。之后我们可以计算这两个Embedding之间的余弦距离。「用户点击过的Item其距离更近,用户没有点击过或者讨厌的Item其距离更远」。之后利用算得的loss来更新模型的参数。
虽然图示中用的DNN模块来提取特征,但是这边的特征提取网络可以换成任何你想要的模型。
模型训练好后,我们可以离线将所有的Item通过Item塔得到其向量,并将Item向量保存在FAISS中。
而双塔模型速度快就是因为其能离线将item向量保存在FAISS这样的ANN框架中。
当来了一个用户后,我们首先利用User塔计算得到其用户向量;
之后拿用户向量去FAISS中和Item向量进行相似度计算,并返回距离最近的Top K个Item作为个性化的召回结果。
推荐流程主要包含两部分:召回、排序。
-
召回阶段的目标主要在于降低候选集规模,从全量的候选集中得到用户可能感兴趣的一小部分候选集;召回的目的是从大量电影库中选出部分候选,输入给排序模块,用以提高排序模型性能,因此召回模型的候选量较大,可以采用比较简单的模型。经典的是ItemCF、UserCF、DSSM、Graph、TDM等,此教程采用DSSM简化版,即普通的双塔模型,
-
排序阶段则是将召回阶段得到的候选集进行精准排序,推荐给用户。本文后续会依次从数据处理、离线训练、离线预估、在线召回、在线排序出发,逐一进行细化讲解。排序的目的是引入更多特征,进行更加精细化的预估。一般特点是模型较复杂,候选输入集比较少。经典的是Ctr-DNN,DeepFM等。
参考资料:
1、https://mp.weixin.qq.com/s/sDG5xm1JZ8rIEaVXeVQ5cA
2、https://mp.weixin.qq.com/s/XgPtHa2HUOqd5ajq1ui9AQ
3、https://mp.weixin.qq.com/s/IGbK8-g8v2Gq69JJgC2TlQ
4、https://mp.weixin.qq.com/s/ZayxqNmvK2YmZ4vpSjS3Mg
5、https://mp.weixin.qq.com/s/v9W1nHB3e22rUCHFF5NNPw
6、https://mp.weixin.qq.com/s/qd_qSdqnxwL55_S55OW3Fg
7、https://mp.weixin.qq.com/s/dWvnqp5ZLe4rU_pWH2bnNQ
8、https://mp.weixin.qq.com/s/nHzQM_le5a1POaAtwHMJbw
9、https://mp.weixin.qq.com/s/E11Nm8LlsbKcLIJ82NgzUg
10、https://zhuanlan.zhihu.com/p/27768663