推荐系统冷启动问题及解决

                             推荐系统冷启动问题及解决

一、冷启动问题简介

  主要分三类:

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

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

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

二、解决方案:

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

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

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

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

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

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

三、冷启动问题的解决方案详述

3.1提供非个性化的推荐
最简单的例子就是提供热门排行榜,可以给用户推荐热门排行榜,等到用户数据收集到一定的时候,再切换为个性化推荐。
关于热门排行榜解决推荐问题的理论测试,可以参考着篇文章 Performance of recommender algorithms on top-n recommendation tasks.
并且Netflix的研究也表明新用户在冷启动阶段确实是更倾向于热门排行榜的,老用户会更加需要长尾推荐

3.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。但是这种情况并没有统计意义,因此我们为分母加上一个比较大的数,可以避免这样的物品产生比较大的权重。

  有两个推荐系统数据集包含了人口统计学信息,一个是BookCrossing数据集,一个是Last.fm数据集。

推荐流程基本如下:

  • 获取用户的注册信息
  • 根据用户的注册信息对用户分类
  • 给用户推荐他所属分类中用户喜欢的物品

举一个简单例子说明下:

利用用户注册信息进行推荐

3.3选择合适的物品启动用户的兴趣
用户在登录时对一些物品进行反馈,收集用户对这些物品的兴趣信息,然后给用户推荐那些和这些物品相似的物品。
一般来说,能够用来启动用户兴趣的物品需要具有以下特点:

  • 比较热门,如果要让用户对物品进行反馈,前提是用户得知道这是什么东西;
  • 具有代表性和区分性,启动用户兴趣的物品不能是大众化或老少咸宜的,因为这样的物品对用户的兴趣没有区分性;
  • 启动物品集合需要有多样性,在冷启动时,我们不知道用户的兴趣,而用户兴趣的可能性非常多,为了匹配多样的兴趣,我们需要提供具有很高覆盖率的启动物品集合,这些物品能覆盖几乎所有主流的用户兴趣

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

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

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

  

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

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

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

下面以网易云音乐私人FM为例,来看一看它是怎么做的

网易云音乐 - 私人FM

幽默的文案加上适当的引导,用户在使用过程中也是会很开森的~
参考知乎:刘彦彬 - 回答

3.4利用物品的内容信息
用来解决物品的冷启动问题,即如何将新加入的物品推荐给对它感兴趣的用户。物品冷启动问题在新闻网站等时效性很强的网站中非常重要,因为这些网站时时刻刻都有新物品加入,而且每个物品必须能够再第一时间展现给用户,否则经过一段时间后,物品的价值就大大降低了。
针对协同过滤的两种推荐算法——userCF算法、itemCF算法来分别了解一下物品冷启动的问题。

  • userCF算法

  • 针对推荐列表并不是给用户展示内容的唯一列表(大多网站都是这样的)的网站
    当新物品加入时,总会有用户通过某些途径看到,那么当一个用户对其产生反馈后,和他历史兴趣相似的用户的推荐列表中就有可能出现该物品,从而更多的人对该物品做出反馈,导致更多的人的推荐列表中出现该物品。因此,该物品就能不断扩散开来,从而逐步展示到对它感兴趣用户的推荐列表中

  • 针对推荐列表是用户获取信息的主要途径(例如豆瓣网络电台)的网站
    userCF算法就需要解决第一推动力的问题,即第一个用户从哪儿发现新物品。最简单的方法是将新的物品随机战士给用户,但是太不个性化。因此可以考虑利用物品的内容信息,将新物品先投放给曾经喜欢过和它内容相似的其他物品的用户

  • itemCF算法
    对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散度越大说明分布的相似度越低。

3.5采用专家标注
很多系统在建立的时候,既没有用户的行为数据,也没有充足的物品内容信息来计算物品相似度。这种情况下,很多系统都利用专家进行标注。
代表系统:个性化网络电台Pandora、电影推荐网站Jinni
以Pandora电台为例,Pandora雇用了一批音乐人对几万名歌手的歌曲进行各个维度的标注,最终选定了400多个特征。每首歌都可以标识为一个400维的向量,然后通过常见的向量相似度算法计算出歌曲的相似度。

以上均为书中描述到的方法,下面再介绍两种方法
参考自:刘彦彬 - 回答

3.6利用用户在其他地方已经沉淀的数据进行冷启动
以QQ音乐举例:
QQ音乐的猜你喜欢电台想要去猜测第一次使用QQ音乐的用户的口味偏好,一大优势是可以利用其它腾讯平台的数据,比如在QQ空间关注了谁,在腾讯微博关注了谁,更进一步,比如在腾讯视频刚刚看了一部动漫,那么如果QQ音乐推荐了这部动漫里的歌曲,用户会觉得很人性化。这就是利用用户在其它平台已有的数据。
再比如今日头条:
它是在用户通过新浪微博等社交网站登录之后,获取用户的关注列表,并且爬取用户最近参与互动的feed(转发/评论等),对其进行语义分析,从而获取用户的偏好。

所以这种方法的前提是,引导用户通过社交网络账号登录,这样一方面可以降低注册成本提高转化率;另一方面可以获取用户的社交网络信息,解决冷启动问题。

3.7利用用户的手机等兴趣偏好进行冷启动
(这一点还真是超乎我的想象=_=)
Android手机开放的比较高,所以在安装自己的app时,就可以顺路了解下手机上还安装了什么其他的app。比如一个用户安装了美丽说、蘑菇街、辣妈帮、大姨妈等应用,就可以判定这是女性了,更进一步还可以判定是备孕还是少女。
目前读取用户安装的应用这部分功能除了app应用商店之外,一些新闻类、视频类的应用也在做,对于解决冷启动问题有很好的帮助。

猜你喜欢

转载自blog.csdn.net/u013185349/article/details/82425763