推荐系统冷启动等问题汇总

推荐系统冷启动问题

  • 冷启动问题简介

冷启动问题主要分为三类

  1.用户冷启动:如何给新用户做个性化推荐.

  2.物品冷启动:如何将新的物品推荐给可能对它感兴趣的用户这一问题.

  3.系统冷启动:如何在一个新开发的网站上设计个性化推荐系统.

 解决方案:

  1.提供非个性化的推荐:热门排行榜,当用户数据收集到一定的时候,再切换为个性化推荐.

  2.利用用户注册时提供的年龄、性别等数据做粗粒度的个性化.

  3.利用用户的社交网络帐号登录,导入用户在社交网站上的好友信息,然后给用户推荐其好友喜欢的物品.

  4.要求用户在登录时对一些物品进行反馈,收集用户对这些物品的兴趣信息,然后给用户推荐那些和这些物品相似的物品.

  5.对于新加入的物品,可以利用内容信息,将它们推荐给喜欢过和它们相似的物品的用户.

6.在系统冷启动时,可以引入专家的知识,通过一定的高效方式迅速建立起物品的相关度表(引入人工).

 

  • 利用用户注册信息

  用户注册信息:人口统计学信息、用户兴趣的描述、从其他网站导入的用户站外行为数据

  基于注册信息的个性化推荐流程基本如下:

            1.获取注册信息

            2.根据用户的注册信息对用户分类

            3.给用户推荐他所属分类中用户喜欢的物品

  特征:性别、年龄、职业,也可以组合推荐.

  基于用户注册信息的推荐算法其核心问题是计算每种特征的用户喜欢的物品,也就是说,对于每种特征f,计算具有这种特征的用户对各个物品的喜好程度p(f,i).

p(f,i)是指物品i在具有f的特征的用户中的热门程度.

 

N(i)是喜欢物品i的用户集合,U(f)是具有特征f的用户集合.

在这种定义下,往往热门的物品会在各种特征的用户中都具有比较高的权重.也就是说具有比较高的|N(i)|的物品会在每一类用户中都有比较高的p(f,i),但推荐系统应该帮助用户发现他们不容易发现的物品.因此可以将p(f,i)定义为喜欢物品i的用户中具有特征f的比例.

  其中分母中使用alpha的目的是解决数据稀疏问题.比如有一个物品只被1个用户喜欢过,而这个用户刚好就有特征f,那么就有p(f,i)=1.但是这种情况并没有统计意义,因此我们为分母加上一个比较大的数,可以避免这样的物品产生比较大的权重.

 

  • 选择合适的物品启动用户的兴趣

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

  一般来说,能够用来启动用户兴趣的物品需要具有如下特征:

               1.比较热门.

               2.具有代表性和区别分:不能是大众化和老少咸宜的.

               3.启动物品集合需要有多样性.

  如何设计一个选择启动物品集合的系统:用一个决策树解决问题

  首先,给定一群用户,用这群用户对物品评分的方差度量这群用户兴趣的一致程度.如果方差很小,说明这一群用户的兴趣不太一致,也就是物品具有比较大的区分度,反之则说明这群用户的兴趣比较一致.

用如下方式度量一个物品的区分度D(i):

N+(i)是喜欢物品i的用户集合,N-(i)是不喜欢物品i的用户集合,第三个是没有对物品i评分的用户集合.

  也就是说,对于物品i,将用户分为3类——喜欢物品i的用户,不喜欢物品i的用户和不知道物品i的用户.如果这3类用户集合内的用户对其他的物品兴趣很不一致,说明物品i具有较高的区分度.

算法首先从所有用户中找到具有最高区分度的物品i,然后将用户分成3类.然后在每类用户中再找到最具区分度的物品,然后将每一类用户又各自分为3类,也就是将总用户分为9类,然后继续这样下去,最终可以通过对一系列物品的看法将用户进行分类.在冷启动时,从根节点开始询问用户对该节点物品的看法,然后根据用户的选择将用户放到不同的分枝,直到进入最后的叶子节点,此时对用户的兴趣有了比较清楚的了解,从而可以开始对用户进行比较准确地个性化推荐.

