第1章 好的推荐系统
---1.1 什么是推荐系统
- 推荐系统的任务就是联系用户和物品,用于在用户没有明确目的的时候帮助他们发现感兴趣的内容.
- 推荐系统可以用于解决信息过载问题.
---1.2 个性化推荐系统的应用
- 推荐系统一般由前台的展示界面,后台的日志系统以及推荐算法系统3部分构成的.
- 推荐系统在电商平台(如Amazon),电影和视频网站(如Netflix,YouTube),音乐电台,社交网络(如Facebook),个性化阅读(Google Reader)都有大量应用.
---1.3 推荐系统评测
- 一个好的推荐系统是能够令用户,物品提供者和提供推荐系统的网站三方共赢的系统.它不仅能准确预测用户的行为,还要能够扩展用户的视野.
- 推荐系统中主要有3种评测推荐效果的实验方法,最终上线前一般要依次完成:
- 离线实验:通过日志系统获得用户行为数据,并用离线指标评测算法在测试集上的预测结果.缺点是无法计算商业上关注的指标.
- 用户调查:直接询问用户,来获得用户的主观感受.缺点是调查成本高,而且很难保证统计意义.
- 在线实验:将新算法上线做AB测试,即对不同用户采用不同算法,进行比较.缺点是周期比较长,并且对大型网站的多层架构来说可能会相互干扰.
- 推荐系统常用的评测指标有:
- 用户满意度:一般通过用户调查或在线实验获得,主要通过对用户行为的统计得到.
- 预测准确度:可以通过离线实验计算,使用训练集和测试集.根据不同的研究方向分为评分预测(RMSE,MAE),TopN推荐(准确率,召回率).
- 覆盖率:描述一个推荐系统对物品长尾的发掘能力,最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例.较详细的定义采用信息熵或基尼系数.
- 多样性:描述了推荐列表中物品两两之间的不相似性,如果s(i,j)表示物品i和j之间的相似度,那么某一用户u的推荐列表R(u)的多样性.不同的相似度对应不同的多样性.
- 新颖性:尽量给用户推荐他们以前没有听说过的物品.
- 惊喜度:指推荐给用户与他的历史兴趣不相似,但却让他觉得满意的物品.
- 信任度:指用户对推荐系统的信任程度.提高方法是增加透明度(提供推荐解释)和考虑用户的社交网络信息.
- 实时性:一方面实时地更新推荐列表,另一方面需要将新加入系统的物品推荐给用户.
- 健壮性:先用常用的攻击方法向数据集中注入噪声数据,然后再次生成推荐列表,若结果变化不大就说明算法健壮性强.另外也可以使用代价比较高的用户行为,以及使用数据前先进行攻击检测.
- 商业目标:根据不同的网站有不同的商业目标.
第2章 利用用户行为数据
- 推荐算法需要自动发掘用户行为数据,从用户的行为中推测出用户的兴趣.
- 基于用户行为分析的推荐算法称作协同过滤算法.
---2.1 用户行为数据简介
- 用户行为数据最简单的存在形式是日志.
- 用户行为按反馈的明确性分为显性反馈行为和隐性反馈行为.如果按反馈的方向还可以分为正反馈和负反馈.
- 一个用户行为可以用6部分表示:产生行为的用户,行为的对象,行为的种类,产生行为的上下文,行为的内容和权重.
---2.2 用户行为分析
- 互联网上的很多数据分布都满足长尾分布f(x)=ax^k,也就是少部分物品占据了大多数出现次数,
- 用户越活跃,越趋向于浏览冷门的物品.
---2.3 实验设计和算法评测
- 采用K折交叉验证进行离线实验.
- 采用召回率(有多少比例的评分记录包含在最终的推荐列表中),准确率(最终的推荐列表中有多少比例是发生过的评分记录),覆盖率(最终的推荐列表中包含多大比例的物品)和新颖度(推荐列表中物品的平均流行度)作为评测指标.
---2.4 基于邻域的算法
- 基于邻域的算法分为基于用户的协同过滤和基于物品的协同过滤.
- 基于用户的协同过滤(UserCF):
- 基础算法:找到和目标用户兴趣相似的用户集合,找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户.可以通过Jaccard相似度或余弦相似度计算兴趣相似度.
- 在计算余弦相似度的过程中,可以建立物品到用户的倒排表,每个物品都保存对该物品产生过行为的用户列表.对于其中每个物品对应的用户列表,将其中的两两用户对应的稀疏矩阵C[u][v]加1,就得到了所有用户之间不为0的C[u][v]
- 得到用户之间的兴趣相似度后,通过兴趣相似度和对应用户对物品的兴趣加权计算得到物品列表,选取其中目标用户没有过行为的物品进行推荐.
- UserCF的一个重要参数是相似用户数K.它与准确率和召回率没有线性关系,与流行度成正比,与覆盖率成反比.
- 用户相似度的改进:两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度,因此应该惩罚热门物品对相似度的影响:.
-
UserCF的实际使用并不多.
- 基于物品的协同过滤(ItemCF):
- ItemCF的优点是计算难度小于UserCF,而且容易对推荐结果作出解释,是目前业界应用最多的算法.
- 基础算法:计算物品相似度,根据物品的相似度和用户的历史行为给用户生成推荐列表.
- 物品相似度可以简单地计算喜欢物品i的用户中喜欢物品j的比例,但问题是会造成热门物品和其他任何物品都有很大相似度.因此需要惩罚物品j的权重.其中蕴含的假设是每个用户的兴趣都局限在某几个方面,所以两个物品的相似度高就意味着它们很可能属于同一个领域.
- 类似地,使用用户-物品倒排表来求相似度矩阵.然后计算用户u对物品的兴趣列表和某物品与该兴趣列表中物品相似度的加权和来得到物品列表.
- ItemCF的一个重要参数是物品数量K.它与准确率和召回率没有线性关系,与流行度在一定范围内正相关,与覆盖率负相关.
- 在实际使用中,活跃用户对物品相似度的贡献应该小于不活跃的用户,而且为了避免相似度矩阵太稠密,过于活跃的用户会直接被忽略.这称为ItemCF-IUF,可以明显提高覆盖率,降低流行度.
- 物品相似度的归一化可以提高推荐的准确率,覆盖性和多样性.因为热门物品的类内物品相似度一般比较大,而归一化使得同类物品之间的相似度相等.
- UserCF的推荐更社会化,反映了用户所在的小兴趣群体中物品的热门程度,需要维护一个用户相似度矩阵.ItemCF的推荐更个性化,反映了用户自己的兴趣传承,需要维护一个物品相似度矩阵.因此UserCF适合新闻推荐这种注重热门程度和时效性,且物品更新速度很快的内容,而ItemCF则适合图书,电影,电商网站这种用户兴趣比较固定和持久,且物品更新速度不会太快的内容.
- ItemCF的问题是,即使惩罚热门物品的权重,它仍会获得较大的相 似度.解决方法是继续加大对热门物品的惩罚,比如,a取[0.5,1].或人为引入物品的内容数据.
--2.5 隐语义模型
- 隐语义模型的核心思想是通过隐含特征联系用户兴趣和物品.