好的推荐系统
什么是推荐系统
推荐系统的任务任务就是联系用户信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息生产者的双赢。
从物品的角度出发,推荐系统可以更好地发掘物品的长尾。
1)社会化推荐
2)基于内容的推荐
3)基于协同过滤的推荐
个性化推荐系统的应用
- 电子商务
- 个性化推荐列表
- 相关推荐列表
- 最重要的应用就是打包销售。
- 电影和视频网站
- 个性化音乐网络电台
- 个性化推荐的成功应用需要两个条件:第一是存在信息过载,如果用户可以很容易地从所有物品中找到喜欢的物品,就不需要个性化推荐了;第二是用户大部分时候没有特别明确的需求,因为用户如果有明确的需求,可以直接通过搜索引擎找到感兴趣的物品。
- 社交网络
- 利用用户的社交网络信息对用户进行个性化的物品推荐
- 信息流的会话推荐:每个分享和它的所有评论被称为一个会话
- 给用户推荐好友
- 个性化阅读
- 基于位置的服务
- 个性化邮件
- 个性化广告:以广告为中心
- 上下文广告
- 搜索广告
- 个性化展示广告
推荐系统评测
一个完整的推荐系统一般存在3个参与方:用户、物品提供者、提供推荐系统的网站。
在评测一个推荐算法时,需要同时考虑三方的利益,一个好的推荐系统是能够令三方共赢的系统。
- 推荐系统实验方法
1)离线实验:训练集、测试集;主要缺点是无法获得很多商业上关注的指标,如点击率、转化率等
2)用户调查:用户调查要尽量保证是双盲实验,不要让实验人员和用户事先知道测试的目标,以免用户的回答和实验人员的测试受主观成分的影响
3)在线实验:AB测试是一种和常用的在线评测算法的实验方法,它通过一定的规则将用户随机分成几组,并对不同的用户采用不同的算法,然后通过统计不同组用户的各种不同的测评指标比较不同算法,比如可以统计不同组用户的点击率,通过点击率比较不同算法的性能;AB测试的优点是可以公*获得不同算法实际在线时的性能指标,包括商业上关注的指标,缺点主要是周期比较长,必须进行长期的实验才能得到可靠的结果;切分流量是AB测试中的关键,不同的层以及控制这些层的团队需要从一个统一的地方获得自己AB测试的流量,而不同层之间的流量应该是正交的
- 评测指标
1)用户满意度:点击率、用户停留时间、转化率等
2)预测准确度:最重要的推荐系统离线评测指标;评分预测、TopN推荐(准确率、召回率)
3)覆盖率:描述一个推荐系统对物品长尾的发掘能力;社会学领域有一个著名的马太效应,即所谓强者更强,弱者更弱的效应。如果一个系统会增大热门物品和非热门物品的流行度差距,让热门的物品更加热门,不热门的物品更加不热门,那么这个系统就有马太效应。很多研究表明现在主流的推荐算法是具有马太效应的,评测推荐系统是否具有马太效应的简单办法就是使用基尼系数。
4)多样性:推荐系统的整体多样性可以定位为所有用户推荐列表多样性的*均值。
5)新颖性:在一个网站中实现新颖性的最简单办法是,把用户之前在网站中对其有过行为的物品从推荐列表中过滤掉。
6)惊喜度:提高推荐惊喜度需要提高推荐结果的用户满意度,同时降低推荐结果和用户历史兴趣的相似度。
7)信任度:度量推荐系统的信任度只能通过问卷调查的方式;增加透明度(提供推荐解释),利用用户好友信息推荐,并用好友进行推荐解释。
8)实时性:推荐系统需要实时地更新推荐列表来满足用户新的行为变化;推荐系统需要能够将新加入系统的物品推荐给用户,主要考验推荐系统处理物品冷启动的能力。
9)健壮性:设计推荐系统时,尽量使用代价比较高的用户行为;在使用数据前,进行攻击检测,从而对数据进行清理。
- 评测维度
- 用户维度
- 物品维度
- 时间维度
利用用户行为数据
基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为协同过滤算法。协同过滤就是指用户可以齐心协力,通过不断地和网站互动,是自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。
用户行为数据简介
- 显性反馈行为:明确、较少、数据库、实时、正负都有
- 隐形反馈行为:不明确、庞大、分布式文件系统、有延迟、只有正反馈
- 按照有无上下文信息分类
用户行为分析
- 用户活跃度和物品流行度的分布
- 互联网上的很多数据分布都满足一种称为PowerLaw的分布,这个分布在互联网领域也称为长尾分布。
- 用户活跃度和物品流行度的关系
- 基于邻域的算法
- 基于用户的协同过滤算法
- 基于物品的协同过滤算法
- 隐语义模型(LFM)
- 基于图的随机游走算法
- 基于邻域的算法
实验设计和算法评测
- 数据集
- 实验设计
- 评测指标
基于邻域的算法
- 基于用户的协同过滤算法
- 找到和目标用户兴趣相似的用户集合
- 找到这个集合中的用户喜欢的且目标用户没有听说过的物品推荐给目标用户
- 基于物品的协同过滤算法
- 随着网站的用户数目越来越大,计算用户兴趣相似度矩阵将越来越困难,其运算时间复杂度和空间复杂度的增长和用户数的增长*似于*方关系;基于用户的协同过滤算法很难对推荐结果做出解释。
- ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度
- 计算物品之间的相似度、根据物品和用户的历史行为给用户生成推荐列表。
- UserCF和ItemCF的综合比较
- UserCF
- 适用于用户较少的场合,如果用户很多,计算用户相似度矩阵代价很大
- 领域:时效性很强,用户个性化兴趣不太明显的领域
- 用户有新行为,不一定造成推荐结果的立即变化
- 在新用户对很少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度表是每隔一段时间离线计算的;新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给和对它产生行为的用户兴趣相似的用户。
- 很难提供令用户信服的推荐解释
- ItemCF
- 适用于物品数明显小于用户数的场合,如果物品很多,计算物品相似度矩阵代价很大
- 领域:长尾物品丰富,用户个性化需求强烈的领域
- 用户有新行为,一定会导致推荐结果的实时变化
- 新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其他物品,但没有办法在不离线更新物品相似度表的情况下将新物品推荐给用户
- 利用用户的历史行为给用户做推荐解释,可以令用户比较信服
- UserCF
UserCF的推荐结果着重于反应和用户兴趣相似的小群体的热点,而ItemCF的推荐结果着重于维系用户的历史兴趣。UserCF的推荐更社会化,反映了用户所在的小型群里中物品的热门程度,而ItemCF的推荐更加个性化,反应了用户自己的兴趣传承。
隐语义模型
- 基础算法
- 核心思想是通过隐含特征联系用户兴趣和物品
- 隐含语义分析技术采取基于用户行为统计的自动聚类,允许指定最终有多少个分类。
- 用户与隐类的关系、隐类和物品的关系
- pLSA、LDA、隐含类别模型、隐含主题模型、矩阵分解
- 基于LFM的实际系统的例子
- LFM和基于邻域的方法的比较
- LFM具有比较好的理论基础,是一种学习方法,通过优化一个设定的指标建立最优的模型;基于邻域的方法更多的是一种基于统计的方法,并没有学习过程。
- LFM不太适合用于物品数非常庞大的系统,LFM不能在线实时推荐
- LFM无法提供推荐解释
基于图的模型
- 用户行为数据的二分图表示
- 可以把基于邻域的模型看做基于图的模型的简单形式
- 基于图的推荐算法
推荐系统冷启动问题
冷启动问题简介
- 用户冷启动:新用户
- 物品冷启动:新物品
- 系统冷启动:新网站,无用户,只有物品信息
利用用户注册信息
- 人口统计学信息
- 用户描述的兴趣
- 从其他网站导入的用户站外行为数据
- 基于用户注册信息的推荐算法其核心问题是计算每种特征的用户喜欢的物品,也就是说,对于每种特种f,计算具有这种特征的用户对各个物品的喜好程度。
选择合适的物品启动用户的兴趣
- 能够用来启动用户兴趣的物品需要具有以下特点
- 比较热门
- 具有代表性和区分性
- 启动物品集合需要有多样性
利用物品的内容信息
-
当新物品加入时,内存中的物品相关表不会存在这个物品,从而ItemCF算法无法推荐新的物品,解决这一问题的办法是频繁更新物品相似度表,但基于用户行为计算物品相似度是非常耗时的事情,主要原因是用户行为日志非常庞大;而且,新物品如果不展示给用户,用户就无法对它产生行为,通过行为日志计算是计算不出包含新物品的相关矩阵的。为此,我们只能利用物品的内容统计信息计算物品相关表,并且频繁地更新相关表。
-
内容过滤算法
- 文本-分词-实体检测-关键词排名-关键词向量-余弦相似度计算物品相关性
发挥专家的作用
利用用户标签数据
标签是一种五层次化结构的、用来描述信息的关键词,它可以用来描述物品的语义。根据给物品打标签的人的不同,标签应用一般分为两种:一种是让作者或者专家给物品打的标签;另一种是让普通用户给物品打标签,也就是UGC(User Generated Content,用户生成的内容)的标签应用。UGC的标签系统是一种表示用户兴趣和物品语义的重要方式,当一个用户对一个物品打上一个标签,这个标签一方面描述了用户的兴趣,另一方面则表示了物品的语义,从而将用户和物品联系了起来。
UGC标签系统的代表应用
- Delicious
- CiteUlike
- Last.fm
- 豆瓣
- Hulu
标签系统中的推荐问题(基于标签的推荐、推荐标签)
- 用户为什么进行标注
- 用户如何打标签
- 用户打什么样的标签
基于标签的推荐系统
- 实验设置
- 一个最简单的算法
- 算法的改进
- 基于图的推荐算法
- 基于标签的推荐解释
给用户推荐标签
- 为什么要给用户推荐标签
- 如何给用户推荐标签
- 实验设置
- 基于图的标签推荐算法
利用上下文信息
时间上下文信息
- 时间效应简介
- 用户的兴趣是变化的
- 物品也是有生命周期的
- 季节效应
- 时间效应举例
- 系统时间特性的分析
- 在给定时间信息后,推荐系统从一个静态系统变成了一个时变的系统,而用户行为数据也变成了时间序列
- 推荐系统的实时性
- 推荐算法的时间多样性
- 推荐系统每天推荐结果的变化程度被定义为推荐系统的时间多样性。时间多样性高的推荐系统中用户经常会看到不同的推荐结果。
- 提高推荐结果的时间多样性:
- 保证推荐系统能够在用户有了新的行为后及时调整推荐结果,使推荐结果满足用户最*的兴趣
- 保证推荐系统在用户没有新的行为时也能够经常变化一下结果,具有一定的时间多样性
- 时间上下文推荐算法
- 权重时间衰减
- 时间段图模型
- 离线实验
地点上下文信息
利用社交网络数据
获取社交网络数据的途径
- 电子邮件
- 用户注册信息
- 用户的位置数据
- 论坛和讨论组
- 即时聊天工具
- 社交网站
- 兴趣图谱
- 通过人们之前的共同兴趣和信念形成的社会群体
- 社会图谱
- 由于人们之间的亲属关系、工作关系而形成的社会群体
- 兴趣图谱
社交网络数据简介
- 社交网络数据中的长尾分布
基于社交网络的推荐
社会化推荐之所以受到很多网站的重视,因为具有如下优点:
1)好友推荐可以增加推荐信任度
2)社交网络可以解决冷启动问题
社会化推荐也有一些缺点,其中最主要的就是很多时候并不一定能提高推荐算法的离线精度。
- 基于邻域的社会化推荐算法
- 基于图的社会化推荐算法
- 实际系统中的社会化推荐算法
- 社会化推荐系统和协同过滤推荐系统
- 信息流推荐
- 信息流推荐是社会化推荐领域的新兴话题,它主要针对Facebook、Twitter这样的社交网站,在社交网站中每个用户都有一个信息墙,展示了用户好友最*的言论。这个信息墙无疑已经是个性化的,但是里面还是夹杂了很多垃圾信息。这主要是因为我们并不关心我们关注的好友的所有言论,而只关心他们的言论和自己相关的部分。虽然我们在选择关注时已经考虑了关注对象和自己兴趣的相似度,但显然我们无法找到和自己兴趣完全一致的人。因此,信息流的个性化推荐要解决的问题就是如何进一步帮助用户从信息墙上挑选有用的信息。
给用户推荐好友
- 基于内容的匹配
- 基于共同兴趣的好友推荐
- 基于社交网络图的好友推荐
- 基于用户调查的好友推荐算法对比
推荐系统实例
外围架构
- 数据收集和存储
- 需要实时存取的数据存储在数据库和缓存中,而大规模的非实时地存取数据存储在分布式文件系统(如HDFS)中。
推荐系统架构
推荐引擎的架构
推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一类特征和一种任务,而推荐系统的任务只是将推荐引擎的结果按照一定权重或者优先级合并、排序然后返回。
- 生成用户特征向量
- 用户行为的种类
- 用户行为产生的时间
- 用户行为的次数
- 物品的热门程度
- 特征-物品相关推荐
- 过滤模块
- 用户已经产生过行为的物品
- 候选物品以外的物品
- 某些质量很差的物品
- 排名模块
- 新颖性排名
- 多样性
- 时间多样性
- 用户反馈
评分预测问题
离线实验方法
评分预测算法
- *均值
- 基于邻域的方法
- 隐语义模型与矩阵分解模型
- 加入时间信息
- 模型融合