以网易云音乐私人FM为例

  • 利用物品的内容信息

UserCF算法

  第一推动力:第一个用户从哪发现新的物品

  解决第一推动力的最简单的方法:将新的物品随机展示给用户,但这样不太个性化,因此可以考虑利用物品的内容信息,将新物品先投放给曾经喜欢过和它内容相似的其他物品的用户.

ItemCF算法

  每隔一段时间利用用户行为计算物品相似度表,并把计算好的物品相关度矩阵放在内存中.新物品加入时,内存中没有这个物品,因此无法推荐.

  为此,只能利用物品的内容信息计算物品相关表,并频繁更新相关表.

  一般来说,物品的内容可以通过向量空间模型表示,该模型会将物品表示成一个关键词向量.如果物品的内容是一些诸如导演、演员等实体,可以将这些实体作为关键词.

  对于中文,首先要对文本进行分词,将字流变成词流,然后从词流中检测出命名实体,这些实体和一些其他重要的词将组成关键词集合,最后对关键词进行排名,计算每个关键词的权重,从而生成关键词向量.

  文本---->分词---->实体检测---->关键词排名---->关键词向量

  对于物品d,它的内容表示成一个关键词向量如下:

di={(e1,w1),(e2,w2)..}

  其中,ei就是关键词,wi是关键词对应的权重.如果物品是文本,可以用信息检索的TF-IDF计算权重;如果物品是电影,可以根据演员在剧中的重要程度赋予他们权重.

 

在给定关键词向量后,物品的内容相似度可以通过向量之间的余弦相似度计算:

  内容过滤算法忽视了用户行为,从而也忽视了物品的流行度以及用户行为中所包含的规律,所以它的精度比较低,但结果的新颖性比较高.

如果用户的行为强烈受某一内容属性的影响,那么内容过滤的算法还是可以在精度上超过协同过滤算法的.不过这种强的内容特征不是所有物品都具有的,而且需要丰富的领域知识才能获得,所有很多时候内容过滤算法的精度比协同过滤算法差.

  但,如果能够将两种算法融合,一定能够获得比单独使用这两种算法更好的效果.

  向量空间模型在内容数据丰富时可以获得比较好的结果,如果文本很短,关键词很少,向量空间模型就很难计算出准确的相似度.

  如何建立文章、话题和关键词的关系是话题模型研究的重点.

  话题模型的基本思想:一个人在写一篇文档的时候,会首先想这篇文章要讨论哪些话题,然后思考这些话题应该用什么词描述,从而最终用词写成一篇文章.因此,文章和词之间是通过话题联系的.

LDA中有三种元素,即文档、话题和词语.每一篇文档都会表现为词的集合,这称为词代模型.每个词在一篇文章中属于一个话题.令D为文档集合,D[i]是第i篇文档.w[i][j]是第i篇文档中的第j个词.z[i][j]是第i篇文档中第j个词属于的话题.

LDA的计算过程包括初始化和迭代两部分.首先要对z进行初始化,而初始化很简单,假设一共有K个话题,那么对第i篇文章中的第j个词,可以随机给它赋予一个话题.同时,用NWZ(w,z)记录词w被赋予话题z人次数,NZD(z,d)记录文档d中被赋予话题z的词的个数.

  在初始化之后,要通过迭代使话题的分布收敛到一个合理的分布上去.

在使用LDA计算物品内容相似度时,我们可以先计算出物品在话题上的分布,然后利用两个物品的话题分布计算物品的相似度.比如,如果两个物品的话题分布相似,则认为两个物品具有较高的相似度,反之则认为两个物品的相似度较低.计算分布的相似度可以用KL散度:

