推荐系统实践 笔记3 推荐系统冷启动问题

AngelAndAngel 2012-12-04
用户冷启动  新用户没有行为数据,无法根据历史行为预测其兴趣
物品冷启动 如何将新物品推荐给对它感兴趣的用户
系统冷启动  新开发的网站上没有用户或用户行为 只有物品信息 怎样设计个性化推荐

解决方式是:
1,提供热门榜
2,利用注册时的年龄,性别做粗粒度的推荐
3,利用用户社交信息
4,登录时对一些物品的反馈
5,系统冷启动时,引入砖家致死,迅速建立起物品的相关度表

基于注册信息的个性化推荐流程基本如下:
1,获取用户的注册信息
2,根据用户的注册信息对用户分类
3,给童虎推荐他所属分类中用户喜欢的物品。

比如,我们要给一个注册用户推荐列表,这个用户28岁,是一位男性物理学家,那么我们可以设计三张相关表:性别--电视剧相关表,从中可以查询男性最喜欢的电视剧;一张是年龄--电视剧相关表,可以查询28岁用户最喜欢的电视剧;一张是职业--电视剧相关表,可以查询到物理学家最喜欢的电视剧。然后我们可以将这3张表查询出的电视剧列表按照一定权重相加,得到给用户的最终推荐列表。不同的特征的权重显然是不一样的。
现在的问题是:怎样计算某个特征用户群对各个物品的喜好程度。我们把这种喜好程度定义为:喜欢物品i的用户中具有特征f的比例(我比较疑惑的是,这里为什么不定义成具有特征用户f的用户中喜欢物品i的比例,貌似这样更容易说通啊)。公示为:( N(i) & U(f) )/(N(i)+a),这里a是一个参数,解决数据的稀疏矩阵的问题。
书中没有给出到底按怎样的权重方式计算。我的理解是,计算每个相关表时,同时计算每条记录的相关分数。把每个特征的电视剧列表迭代,得到每个电视剧的整体权重p(i)=a*ria+b*rib+c*ric。a,b,c表示每个特征的固有权重,ria,rib,ric分别表示此电视剧在每个相关表的相关分数。


解决用户冷启动的一个常用方法是:在新用户第一次访问推荐系统时,不立即给用户展示推荐结果,而是给用户提供一些物品,让用户反馈他们对这些物品的兴趣,根据这些反馈提供个性化推荐。

一般来说,能够启动用户兴趣的物品需要有以下特点:
1,比较热门
2,具有代表性和区分性
3,启动物品集合需要有多样性

解决物品冷启动时的算法与大数据量时还是有些不太一样的,首先,itemcf通过用户行为的历史记录才计算物品相似度,这个一个非常耗时的工作(一般每天一次),因为用户的行为日志非常大,新物品就不能马上展示给用户。所以,只能利用物品的内容信息计算物品相关表,并且频繁的更新相关表(比如半小时一次)。

物品的内容可以通过向量空间模型表示,比如对于电影,有导演,演员等特征向量,对于文章,没有明显的特征向量,那么自己提取关键字和权重当作特征向量。内容相似度可以用欧几里德或者余弦夹角来计算。
计算好内容相似度后,给用户推荐和他历史上喜欢的物品内容相似的物品。

内容相似度过滤和协同过滤的比较:说不上两者的好坏,前者主要通过物品的属性来计算,后者通过统计用户行为来计算。假如用户的行为强烈受某一内容属性的影响,那么可以尝试内容过滤。


对于长文本来说,利用关键词计算相似度可以获得很高的精确度,但是假如文本很短,关键词少,这种方式很难准确计算相似度。比如两篇文章的标题是不同的,但是却是指的一个意思,这种相似度怎么算呢?这种情况下,首先需要知道文章的话题分布,然后才能准确地计算文章的相似度。

代表性的话题模型有LDA。大致意思是:某个人在写一篇文档的时候,会首先想这篇文章要讨论哪些话题,然后思考这些话题应该用什么词描述,而从最终用词写成一篇文章。因此,文章和词之间是通过话题联系的。
LDA中有3中元素,即文档,话题和词语。每一篇文档都会表现为词的集合,这称为词袋模型(bag of words),每个词在一篇文章中属于一个话题。

有许多推荐系统发挥专家的作用,利用专家对各种物品进行属性标注,比如音乐,视频这类内容难解析的物品。
Global site tag (gtag.js) - Google Analytics