zoukankan      html  css  js  c++  java
  • 推荐系统学习 -- 利用上下文信息

    本章之前提到的推荐系统算法主要集中研究了如何联系用户兴趣和物品,将最符合用户兴趣的物品推荐给用户,但这些算法都忽略了一点,就是用户所处的上下文(context)。

    这些上下文包括用户访问推荐系统的时间、地点、心情等,对于提高推荐系统的推荐系统是非常重要的。


    比如,一个卖衣服的推荐系统在冬天和夏天应该给用户推荐不同种类的服装。推荐系统不能因为用户在夏天喜欢过某件T恤,就在冬天也给该用户推荐类似的T恤。上下文影响用户兴趣的例子还有很多,比如用户上班时和下班后的兴趣会有区别,用户在平时和周末的兴趣会有区别,用户和父母在一起与和同学在一起时的兴趣有区别,甚至用户在上厕所时阅读的文章和在办公桌旁阅读的文章也是不同的。

    再比如,心情是一种重要的上下文,用户在不同的心情下会选择不同的音乐......


    因此,准确了解用户的上下文信息,并将该信息应用于推荐算法是设计好的推荐系统的关键步骤。

    1、时间上下文信息

     1)时间效应简介

    用户兴趣是变化的:如果我们要准确预测用户现在的兴趣,就应该关注用户最近的行为,因为用户最近的行为最能体现他现在的兴趣

    物品也是有生命周期的:不同系统的物品具有不同的生命周期,比如新闻的生命周期很短暂,而电影的生命周期相对较长。

    季节效应:季节效应主要反映了时间本身对用户兴趣的影响。比如人们夏天吃冰淇淋,冬天吃火锅,夏天穿T恤,冬天穿棉衣。

    类似还有节日效应等。

    2)时间效应举例:

    下面通过一些例子体会一下时间对用户兴趣的影响。我们通过Google Insights工具对时间效应进行一些分析。Google Insights提供了某个搜索词自2004年以来的搜索频率曲线,我们可以通过该曲线发现一些用户兴趣变化的例子。
    图5-2展示了3个著名的社交网站名字自2004年以来在google上的搜索量变化曲线,从图中可以看到,facebook的搜索量直线上升,而myspace在2007年达到顶峰后开始下降,twitter的搜索量也在不断增长,但增长趋势明显低于facebook。这种变化的产生主要源于用户兴趣的变化。

    3) 系统时间特性的分析

    在给定时间信息后,推荐系统从一个静态系统变成了一个时变的系统,而用户行为数据也变成了时间序列。研究一个时变系统,需要首先研究这个系统的时间特性。本节将通过研究时变的用户行为数据集来研究不同类型网站的时间特性。包含时间信息的用户行为数据集由一系列三元组构成,其中每个三元组(u,i,t)代表了用户u在时刻t对物品i产生过行为。

     数据集每天独立用户数的增长情况 有些网站处于快速增长期,它们每天的独立用户数都在线性(甚至呈指数级)增加。而有些网站处于平稳期,每天的独立用户数都比较平稳。还有一些网站处于衰落期,每天的用户都在流失。在3种不同的系统中用户行为是不一样的,因此我们首先需要确定系统的增长情况。
     系统的物品变化情况 有些网站,比如新闻网站,每天都会出现大量新的新闻,而每条热门的新闻其时间周期都不会太长,今天热门的新闻也许明天就被人忘记了①。
     用户访问情况 有些网站用户来一次就永远不来了,有些网站用户每周来一次,而有些网站用户每天都来。为了度量这些特性,我们可以统计用户的平均活跃天数,同时也可以统计相隔T天来系统的用户的重合度。

    不同类型网站的物品具有不同的生命周期,比如新闻的生命周期很短,而电影的生命周期很长。我们可以用如下指标度量网站中物品的生命周期。

    A. 物品平均在线天数:

    B. 相隔T天系统物品流行度向量的平均相似度:  取系统中相邻T天的两天,分别计算这两天的物品流行度,从而得到两个流行度向量。然后,计算这两个向量的余弦相似度,如果相似度大,说明系统的物品在相隔T天的时间内没有发生大的变化,从而说明系统的时效性不强,物品的平均在线时间较长。相反,如果相似度很小,说明系统中的物品在相隔T天的时间内发生了很大变化,从而说明系统的时效性很强,物品的平均在线时间很短。

    4) 推荐系统的实时性

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

    实现推荐系统的实时性除了对用户行为的存取有实时性要求,还要求推荐算法本身具有实时性,而推荐算法本身的实时性意味着:
     实时推荐系统不能每天都给所有用户离线计算推荐结果,然后在线展示昨天计算出来的结果。所以,要求在每个用户访问推荐系统时,都根据用户这个时间点前的行为实时计算推荐列表。

     推荐算法需要平衡考虑用户的近期行为和长期行为,即要让推荐列表反应出用户近期行为所体现的兴趣变化,又不能让推荐列表完全受用户近期行为的影响,要保证推荐列表对用户兴趣预测的延续性。

    5)对用户兴趣预测的延续性

    A 给用户推荐最热门的10部电影。
    B 从最热门的100部电影中推荐10部给用户,但保证了时间多样性,每周都有7部电影推荐结果不在上周的推荐列表中。
    C 每次都从所有电影中随机挑选10部推荐给用户。

    三种方法最终的结论如下:

     A、B算法的平均分明显高于C算法。这说明纯粹的随机推荐虽然具有最高的时间多样性,但不能保证推荐的精度。
     A算法的平均分随时间逐渐下降,而B算法的平均分随时间基本保持不变。这说明A算法因为没有时间多样性,从而造成用户满意度不断下降,从而也说明了保证时间多样性的重要性。
    在证明了时间多样性对推荐系统的正面意义之后,下面的问题就是如何在不损失精度的情况下提高推荐结果的时间多样性。

    如何保证给用户的推荐结果具有一定的时间多样性呢?一般的思路有以下几种。
     在生成推荐结果时加入一定的随机性。比如从推荐列表前20个结果中随机挑选10个结果展示给用户,或者按照推荐物品的权重采样10个结果展示给用户。
     记录用户每天看到的推荐结果,然后在每天给用户进行推荐时,对他前几天看到过很多次的推荐结果进行适当地降权。

     每天给用户使用不同的推荐算法。可以设计很多推荐算法,比如协同过滤算法、内容过滤算法等,然后在每天用户访问推荐系统时随机挑选一种算法给他进行推荐。


    当然,时间多样性也不是绝对的。推荐系统需要首先保证推荐的精度,在此基础上适当地考虑时间多样性。在实际应用中需要通过多次的实验才能知道什么程度的时间多样性对系统是最好的。

    6)时间上下文推荐算法

    1. 最近最热门
    在没有时间信息的数据集中,我们可以给用户推荐历史上最热门的物品。那么在获得用户行为的时间信息后,最简单的非个性化推荐算法就是给用户推荐最近最热门的物品了。给定时间T,

    物品i最近的流行度 可以定义为:

    2. 时间上下文相关的ItemCF算法
    基于物品(item-based)的个性化推荐算法是商用推荐系统中应用最广泛的,该算法由两个核心部分构成:
     利用用户行为离线计算物品之间的相似度;
     根据用户的历史行为和物品相似度矩阵,给用户做在线个性化推荐。

    时间信息在上面两个核心部分中都有重要的应用,这体现在两种时间效应上:

     物品相似度 用户在相隔很短的时间内喜欢的物品具有更高相似度。以电影推荐为例,用户今天看的电影和用户昨天看的电影其相似度在统计意义上应该大于用户今天看的电影和用户一年前看的电影的相似度。
     在线推荐 用户近期行为相比用户很久之前的行为,更能体现用户现在的兴趣。因此在预测用户现在的兴趣时,应该加重用户近期行为的权重,优先给用户推荐那些和他近期喜欢的物品相似的物品。

     

    3. 时间上下文相关的UserCF算法

    和ItemCF算法一样,UserCF算法同样可以利用时间信息提高预测的准确率。UserCF算法的基本思想:给用户推荐和他兴趣相似的其他用户喜欢的物品。从这个基本思想出发,我们可以在以下两个方面利用时间信息改进UserCF算法。
     用户兴趣相似度 在第3章的定义中我们知道,两个用户兴趣相似是因为他们喜欢相同的物品,或者对相同的物品产生过行为。但是,如果两个用户同时喜欢相同的物品,那么这两个用户应该有更大的兴趣相似度。比如用户A在2006年对C++感兴趣,在2007年对Java感兴趣,用户B在2006年对Java感兴趣,2007年对C++感兴趣,而用户C和A一样,在2006年对C++感兴趣,在2007年对Java感兴趣。那么,根据第3章的定义,用户A和用户B的兴趣相似度等于用户A和用户C的兴趣相似度。但显然,在实际世界,我们会认为用户A和C的兴趣相似度要大于用户A和B。


     相似兴趣用户的最近行为 在找到和当前用户u兴趣相似的一组用户后,这组用户最近的兴趣显然相比这组用户很久之前的兴趣更加接近用户u今天的兴趣。也就是说,我们应该给用户推荐和他兴趣相似的用户最近喜欢的物品。

    7) 时间段图模型

    时间段图模型 也是一个二分图。

    定义完图的结构后,最简单的想法是可以利用前面提到的PersonalRank算法给用户进行个性化推荐。但是因为这个算法需要在全图上进行迭代计算,所以时间复杂度比较高。因此我们提出
    了一种称为路径融合算法的方法,通过该算法来度量图上两个顶点的相关性。一般来说,图上两个相关性比较高的顶点一般具有如下特征:
     两个顶点之间有很多路径相连;
     两个顶点之间的路径比较短;

     两个顶点之间的路径不经过出度比较大的顶点;

    整个算法契合三点:

    1) 多条路径

    2)每条路径较短

    3) 定点出度都比较小

    8) 离线实验

     Pop 给用户推荐当天最热门的物品。
     TItemCF 融合时间信息的ItemCF算法。
     TUserCF 融合时间信息的UserCF算法。
     ItemCF 不考虑时间信息的ItemCF算法。
     UserCF 不考虑时间信息的UserCF算法。
     SGM 时间段图模型。
     USGM 物品时间节点权重为0的时间段图模型。
     ISGM 用户时间节点权重为0的时间段图模型。
    这里,我们没有对比不同参数下各个算法的性能,最终的实验结果是在最优参数下获得的

    仔细研究不同数据集的召回率和准确率曲线可以发现,这些曲线的形状将数据集分成了两类。

    一类是BlogSpot、YouTube、NYTimes,另一类是Wikipedia和SourceForge。

    在第一类数据集中,有4个算法(SGM、ISGM、TUserCF、Pop)明显好于另外4个算法,而在第二类数据集中,不同算法的召回率和准确率曲线交织在一起,并不能明显分开。而且,在第一类数据集中,即使是非个性化推荐算法Pop也优于很多个性化推荐算法(TItemCF、USGM)。这主要是因为第一类数据集的时效性很强,因此用户兴趣的个性化不是特别明显,每天最热门的物品已经吸引了绝大多数用户的眼球,而长尾中的物品很少得到用户的关注。

    2 地点上下文信息

    除了时间,地点作为一种重要的空间特征,也是一种重要的上下文信息。不同地区的用户兴趣有所不同,用户到了不同的地方,兴趣也会有所不同。

    在中关村逛街逛累了,希望寻找美食时,你可能会考虑几个因素,包括距离、价位、口味和口碑,而在这些因素里,最重要的因素可能是距离。

    基于位置的推荐算法

    LARS(Location Aware Recommender System,位置感知推荐系统)的和用户地点相关的推荐系统。

    该系统首先将物品分成两类,一类是有空间属性的,比如餐馆、商店、旅游景点等,另一类是无空间属性的物品,比如图书和电影等。

    同时,它将用户也分成两类,一类是有空间属性的,比如给出了用户现在的地址(国家、城市、邮编等),另一类用户并没有相关的空间属性信息。

    它使用的数据集有3种不同的形式。
     (用户,用户位置,物品,评分),每一条记录代表了某一个地点的用户对物品的评分。它们使用的是MovieLens数据集。该数据集给出了用户的邮编,从而可以知道用户的大致地址。
     (用户,物品,物品位置,评分),每一条记录代表了用户对某个地方的物品的评分。LARS使用了FourSquare的数据集,该数据集包含用户对不同地方的餐馆、景点、商店的评分。
     (用户,用户位置,物品,物品位置,评分),每一条记录代表了某个位置的用户对某个位置的物品的评分。


    LARS通过研究前两种数据集,发现了用户兴趣和地点相关的两种特征。

    兴趣本地化 不同地方的用户兴趣存在着很大的差别。不同国家和地区用户的兴趣存在着一定的差异性。
    活动本地化 一个用户往往在附近的地区活动。

    对于第二种数据集,每条用户行为表示为四元组(用户、物品、物品位置、评分),表示了用户对某个位置的物品给了某种评分。对于这种数据集,LARS会首先忽略物品的位置信息,利用ItemCF算法计算用户u对物品i的兴趣P(u,i),

    为了避免计算用户对所有物品的TravelPenalty,LARS在计算用户u对物品i的兴趣度RecScore(u,i)时,首先对用户每一个曾经评过分的物品(一般是餐馆、商店、景点),找到和他距离小于一个阈值d的所有其他物品,然后将这些物品的集合作为候选集,然后再利用上面的公式计算最终的RecScore。

    对于第三种数据集,它相对于第二种数据集增加了用户当前位置这一信息。而在给定了这一信息后,我们应该保证推荐的物品应该距离用户当前位置比较近,在此基础上再通过用户的历史行为给用户推荐离他近且他会感兴趣的物品。

    实验证明,考虑位置信息后的推荐,明显优于单纯的ItemCF算法。

  • 相关阅读:
    Vue的生命周期(钩子函数)
    Vue.set全局操作
    Vue.extend提供自定义组件的构造器
    Vue.directive自定义指令
    vuejs全局api概念
    v-pre原样输出&&v-once只加载一次
    v-model双向数据绑定
    OpenGL:基本算法
    OpenGL:基本图形绘画二
    OpenGL:基本图形绘画
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/11277644.html
Copyright © 2011-2022 走看看