其中p和q是两个分布,KL散度越大说明分布的相似度越低.

 

  • 采用专家标注

很多系统在建立的时候,既没有用户的行为数据,也没有充足的物品内容信息来计算物品相似度。这种情况下,很多系统都利用专家进行标注.

代表系统:个性化网络电台Pandora、电影推荐网站Jinni.以Pandora电台为例,Pandora雇用了一批音乐人对几万名歌手的歌曲进行各个维度的标注,最终选定了400多个特征。每首歌都可以标识为一个400维的向量,然后通过常见的向量相似度算法计算出歌曲的相似度。

推荐系统时间效应

时间是一种很重要的上下文信息,对用户兴趣有着深入而广泛的影响.一般认为时间信息对用户的影响表现在一下几个方面:

  1. 用户兴趣是变化的. 这里提到的用户兴趣的变化是因为用户自身原因发生的变化(如年龄变化,生活环境的变化). 这种变化在个体用户表现明显,在企业用户不明显.
  2. 物品也是有生命周期的.
  3. 季节效应. 季节效应主要反映了时间本生对用户兴趣的影响.在给用户推荐物品时应该推荐对应季节的物品.

相比于推荐过去喜欢的物品,推荐用户近期喜欢的物品更有参考价值。推荐过去跟用户兴趣一致的新闻已经失去了意义。每个系统时间效应的大小不同,比如时间对电影的作用就没有新闻那么明显。要考虑时效性,必须加入时间参数,比如三元组(用户,物品,时间)代替简单的二元组(用户,物品)。给定时间 T ,一般化的时间衰减公式为:

其中ni(T) 是物品 i 最近的流行度,α是时间衰减参数,α对于时效性明显的系统,应该越大。以前基于用户和物品的算法就变为带有时效性的userCF与时效性的itemCF.

推荐系统的实时性

用户兴趣是不断变化的,其变化体现在用户不断增加的新行为中. 一个实时的推荐系统需要能够实时的响应用户新的行为,让推荐列表不断变化,从而能满足用户不断变化的兴趣.

实现推荐系统的实时性除了对用户行为的存取有实时性要求,还要求推荐算法本生具有实时性,而推荐算法本身具有实时性意味着:

  1. 实时推荐不能每天都给所有用户离线计算推荐结果,然后在线展示昨天计算出来的结果.所以,要求每个用户访问推荐系统时,都根据用户这个时间点前的行为实时计算推荐列表.
  2. 推荐算法需要平衡考虑用户的近期行为,既要让推荐列表反应出用户近期行为所体现的兴趣变化,又不能让那个推荐列表完全受公户近期行为的影响,要保证用户兴趣预测的延续性.

    解决方案: 让用户的推荐列表由一定比例的离线的计算结果和一定比例的在线的计算结果组成.

推荐系统的时间多样性

推荐系统经常遇到一个问题,就是每天给用户的推荐结果差不多,没有什么变化,推荐系统每天推荐结果的变化程度被定义为推荐系统的时间多样性.时间多样性高的推荐系统中用户会经常看到不同的推荐结果.

提高推荐结果的时间多样性需要分为两步解决: 首先,需要保证推荐系统能够在用户有了新的行为后及时的调整推荐结果,是推荐结果满足用户最近的兴趣,其次,需要保证推荐系统能够在用户没有新的行为是也能够经常变化一下结果,具有一定的时间多样性.

解决方案:

  1. 实现推荐系统的实时性
  2. 在生成推进记过是加入一定的随机性.比如从推荐列表的前20个结果中随机挑选10个结果展示给用户,或者按照推荐物品的权重采样10个结果给用户.
  3. 记录每天用户看到的推荐结果,然后再每天给用户进行推荐时,对他前几天看过的很多次的推荐结果进行适当的降权.
  4. 每天给用户使用不同的推荐算法.

