目录
一、推荐系统
1、推荐系统介绍
1.1 什么是推荐系统
1.2 推荐方法
1.3 推荐系统的应用
1.4 评测推荐系统
2、利用用户行为数据
2.1 用户行为数据
2.2 用户行为分析
2.3 基于领域的方法
2.4 隐语义模型
2.5 基于图的随机游走算法
3、推荐系统冷启动问题
3.1 冷启动问题
3.2 利用用户注册信息
3.3 选择合适的物品启动用户的兴趣
3.4 利用物品的内容信息
3.5 发挥专家的作用
4、利用用户标签数据
4.1 标签系统中的推荐问题
4.2 基于标签的推荐系统
4.3 基于标签的推荐解析
4.4 给用户推荐标签
5、利用上下文信息
5.1 时间上下文信息
5.2 地点上下文信息
6、利用社交网络数据
7、推荐系统架构
7.1 外围架构
7.2 基于特征的推荐系统架构
7.3 推荐引擎架构
一、推荐系统
1、推荐系统介绍
1.1 什么是推荐系统
随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载(information overload)的时代。在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:作为信息消费者,如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情;作为信息生产者, 如何让自己生产的信息脱颖而出,受到广大用户的关注,也是一件非常困难的事情。
为了解决信息过载问题,截至至今,人们经历了分类目录、搜索引擎、推荐系统三个阶段。
通过搜索引擎查找内容是以用户有明确的需求为前提的,当用户没有明确的需求时,『神通广大』的搜索引擎也会变成无能为力。
推荐系统就是解决这一矛盾的重要工具。推荐系统的任务就是联系用户和信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而帮忙用户从海量的信息中发掘自己潜在的需求。
1.2 推荐方法
专家推荐
基于统计的推荐
基于内容的推荐
协同过滤推荐
混合推荐
1.3 推荐系统的应用
电子商务:amazon “推荐系统之王”
传统的80/20原则(80%的销售额来自于20%的热门品牌),但是通过推荐系统发掘长尾,目前推荐系统在amazon带来的收入占比已经超过35%。
在线音视频:Netflix、Youtube、Kugou、FM
社交网络:Facebook、Twitter
基于位置的服务:美团点评
个改化广告:Google、Facebook、百度推荐
个性化阅读:GoogleReader、今日头条
1.4 评测推荐系统
好的推荐系统不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现那些他们可能会感兴趣,但却不那么容易发现的东西。同时,推荐系统还要能够帮助商家将 那些被埋没在长尾中的好商品介绍给可能会对它们感兴趣的用户。
1.4.1 评测方法:
离线实验
用户调查
在线实验
AB测试
1.4.2 评测指标
用户满意度
预测准确度
覆盖率
多样性
新颖性
惊喜度
信任度
实时性
透明度
1.4.3 评测维度
用户维度 主要包括用户的人口统计学信息、活跃度以及是不是新用户等。
物品维度 包括物品的属性信息、流行度、平均分以及是不是新加入的物品等。
时间维度 包括季节,是工作日还是周末,是白天还是晚上等。
2、利用用户行为数据
2.1 用户行为数据
用户行为数据在网站上最简单的存在形式就是日志
用户行为数据可以分为
显性反馈,如:点赞、评分
隐性反馈,如:浏览、浏览
按照反馈的方向, 又可以分为:
正反馈,如:喜欢
负反馈,如:不喜欢
2.2 用户行为分析
用户活跃度和物品流行度的分布
用户活跃度和物品流行度的关系
2.3 基于邻域的方法(neighborhood-based)
2.3.1 基于用户的协同过滤算法(UserCF)
(1) 找到和目标用户兴趣相似的用户集合。
(2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
随着网站的用户数目越来越大,计算用户兴趣相似度矩阵将越来越困难,其运算时间复杂度和空 间复杂度的增长和用户数的增长近似于平方关系。其次,基于用户的协同过滤很难对推荐结果作出解释。
2.3.2 基于物品的协同过滤算法(ItemCF)
(1) 计算物品之间的相似度。
(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。
2.3.3 UserCF和ItemCF优缺点的对比
2.4 隐语义模型 (latent factor model)
自从Netflix Prize比赛举办以来,LFM(latent factor model)隐语义模型逐渐成为推荐系统领域耳熟能详的名词。其实该算法最早在文本挖掘领域被提出,用于找到文本的隐含语义。相关的名词有LSI、pLSA、LDA和Topic Model。
隐语义模型是最近几年推荐系统领域最为热门的研究话题,它的核心思想是通过隐含特征(latent factor)联系用户兴趣和物品。
LFM和基于邻域的方法的比较
LFM是一种基于机器学习的方法,具有比较好的理论基础。这个方法和基于邻域的方法(比如UserCF、ItemCF)相比,各有优缺点。
理论基础
离线计算的空间复杂度
离线计算的时间复杂度
在线实时推荐
推荐解释
2.5 基于图的随机游走算法(random walk on graph)
用户行为很容易用二分图表示,因此很多图的算法都可以用到推荐系统中。
用户行为数据的二分图表示
基于图的推荐算法
3、推荐系统冷启动问题
推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,因此大量的用户行为数据就成为推荐系统的重要组成部分和先决条件。对于很多像百度、当当这样的网站来说,这或许不是个问题,因为它们目前已经积累了大量的用户数据。但是对于很多做纯粹推荐系统的网站(比如Jinni和Pandora),或者很多在开始阶段就希望有个性化推荐应用的网站来说,如何在没有大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统,就是冷启动的问题。
3.1 冷启动问题
冷启动问题(cold start)主要分3类。
用户冷启动 用户冷启动主要解决如何给新用户做个性化推荐的问题。
物品冷启动 物品冷启动主要解决如何将新的物品推荐给可能对它感兴趣的用户这一问题。
系统冷启动 系统冷启动主要解决如何在一个新开发的网站上(还没有用户,也没有用户行为,只有一些物品的信息)设计个性化推荐系统,从而在网站刚发布时就让用户体验到个性化推荐服务这一问题。
3.2 利用用户注册信息
(1) 获取用户的注册信息;
(2) 根据用户的注册信息对用户分类;
(3) 给用户推荐他所属分类中用户喜欢的物品。
3.3 选择合适的物品启动用户的兴趣
豆瓣fm:
Netflix:
Kindle:
3.4 利用物品的内容信息
3.5 发挥专家的作用
众所周知,计算音乐之间的相似度是比较困难的。首先,音乐是多媒体,如果从音频分析入手计算歌曲之间的相似度,则技术门槛很高,而且也很难计算得令人满意。其次,仅仅利用歌曲的专辑、歌手等属性信息很难获得令人满意的歌曲相似度表,因为一名歌手、一部专辑往往只有一两首好歌。为了解决这个问题,Pandora雇用了一批懂计算机的音乐人进行了一项称为音乐基因的项目。他们听了几万名歌手的歌,并对这些歌的各个维度进行标注。最终,他们使用了400多个特征(Pandora称这些特征为基因)。标注完所有的歌曲后,每首歌都可以表示为一个400维的向量,然后通过常见的向量相似度算法可以计算出歌曲的相似度。
Jinni在电影基因工程中采用了半人工、半自动的方式。首先,它让专家对电影进行标记,每个电影都有大约50个基因,这些基因来自大约1000个基因库。然后,在专家标记一定的样本后,Jinni会使用自然语言理解和机器学习技术,通过分析用户对电影的评论和电影的一些内容属性对电影(特别是新电影)进行自己的标记。同时,Jinni也设计了让用户对基因进行反馈的界面,希望通过用户反馈不断改进电影基因系统。
4、利用用户标签数据
打标签作为一种重要的用户行为,蕴含了很多用户兴趣信息,因此深入研究和利用用户打标签的行为可以很好地指导我们改进个性化推荐系统的推荐质量。同时,标签的表示形式非常简单, 便于很多算法处理。
典型应用:豆瓣
4.1 标签系统中的推荐问题
用户为什么进行标注
首先是社会维度,有些用户标注是给内容上传者使用的(便于上传者组织自己的信息),而有些用户标注是给广大用户使用的(便于帮助其他用户找到信息)。
另一个维度是功能维度,有些标注用于更好地组织内容,方便用户将来的查找,而另一些标注用于传达某种信息,比如照片的拍摄时间和地点等。
用户如何打标签
标签的流行度分布也呈现非常典型的长尾分布
用户打什么样的标签
表明物品是什么
表明物品的种类
表明谁拥有物品
表达用户的观点,如:funny(有趣)、boring(无聊)
用户相关的标签,如:my favorite(我最喜欢的)、my comment(我的评论)
用户的任务,如:to read(即将阅读)、job search(找工作)
类型(Genre)
时间
人物
地点
语言
奖项
其它
4.2 基于标签的推荐系统
数据稀疏性
用户兴趣和物品的联系是通过标签匹配建立的,对于新用户或者新物品标签匹配的数量会很少。为了提高推荐的准确率,我们可能要对标签集合做扩展,比如若用户曾经用过“推荐系统”这个标签,我们可以将这个标签的相似标签也加入到用户标签集合中,比如“个性化”、“协同过”等标签。
标签清理
去除词频很高的停止词;
去除因词根不同造成的同义词,如:recommender system和recommendation system;
去除因分隔符造成的同义词,如:collaborative_filtering和collaborative-filtering;
用户反馈
4.3 基于标签的推荐解释
RelSort 对推荐物品做解释时使用的是用户以前使用过且物品上有的标签,给出了用户对标签的兴趣和标签与物品的相关度,但标签按照和物品的相关度排序。
PrefSort 对推荐物品做解释时使用的是用户以前使用过且物品上有的标签,给出了用户对标签的兴趣和标签与物品的相关度,但标签按照用户的兴趣程度排序。
RelOnly 对推荐物品做解释时使用的是用户以前使用过且物品上有的标签,给出了标签与物品的相关度,且标签按照和物品的相关度排序。
PrefOnly 对推荐物品做解释时使用的是用户以前使用过且物品上有的标签,给出了用户对标签的兴趣程度,且标签按照用户的兴趣程度排序。
对4种不同推荐解释界面的总体满意度调查,结果显示PrefOnly > RelSort > PrefSort > RelOnly,不同场景的结果不同,仅供参考。
4.4 给用户推荐标签
为什么要给用户推荐标签
方便用户输入标签
提高标签质量
如何给用户推荐标签
给用户u推荐整个系统里最热门的标签
给用户u推荐物品i上最热门的标签
给用户u推荐他自己经常使用的标签
混合方法
5、利用上下文信息
5.1 时间上下文信息
用户兴趣是变化的
我们这里提到的用户兴趣变化是因为用户自身原因发生的变化。比如随着年龄的增长,用户小时候喜欢看动画片,长大了喜欢看文艺片。一位程序员随着工作时间的增加,逐渐从阅读入门书籍过渡到阅读专业书籍。一个人参加工作了,工作后的兴趣和学生时代的兴趣相比发生了变化。那么,如果我们要准确预测用户现在的兴趣,就应该关注用户最近的行为,因为用户最近的行为最能体现他现在的兴趣。当然,考虑用户最近的兴趣只能针对渐变的用户兴趣,而对突变的用户兴趣很难起作用,比如用户突然中奖了。
物品也是有生命周期的
一部电影刚上映的时候可能被很多人关注,但是经久不衰的电影是很少的,很多电影上映后不久就被人们淡忘了。此外,物品也可能受新闻事件的影响,比如一部已经被淡忘的电影会因为突然被某个新闻事件涉及而重新热门起来。因此,当我们决定在某个时刻给某个用户推荐某个物品时,需要考虑该物品在该时刻是否已经过时了。比如,我们给一个NBA迷推荐10年前的某个NBA新闻显然是不太合适的(当然这也不一定,比如用户当时就是在寻找旧的NBA新闻时)。不同系统的物品具有不同的生命周期,比如新闻的生命周期很短暂,而电影的生命周期相对较长。
季节效应
季节效应主要反映了时间本身对用户兴趣的影响。比如人们夏天吃冰淇淋,冬天吃火锅,夏天穿T恤,冬天穿棉衣。当然,我们也不排除有特别癖好的人存在,但大部分用户都是遵循这个规律的。除此之外,节日也是一种季节效应:每年的圣诞节,人们都要去购物;每年的奥斯卡颁奖礼,人们都要关注电影。2011年ACM推荐大会的一个研讨会曾经举办过一次上下文相关的电影推荐算法比赛1,该比赛要求参赛者预测数据集中用户在奥斯卡颁奖礼附近时刻的行为。关注季节效应的读者可以关注一下这个研讨会 3上发表的相关论文。
5.2 地点上下文信息
除了时间,地点作为一种重要的空间特征,也是一种重要的上下文信息。不同地区的用户兴趣有所不同,用户到了不同的地方,兴趣也会有所不同。在中关村逛街逛累了,希望寻找美食时,你可能会考虑几个因素,包括距离、价位、口味和口碑,而在这些因素里,最重要的因素可能是距离。因此,很多基于位置的服务(LBS)软件都提供了推荐附近餐馆和商店的功能。
兴趣本地化 不同地方的用户兴趣存在着很大的差别。
活动本地化 一个用户往往在附近的地区活动。
6、利用社交网络数据
基于社交网络的推荐可以很好地模拟现实社会。在现实社会中,很多时候我们都是通过朋友获得推荐。美国著名的第三方调查机构尼尔森调查了影响用户相信某个推荐的因素2。调查结果显示,90%的用户相信朋友对他们的推荐,70%的用户相信网上其他用户对广告商品的评论。从该调查可以看到,好友的推荐对于增加用户对推荐结果的信任度非常重要。
基于社交网络的推荐
给用户推荐好友
7、推荐系统架构
7.1 外围架构
7.2 基于特征的推荐系统架构
推荐系统的核心任务:
如何为给定用户生成特征(用户画像)
如何根据特征找到物品
推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一类特征和一种任务,而推荐系统的任务只是将推荐引擎的结果按照一定权重或者优先级合并、排序然后返回,这样做还有两个好处:
可以方便地增加/删除引擎,控制不同引擎对推荐结果的影响
可以实现推荐引擎级别的用户反馈
7.3 推荐引擎架构
7.3.1 生成用户特征向量
特征向量
特征
权重:用户行为的种类、用户行为产生的时间、用户行为的次数、物品的热门程度
7.3.2 特征—物品相关推荐
7.3.3 过滤模块
用户已经产生过行为物品
候选物品以外的物品
某些质量很差的物品
7.3.4 排名模块
新颖性排名
多样性
时间多样性
用户反馈