zoukankan      html  css  js  c++  java
  • 推荐系统读书笔记(三)推荐系统冷启动问题

    3.1 冷启动问题简介

      主要分三类:

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

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

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

      解决方案:

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

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

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

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

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

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

    3.2 利用用户注册信息

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

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

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

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

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

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

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

      1.比较热门:

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

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

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

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

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

      

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

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

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

    3.4 利用物品的内容信息

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

  • 相关阅读:
    Linux 修改最大线程数
    Openresty+Nginx+Lua+Nginx_http_upstream_check_module 搭建
    SSDB 性能测试
    面向对象:类的成员
    封装,多态,类的约束,super()深入了解
    面向对象:继承
    面向对象:类的空间问题,类之间关系
    面向对象初识
    软件开发规范
    模块(四)包和logging日志
  • 原文地址:https://www.cnblogs.com/MarsMercury/p/5169071.html
Copyright © 2011-2022 走看看