当然,时间多样性也不是绝对的.推荐系统需要首先保证推荐的精度,在此基础上适当的考虑时间多样性.

推荐系统的数据稀疏问题

数据稀疏性问题普遍存在基于协同过滤的推荐系统中,其严重制约着协同过滤推荐系统的发展。对于大型商务网站来说,由于产品和用户数量都很庞大,用户评分产品一般不超过产品总数的1%,两个用户共同评分的产品更是少之又少,解决数据稀疏问题是提高推荐质量的关键。

为了提高推荐质量,许多研究人员都试图缓和数据稀疏问题。他们从不同的角度对用户和产品信息进行分析、处理,降低数据的稀疏程度。这些算法各有利弊。

 

1.基于项目的协同过滤推荐算法

传统的协同过滤推荐算法是通过计算用户之间的相似性,寻找与目标用户兴趣相似的一组用户,作为目标用户的最近邻居。然而,由于数据的极端稀疏性,两个用户共同评分的产品非常少,得到用户之间的相似性很有可能为0。因此,出现了基于项目的协同过滤推荐技术。

基于项目的协同过滤推荐算法,从产品角度进行分析,寻找与目标产品相似的产品集合,然后进行预测和推荐。它基于一个假设,即用户对与其感兴趣产品相似的产品也感兴趣。由于项目间的相似性相对稳定,而通常项目的数量比用户数量少,这样可以减少计算量,降低数据稀疏性。

2. 基于内容的协同过滤算法

3.降低矩阵维数的技术

降低矩阵维数的技术可对原始稀疏数据直接进行数据处理,降低数据稀疏性。主要算法有单值分解、聚类等。

3.1单值分解(SVD)

单值分解算法利用矩阵的单值分解原理,对用户—产品矩阵进行分解,从而降低矩阵的维数,抽取出主要信息。

SVD分解是早期推荐系统研究常用的矩阵分解方法,不过该方法具有以下缺点: 1.该方法首先需要用一个简单的方法补全稀疏评分矩阵,而一旦补全,评分矩阵就会变成一个稠密矩阵,从而使评分矩阵的存储需要非常大的空间.2. 该方法依赖的SVD分解方法的计算复杂度很高.

直到2006年Simon Funk在他的博客上公布了一个算法(Funk-SVD)很好的解决了这些问题使单值分解算法才得到了广泛的关注(参见Simon Funk的博客 http://sifter.org/~simon/journal/20061211.html).关于Funk-SVD算法说明在项亮的推荐系统实战中的第八章评分预测中也有具体说明.

3.2聚类

 单值分解通过矩阵运算降低数据稀疏性,聚类则是通过一些聚类算法将产品或用户聚成若干具有共同性质的类;然后在小的聚类数据中产生推荐。聚类算法有很多,如用K-means对用户的聚类算法。K-means算法是目前最通用的快速聚类算法。

算法步骤:

  1. 取前K个用户作为K个独立的聚类质心,剩余的每个用户与其最近的质心进行比较.
  2. 在形成聚类质心的基础上,重新计算聚类质心
  3. 聚类内部的成员关系呗重新估算.重复1~3,直到产生的K个聚类不在变化
  4. 在目标用户所在的类中进行用户相似性计算,主要运用第一部分中的相关相似性方法计算,得到最近邻集合
  5. 对最近邻的评分数据进行加权处理:

其中Pi j是用户i对产品j的预测评分,Wij是用户i对产品j的权值.

     6.预测产生后,根据预测评分的高低对目标用户进行推荐.

以上算法在吴颜的<<协同过滤推荐系统中数据稀疏问题的解决>>一文中进行了实验.在实验的几个算法中,当数据稀疏程度小于0.4或者大于0.7时,SVD的MAE值最小,性能也最好.也就是说SVD能有效减少数据稀疏对系统性能的影响.当数据稀疏程度在0.4~0.7时,聚类算法的有事则比较明显.

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值