[推荐系统]利用上下文信息

上下文包括用户访问推荐系统的时间、地点、心情等,对于提高推荐系统的性能是非常重要的。准确了解用户的上下文信息,并将该信息应用于推荐算法是设计好的推荐系统的关键步骤

时间上下文信息

上下文信息中最重要的时间上下文信息。

时间效应简介

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

  • 用户兴趣是变化的 这里提到的用户兴趣变化是因为用户自身原因发生的变化,年龄、工作等。如果要准确预测用户现在的兴趣,就应该关注用户最近的行为,因为用户最近的行为最能体现他现在的兴趣。
  • 物品也是有生命周期的 一部电影刚上映可能被很多人关注,上映不久后就被人们淡忘了。当我们决定在某个时刻给某个用户推荐某个物品时,需要考虑该物品在该时刻是否已经过时了。不同系统的物品具有不同的生命周期。
  • 季节效应 季节效应主要反应了时间本身对用户兴趣的影响。比如夏天吃冰淇淋、冬天吃火锅,夏天穿T恤等。大部分用户是遵循这个规律的。

系统时间特性的分析

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

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

推荐系统的实时性

用户兴趣是不断变化的,其变化体现在用户不断增加的新行为中。一个实时的推荐系统需要能够实时相应用户新的行为,让推荐列表不断变化,从而满足用户不断变化的兴趣。但并不是所有用户行为都会导致推荐系统的实时变化,只有显性反馈行为会导致推荐列表的变化。

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

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

推荐算法的时间多样性

推荐系统每天推荐结果的变化程度被定义为推荐系统的时间多样性。时间多样性高的推荐系统中用户会经常看到不同的推荐结果。

提高推荐结果的时间多样性需要分两部解决。第一步是从推荐系统的实时性角度分析。第二,即使是实时推荐系统,由于使用的算法不同,也具有不同的时间多样性。

如果用户没有行为,如何保证给用户的推荐结果具有一定的时间多样性?解决方法有:

  • 在生成推荐结果时加入一定的随机性。
  • 记录用户每天看到的推荐结果,然后在每天给用户进行推荐时,对他前几天看到过很多次的推荐结果记性适当降权。
  • 每天给用户使用不同的推荐算法。可以设计很多推荐算法,比如协同过滤算法、内容过滤算法等,然后在每天用户访问推荐系统时随机挑选一种算法给他进行推荐。

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

时间上下文推荐算法

时间信息建模有多种方法。

1.最近最热门

在没有时间信息的数据集中,我们可以给用户推荐历史上最热门的物品。那么在获得用户行为的时间信息后,最简单的非个性化推荐算法就是给用户推荐最近最热门的物品了。给定时间T,物品i最近的流行度$n_i(T)$可以定义为: $n_i(T) = \sum_{(u,i,t)\in Train, t<T}\frac{1}{1+\alpha(T-t)}$

其中,alpha是时间衰减参数。随着时间的增长,流行度热门程度降低。

1
2
3
4
5
6
7
def RecentPopularity(records, alpha, T):
ret = dict()
for user, item, tm in records:
if tm >= T:
continue
addToDict(ret, item, 1/(1.0+alpha*(T-tm)))
return ret

2.时间上下文相关的ItemCF算法

基于物品的个性化推荐算法是商用推荐系统中应用最广泛的,该算法有两个核心:

  • 利用用户行为离线计算物品之间的相似度;
  • 根据用户的历史行为和物品相似度矩阵,给用户做在线个性化推荐。

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

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

之前ItemCF算法计算物品之间相似度公式: 物品相似度

在得到时间信息(用户对物品产生行为的时间)后,可以在公式中加上时间因素,变为: 时间+物品相似度

引入和时间相关的衰减项$f(|t_{ui}-t_{uj}|)$,其中tui是用户u对物品i产生行为的时间。f函数的含义是用户对物品i和物品j产生行为的时间越远,则$f(|t_{ui}-t_{uj}|)$越小。

除了考虑时间信息对相关表的影响,也应该考虑时间信息对预测公式的影响。一般来说,用户现在的行为应该和用户最近的行为关心更大。因此可以修正预测公式: 预测公式修正

其中,t0是当前时间。公式表明,tuj越靠近t0,和物品j相似的物品就会在用户u的推荐列表中获得越高的排名。beta是时间衰减参数。

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

UserCF算法也可以利用时间信息提高预测的准确性。UserCF算法思想是:给用户推荐和他兴趣相似的其他用户喜欢的物品。可以在两个方面利用时间信息对UserCF改进:

  • 用户兴趣相似度 两个用户兴趣相似是因为他们喜欢相同的物品,或者对相同的物品产生过行为。但是,如果两个用户同时喜欢相同的物品,那么这两个用户应该有更大的兴趣相似度
  • 相似兴趣用户的最近行为 在找到和当前用户u兴趣相似的一组用户后,这组用户最近的兴趣显然相比这组用户很久之前的兴趣更加接近用户u今天的兴趣。也就是说,我们应该给用户推荐和他兴趣相似的用户最近喜欢的物品

UserCF计算用户u和用户v的兴趣相似度公式: 兴趣相似度公式 其中,N(u)是用户u喜欢的物品集合,N(v)是用户v喜欢的物品集合。加上时间信息后,公式变为: 时间+兴趣相似度

对用户u和用户v共同喜欢的物品i增加一个时间衰减因子。用户u和用户v对物品i产生行为的时间越远,这两个用户的兴趣相似度就越小。

原UserCF预测用户对物品的兴趣公式: 预测公式

S(u,K)包含和用户u兴趣最接近的K个用户。如果用户v对物品i产生过行为,rvi = 1,否则为rvi = 0.

加上时间因素后,公式变为: 时间+预测公式

产生行为的时间离当前时间越远,相似度越小。

地点上下文信息

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

基于位置的推荐算法

用户兴趣和地点相关的两种特征:

  • 兴趣本地化 不同地方的用户兴趣存在着很大的区别。不同国家和地区用户的兴趣存在移动的差异性。
  • 活动本地化 一个用户往往在附近的地区活动。在基于位置的推荐中需要考虑推荐地点和用户当前地点的距离,不能给用户推荐太原的地方。

可以从3种数据形式来分析地点上下文的影响:

  • (用户, 用户位置, 物品, 评分):某个位置的用户对物品的评分;
  • (用户, 物品, 物品位置, 评分):用户对某个位置的物品的评分;
  • (用户, 用户位置, 物品, 物品位置, 评分):某个位置的用户对某个位置的物品的评分结果。

对于第一种,将数据集根据用户的位置划分成很多子集,可以把用户按地理位置做树状划分,对每一级树节点生成推荐列表,最终对各级推荐结果加权(金字塔模型)。金字塔的深度影响了推荐系统的性能,因而深度是这个算法的一个重要指标。

对于第二种,可以先计算忽略物品位置的 (p(u,i)) ,然后减去物品位置对用户的代价。 $RecScore(u,i) = P(u,i) - TravelPenalty(u,i)$ P(u,i)用户u对物品i的兴趣,TravelPenalty(u,i)表示物品i的位置对用户u的代价计算TravelPenalty(u,i)的基本思想是对于物品i与用户u之前评分的所有物品的位置计算距离的平均值(或最小值).

实验表明,考虑了用户位置的算法要优于ItemCF算法。

您的支持就是我更新的最大动力!谢谢!