1.13《推荐系统实践》笔记(上)
两天一口气看完《推荐系统实践》,非常的爽,收获非常的大。作者不仅是技术性介绍,更是结合自己的商业理解。加上作者长时间的竞赛工作第一手经验,本书价值非常大!!!
《推荐系统实践》笔记
作者:项亮
出版社: 人民邮电出版社
图灵原创
笔记作者:jinwangjoshua(Github欢迎加星)
第一章 好的推荐系统
- 应用:
- 电子商务,电影视频,音乐电台,社交网络,阅读,基于位置(外卖,打车),个性化邮件,个性化广告
- 推荐系统评测
- 实验方法:离线实验,用户调查,在线实验(AB test)
- 评价指标:
○ 用户满意度:问卷调查
○ 预测准确度:评分RMSE, MAE; TopN推荐
○ 覆盖率:发现长尾物品
○ 多样性:覆盖用户不同兴趣
○ 新颖性(流行度反过来)
○ 惊喜度,信任度,实时性,健壮性(Robust)
○ 商业目标(广告盈利) - 评价维度:用户维度,物品维度,时间维度
第二章 利用用户行为数据
用户行为数据一般以日志存储; 一般分布式存储:离线分析hadoop hive, 在线分析google dremel
用户行为在个性化推荐系统中一般分两种——显性反馈行为(explicit feedback)和隐性反馈 行为(implicit feedback)。显性反馈行为包括用户明确表示对物品喜好的行为
用户行为长尾分布zipf; 长尾分布的双对数曲线是直线
常用数据集delicious, citeUlike原始数据; netflix,movielens人工清洗过来
用户越活跃, 越倾向于浏览冷门物品
协同过滤算法:如基于邻域的方法(neighborhood-based基于用户和基于物品)、隐语义模型 (latent factor model)、基于图的随机游走算法(random walk on graph)
评测方法: 离线实验, 用户调查, 在线实验
-
实验例子:本章着重 研究隐反馈数据集中的TopN推荐问题,因此忽略了数据集中的评分记录。也就是说,TopN推荐 的任务是预测用户会不会对某部电影评分,而不是预测用户在准备对某部电影评分的前提下会给 电影评多少分。
- 数据集:movielense
- 实验设计:划分数据集,测量评测指标
- 评测指标:
○ 召回率描述有多少比例的用户—物品评分记录包含在最终的推荐列表中
○ 准确率描述最终 的推荐列表中有多少比例是发生过的用户—物品评分记录。
○ 覆盖率反映了推荐算法发掘长尾的 能力,覆盖率越高,说明推荐算法越能够将长尾中的物品推荐给用户。覆盖率表示最终的推荐列表中包含多大比例的物品
○ 推荐的新颖度,这里用推荐列表中物品的平均流行度度量推荐结果的新颖度; 越不流行越新颖
-
基于用户的协同过滤算法(UerCF算法):基于用户相似的兴趣和口味
- 计算用户兴趣相似度:很多用户相互之间并没有对同样的物品产生过行为,为此,可以首先建立物品到用户的倒排表,对于每个物品都保存对该物品产生过行为的用户 列表;然后,建立一个4×4的用户相似度矩阵W,对于物品a,将W[A][B]和W[B][A]加1,对 于物品b,将W[A][C]和W[C][A]加1,以此类推。扫描完所有物品后,我们可以得到最终的W矩阵。 这里的W是余弦相似度中的分子部分,然后将W除以分母可以得到最终的用户兴趣相似度。
- 得到用户之间的兴趣相似度后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的 物品。
- Random算法每次都随机挑选10个用户没有产生过行为的物品推荐给当前用户,MostPopular算法 则按照物品的流行度给用户推荐他没有产生过行为的物品中最热门的10个物品
改进User-IIF算法(John S. Breese改进): 计算兴趣相似度时候,惩罚了用户u和用户v共同兴趣列表中热门物品对他们相 似度的影响。
-
UserCF应用:不多,比如Digg
- 缺点:当用户数量太大,用户相似度计算量(时间复杂度和空间复杂度)太大;
-
基于物品的协同过滤(ItemCF算法):)给用户推荐那些和他们之前喜欢的物品相似的物品
- 并不利用物品内容属性计算物品相似度,????它主要通过分析用户的行为记录计算物品之间的 相似度
- 给出推荐理由:根据你购买/喜欢/收藏的XX推荐;Customers Who Bought This Item Also Bought
-
ItemCF步骤:计算物品相似度;根据物品相似度和用户的历史行为进行推荐
- 计算物品相似度:
○ 首先建立用户—物品倒排表,而不是基于内容属性 - 评价:精度(准确度,召回率);流行度;覆盖率
- 计算物品相似度:
-
改进ItemCF:(ItemCF-IUF)
- 为IUF(Inverse User Frequence),即用户活跃度对数的 倒数的参数; 活跃用户对物品相似度的贡献应该小于不活跃的用户, John S. Breese提出应该增加IUF 参数来修正物品相似度的计算公式
- 过于活跃用户直接忽略,比如在当当进货的实体店店主
- 相似度矩阵进行最大值归一化,(提高准确度,覆盖率,多样性)
○ 消除类别内部之间相似度差异,可以提高推荐的多样性。
○ 不进行归一化,就会推荐 比较热门的类里面的物品,而这些物品也是比较热门的。因此,推荐的覆盖率就比较低 - 哈利波特问题(极度热门商品):修改相似度,引入惩罚系数Alpha(通常0.5),加大惩罚
-
UserCF和ItemCF的综合比较
- UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,而ItemCF 的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反映了用户所在的 小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。 为什么Digg使用UserCF,而亚马逊网使用ItemCF呢?
○ 内容上:在新闻网站中,用户的兴趣不是特别细化,绝大多数用户都喜欢看热门的新闻。即使是个性 化,也是比较粗粒度的,比如有些用户喜欢体育新闻,有些喜欢社会新闻,而特别细粒度的个性 化一般是不存在的。
○ 技术上实效性:Item难以实现快速更新,因为需要维护物品相关度矩阵(书中说一天一更),而新闻注重实效性; 但是电子商务和图书电影方面,用户兴趣一般比较固定和持久
○ 计算上: 用户很多,那么维护用户兴趣相似度矩阵需要很大的空间, - 都是基于用户对物品行为,不涉及物品的内容数据,这是与LFM隐语义模型区别所在
- 选择:先满足产品需求(比如解释的需要);其次看实现代价(技术能力)
- UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,而ItemCF 的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反映了用户所在的 小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。 为什么Digg使用UserCF,而亚马逊网使用ItemCF呢?
-
隐语义模型(LFM,latent factor model )
- 核心思想是通过隐含特征 (latent factor)联系用户兴趣和物品.对书和物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类, 然后从分类中挑选他可能喜欢的物品
- 总结一下,这个基于兴趣分类的方法大概需要解决3个问题。
○ 如何给物品进行分类?
§ 编辑分类难点:和用户分类有出入;难以控制颗粒度;难以给出多分类;很难多维度分类(内容,作者,出版社等等);难决定物品在分类中权重
§ 解决:LFM让用户分类;自动多分类;自动计算物品属于每个类别权重和一个物品在某个分类中的权重;制定分类->数字越大,分类越细
○ 如何确定用户对哪些类的物品感兴趣,以及感兴趣的程度?
○ 对于一个给定的类,选择哪些属于这个类的物品推荐给用户,以及如何确定这些物品在 一个类中的权重? - 常用模型和方法:有pLSA、LDA、隐含类别模型(latent class model)、隐含主题模型(latent topic model)、 矩阵分解(matrix factorization)
- 使用场景:
○ 显性反馈数据(评分数据)达到很好精度;
○ 书中介绍隐形反馈数据集(问题是只有正样本而没有负样本)
§ 解决:采集负样本–没有行为的样本
§ 遵循原则:正负数目平衡;尽量选取很热门用户却没有行为的物品
-
模型细节:损失函数(注意正则项); 随机梯度下降
- LFM重要参数:
○ 隐形特征F
○ 学习速率alpha
○ 正则系数lambda
○ 负/正样本比例ratio:影响最大,控制推荐算法发掘长尾能力(流行度),影响准确度(本书中1-10之内准确率上升趋势,之后平稳) - 例子:雅虎个性化首页Bee-Chung Chen、Deepak Agarwal、Pradheep Elango和Raghu Ramakrishnan的“Latent Factor Models for Web Recommender Systems”; 雅虎的研究人员以CTR作为优化目标,利用LFM来预测用户是否会单击一个链接。为此, 他们将用户历史上对首页上链接的行为记录作为训练集。解决实效性?长期历史行为LFM(每天更新) + 最近几小时历史行为LFM (快速计算)
- LFM重要参数:
LFM和基于邻域比较
| LFM | UesrCF/ItemCF |
| 理论基础 | 机器学习方法 | KNN, 统计 |
| 离线计算空间复杂度 | 小很多 | 大很多 |
| 离线计算时间复杂度 | 没大区别 | 没大区别 |
| 在线实时推荐 | 难以实时 | 将需要表格缓存在内存中 |
| 推荐解释 | 基于用户行为进行内容分类,但是难以描述 | 根据用户历史记录进行推荐-
基于图的模型:将user-item relationship当作二分图,查找两个顶点相关性
- 相关性高度顶点的特征:
○ 两个顶点之间有很多路径相连;
○ 连接两个顶点之间的路径长度都比较短;
○ 连接两个顶点之间的路径不会经过出度比较大的顶点。 - 典型算法是基于随机游走的PersonalRank算法:假设要给用户u进行个性化推荐,可以从用户u对应的节点vu开始在用户物品二分图上进行随 机游走。游走到任何一个节点时,首先按照概率 α 决定是继续游走,还是停止这次游走并从vu节 点开始重新游走。如果决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一 个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品节点被访问到的概率 会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。
(非本书内容)知乎严林:基于图的算法(如PersonalRank等),由于其计算复杂度很高,在工业界应用是比较少的。https://www.zhihu.com/question/30467586
- 相关性高度顶点的特征: