转移
利用上下文信息进行推荐,利用用户访问推荐系统的时间、地点、心情等进行推荐。用户上班下班的兴趣不一样,周末和上班兴趣不一样,上厕所阅读和在办公室阅读不一样。
时间:卖衣服的系统冬天跟夏天推荐的衣服;地点:中关村附近不需要深圳的信息。
以看视频为例,上班时间看下班后看,在家看还是在父母家看,一个人看和朋友一起看,都是上下文信息,结合上下文信息推荐会差别很大。
将上下文信息,尤其是地点和时间信息加到推荐算法中,让推荐系统能准确预测某个特定时间以及特定地点的兴趣。
对于时间而言,对于用户的影响表现在以下:
1、用户的兴趣是变化的,用户自身的原因。随着年龄的增长,小时候动画片,长大以后文艺片。
一个人参加工作,他的兴趣也会发生变化。我们要预测用户现在的兴趣就要关注他最近的行为。考虑用户最近的兴趣只能是渐变的兴趣,对于突变的兴趣很难起作用,如中彩票。
2、物品也有生命周期。如新闻事件,当我们决定某个时间给某个用户推荐某个物品的时候,也许它已经过时了。不同的物品具有不同的周期,如电影的周期长于新闻的周期。
3、季节效应,某个时段的效应。夏天穿短袖,冬天厚外套,圣诞季购物,奥斯卡颁奖期间关注电影。
用户的兴趣是不断变化的,变化体现在用户不断增长的新行为中。一个实时的推荐提供需要能响应用户的新行为,让推荐列表不断变化,满足用户不断变化的新兴趣。
实时推荐系统除了对于用户行为的存取有实时的要求,还对推荐算法本身具有实时性要求。推荐系统不能每天给所有用户离线计算推荐结果,需要根据用户这个时间点的行为计算实时推荐列表。推荐算法需要平衡用户的近期行为和长期行为,既要反映出用户近期行为所体现的兴趣变化,又不能让推荐列表完全受用户近期行为影响,保证推荐列表对用户兴趣预测的连续性。
很多推荐系统面临的问题是,每天给用户推荐的结果都差不多,没什么变化,即推荐系统的时间多样性不高。推荐系统时间的多样性对于推荐系统有正面意义。精度优先,适当提高时间多样性。
如果你不知道推荐什么,推荐最近最热门准没错。
近期的行为比远期的行为更能体现用户的兴趣,所以预测用户行为的时候,加重近期行为的权重。
基于用户的协同规律算法基本思想是给用户推荐和他感兴趣的用户喜欢的物品。如果加上了时间信息,我们有优化方向。1、如果用户A06年喜欢C,07年java;用户BA07年喜欢C,06年java;用户C和A相同。那么如果没有时间参数的情况下,用户ABC是一样的兴趣度,实际上,我们更会认为是不一样的。根据用户兴趣发展路径定义决策路径图。2、找到和当前用户兴趣相似的一组用户以后,向用户推荐相似用户最近喜欢的物品。
利用社交网络的数据给用户推荐物品,推荐理由加入了社交因素,如朋友也认同,朋友关注了,信任度大大提升。
社交关系:双向确认的社交关系,单向关注的社交关系,社区的社交关系(通过位置、共属一个群等,如豆瓣小组,一个公司一个学校的人)
社交化推荐的优势:增加推荐的信任度,用户不相信计算机,但是相信好朋友的推荐。还可以直接解决冷启动的问题。
基于好友的推荐需要考量好友之间关系的权重,兴趣的权重关系。
推荐系统数据存储,根据数据规模和是否需要实时存取来决定存储媒介。需要实时存取的数据存储在数据库和缓存中,大规模的非实时存取数据存储在分布式文件系统中HDFS。数据能否实时存取对于推荐系统十分重要,因为只有大量快速获取到用户新行为,才能实时适应用户当前的需求,才能实时推荐。
推荐系统是联系用户和物品的媒介。而联系用户和物品的方式有三种。用户喜欢物品,物品与其他物品相似,建立用户与后面物品的联系;用户有相似兴趣的用户或好友用户,后面的用户喜欢物品,建立用户与物品的关系;用户具有喜欢某些特征,某些物品具有某些特征,建立用户与物品的关系。实际上三种方式都可以抽象成一种,基于特征的推荐系统架构。
当用户来了,为用户生成特征,然后根据特征找到关联的物品,最终生成推荐列表。推荐系统的任务有两个,一个是为用户生成特征,二是根据特征找物品。
用户特征有很多种,1、人口统计学特征,如年龄性别国家等注册信息。2、行为特征,浏览过的物品,收藏,评分等行为。3、话题特征,根据用户的历史行为,计算出用户对什么话题感兴趣。
推荐系统的任务有很多:1、将新加入的物品推荐给用户;2、将商业上需要宣传的物品推荐给用户;3、给用户推荐不同种类的物品;4、给用户推荐不同新颖度的物品,如首页推荐热门,到了推荐系统页面推荐长尾的物品;5考虑用户访问推荐系统的上下文。
如果要考虑上面的所有特征所有任务会使系统非常复杂, 很难通过配置文件方便的配置不同的特征和任务的权重。因此推荐系统的模式是,多个引擎,每个引擎负责一类的特征和一类的任务,然后将结果按照一定的权重或者优先级合并,排序然后返回。
这种做法的好处还有,1、可以方便的增加删除引擎,控制不同引擎对推荐结果的影响,对于绝大多数的需求,只需要组合不同的引擎。2、可以实现推荐引擎级别的用户反馈,每个引擎实际是一种策略,而不同的用户喜欢不同的策略。通过分析用户对于推荐结果的反馈了解用户比较喜欢哪些策略的推荐,从而对引擎组装权重。
推荐引擎的架构分为三部分:
第一部分,从数据库或缓存中拿到用户数据,通过不同的分析行为,输出用户的特征向量。
第二部分,将用户的特征向量通过相关处理变为初级推荐物品列表。特征-物品相关推荐,离线表的形式(特征id,物品id,权重)
第三部分,对初始推荐列表进行过滤,排名等处理,从而生成最终的推荐结果。
一个特征向量包括特征和特征权重。用户的特征向量,一种是人口统计学特征,第二种是从用户行为中计算出来的。用户的行为有很多种,不同的种类权重不同。用户行为时间也不同,相对来说,近期的行为比较重要。如果用户对于热门物品进行了操作,并不能反映出个性,对于非热门物品尤其是冷门的真实行为提高权重。
对于一个搜索引擎,可以在配置文件中配置很多的离线表以及它们的权重,在线服务时,将这些相关表按照配置的权限相加,最后将最终的相关表保存在内存中,给用户推荐的时候已经是加权以后的相关表了。特征-物品相关推荐还接受一个候选物品集合,候选物品集合的目的是保证推荐结果只包含候选物品集合中的物品。它的应用场景是产品需求希望把某些类型的电视剧推荐给用户,如有些产品是要求给用户推荐最近一周加入的新物品,那么候选物品集合中包含最近一周添加的物品。
得到初始的推荐列表以后,不能直接呈现给用户,还需要进行过滤。用户已经产生行为的物品不要,候选物品以外的物品不需要,某些质量很差的物品不需要。
排名模块,1新颖度排名,向用户推荐他们不知道的,长尾中的物品。2多样性,将推荐结果按照不同的类型氛围积累,然后选择类中排名最高的组合成为推荐列表,或者根据推荐理由来组织。3时间多样性,保证用户不要每天来看推荐系统的时候都是同样的推荐结果,用户没有新的行为推荐列表内容也更新。