利用上下文信息的推荐系统

利用上下文信息的推荐系统

读书笔记,参考书本: 项亮, 推荐系统实践. 2012

(主要讨论时间信息,如何将时间信息结合到推荐算法中)

时间效应举例

时间是一种重要的上下文信息,对用户兴趣有着深入而广泛的影响。一般认为,时间信息对用户兴趣的影响表现在以下几个方面。
 用户兴趣是变化的 -- 我们这里提到的用户兴趣变化是因为用户自身原因发生的变化。比如随着年龄的增长,用户小时候喜欢看动画片,长大了喜欢看文艺片。一位程序员随着工作时间的增加,逐渐从阅读入门书籍过渡到阅读专业书籍。一个人参加工作了,工作后的兴趣和学生时代的兴趣相比发生了变化。那么,如果我们要准确预测用户现在的兴趣,就应该关注用户最近的行为,因为用户最近的行为最能体现他现在的兴趣。当然,考虑用户最近的兴趣只能针对渐变的用户兴趣,而对突变的用户兴趣很难起作用,比如用户突然中奖了。
 物品也是有生命周期的 -- 一部电影刚上映的时候可能被很多人关注,但是经久不衰的电影是很少的,很多电影上映后不久就被人们淡忘了。此外,物品也可能受新闻事件的影响,比如一部已经被淡忘的电影会因为突然被某个新闻事件涉及而重新热门起来。因此,当我们决定在某个时刻给某个用户推荐某个物品时,需要考虑该物品在该时刻是否已经过时了。比如,我们给一个NBA迷推荐10年前的某个NBA新闻显然是不太合适的(当然这也不一定,比如用户当时就是在寻找旧的NBA新闻时)。不同系统的物品具有不同的生
命周期,比如新闻的生命周期很短暂,而电影的生命周期相对较长。
 季节效应 -- 季节效应主要反映了时间本身对用户兴趣的影响。比如人们夏天吃冰淇淋,冬天吃火锅,夏天穿T恤,冬天穿棉衣。当然,我们也不排除有特别癖好的人存在,但大部分用户都是遵循这个规律的。除此之外,节日也是一种季节效应:每年的圣诞节,人们都要去购物;每年的奥斯卡颁奖礼,人们都要关注电影。2011年ACM推荐大会的一个研讨会曾经举办过一次上下文相关的电影推荐算法比赛 ,该比赛要求参赛者预测数据集中用户在奥斯卡颁奖礼附近时刻的行为。关注季节效应的读者可以关注一下这个研讨会上发表的相关论文。

时间效应研究

在给定时间信息后,推荐系统从一个静态系统变成了一个时变的系统,而用户行为数据也变成了时间序列。

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

时效性

同时也要注意物品的生存周期和系统的时效性。不同类型网站的物品具有不同的生命周期,比如新闻的生命周期很短,而电影的生命周期很长。

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

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

时间多样性

提高推荐结果的时间多样性需要分两步解决:首先,需要保证推荐系统能够在用户有了新的行为后及时调整推荐结果,使推荐结果满足用户最近的兴趣;其次,需要保证推荐系统在用户没有新的行为时也能够经常变化一下结果,具有一定的时间多样性。
对于第一步,又可以分成两种情况进行分析。第一是从推荐系统的实时性角度分析。有些推荐系统会每天离线生成针对所有用户的推荐结果,然后在线直接将这些结果展示给用户。这种类型的系统显然无法做到在用户有了新行为后及时调整推荐结果。第二,即使是实时推荐系统,由于使用的算法不同,也具有不同的时间多样性。对于不同算法的时间多样性,Neal Lathia博士在博士论文中进行了深入探讨 ,这里就不再详述了。
那么,如果用户没有行为,如何保证给用户的推荐结果具有一定的时间多样性呢?一般的思路有以下几种。
 在生成推荐结果时加入一定的随机性。比如从推荐列表前20个结果中随机挑选10个结果展示给用户,或者按照推荐物品的权重采样10个结果展示给用户。
 记录用户每天看到的推荐结果,然后在每天给用户进行推荐时,对他前几天看到过很多次的推荐结果进行适当地降权。
 每天给用户使用不同的推荐算法。可以设计很多推荐算法,比如协同过滤算法、内容过滤算法等,然后在每天用户访问推荐系统时随机挑选一种算法给他进行推荐。

相关算法

最近最热门

在获得用户行为的时间信息后,最简单的非个性化推荐算法就是给用户推荐最近最热门的物品了。

在给定时间T,物品i最近的流行度n_i(T)可以定义为

n_i(T)=\sum_{(u,i,t)\in Train,t<T}\frac{1}{1+\alpha(T-t)}

α是时间衰减参数。

【个人感觉本质是个反比例函数】

时间上下文相关的ItemCF算法

基于物品的个性化推荐时应用最广泛的。该算法由两个核心部分构成:

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

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

 物品相似度 用户在相隔很短的时间内喜欢的物品具有更高相似度。以电影推荐为例,用户今天看的电影和用户昨天看的电影其相似度在统计意义上应该大于用户今天看的电影和用户一年前看的电影的相似度。

 在线推荐 用户近期行为相比用户很久之前的行为,更能体现用户现在的兴趣。因此在预测用户现在的兴趣时,应该加重用户近期行为的权重,优先给用户推荐那些和他近期喜欢的物品相似的物品。

在得到时间信息(用户对物品产生行为的时间)后,我们可以通过如下公式改进相似度计算用户和物品相似度

sim(i,j)=\frac{\sum_{u\in N(i)\cap N(j)}f(|t_{ui}-t_{uj}|)}{\sqrt{|N(i)||N(j)|}}

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

衰减函数f(|t_{ui}-t_{uj}|)=\frac{1}{1+\alpha|t_{ui}-t{uj}|}

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

p(u,i)=\sum_{j\in N(u)\cap S(i,K)}sim(i,j)\frac{1}{\beta{|t_0-t_{ij}|}}

其中,t_0是当前时间。上面公式表明,越靠近t_{uj}越靠近t_0,和物品j相似的物品在用户u的推荐列表中获得越高的排名。\beta为时间衰减参数。


作者:锦绣拾年
链接:https://www.jianshu.com/p/b92a2b87b83d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。