在上一篇博客里面分享的是《推荐系统实践》中UGC相关的推荐算法,对此还不熟悉的读者可以戳这里。
关于这个系列会分为如下几个部分:
《推荐系统实践》算法纯享(附代码链接)(一)—— 评价指标篇
《推荐系统实践》算法纯享(附代码链接)(二)—— 协同过滤篇
《推荐系统实践》算法纯享(附代码链接)(三)—— 冷启动篇
《推荐系统实践》算法纯享(附代码链接)(四)—— UGC推荐篇
《推荐系统实践》算法纯享(附代码链接)(五)—— 借助上下文信息推荐篇
《推荐系统实践》算法纯享(附代码链接)(六)—— 借助社交网络推荐篇
《推荐系统实践》算法纯享(附代码链接)(七)—— 评分预测篇
完整代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice
下面将开始本系列的第五部分——借助上下文信息推荐篇。
文章目录
5 上下文推荐
上下文的信息一般有时间、地点等。
5.1 时间上下文推荐
代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice/blob/master/Chapter5/基于时间上下文信息的推荐.ipynb
带有时间的用户行为数据集一般由(u, i, t)三元组组成,表示用户u给物品i在时间t由交互的行为。
那么有如下几种方法基于带时间信息的行为进行推荐:
5.1.1 最近最热门
这是一种带时间衰减的非个性化方法。给定时间T,物品i最近的流行度 n i ( T ) n_i(T) ni(T)可以定义为:
n i ( T ) = ∑ ( u , i , t ) ∈ T r a i n , t < T 1 1 + α ( T − t ) n_i(T) = \sum_{(u, i, t)\in Train, t<T} \frac{1}{1+\alpha(T-t)} ni(T)=(u,i,t)∈Train,t<T∑1+α(T−t)1
其中 α \alpha α是时间衰减系数。
5.1.2 时间上下文相关的ItemCF算法
前面介绍的ItemCF的算法,主要包含下面两步比较重要的阶段:
- 利用用户行为离线计算物品之间的相似度
- 根据用户的历史行为和物品相似度矩阵,给用户做个性化推荐
这两步其实都可以加入时间信息。首先回顾不加时间信息的ItemCF算法计算物品相似度的公式:
s i m ( i , j ) = ∑ u ∈ N ( i ) ⋂ N ( j ) 1 ∣ N ( i ) ∣ ∣ N ( j ) ∣ sim(i, j)=\frac{\sum_{u\in{N(i) \bigcap N(j)}}1}{\sqrt{|N(i)||N(j)|}} sim(i,j)=∣N(i)∣∣N(j)∣∑u∈N(i)⋂N(j)1
而在给用户u做推荐时,用户u对物品i的兴趣 p ( u , i ) p(u,i) p(u,i)通过如下公式计算:
p ( u , i ) = ∑ j ∈ N ( u ) s i m ( i , j ) p(u,i)=\sum_{j\in N(u)} sim(i, j) p(u,i)=j∈N(u)∑sim(i,j)
在得到时间信息之后,就可以用如下公式改进相似度计算:
s i m ( i , j ) = ∑ u ∈ N ( i ) ⋂ N ( j ) f ( ∣ t u i − t u j ∣ ) ∣ N ( i ) ∣ ∣ N ( j ) ∣ sim(i, j)=\frac{\sum_{u\in{N(i) \bigcap N(j)}} f(|t_{ui}-t_{uj}|)}{\sqrt{|N(i)||N(j)|}} sim(i,j)=∣N(i)∣∣N(j)∣∑u∈N(i)⋂N(j)f(∣tui−tuj∣)
这个式子中引入了和时间相关的衰减项 f ( ∣ t u i − t u j ∣ ) f(|t_{ui}-t_{uj}|) f(∣tui−tuj∣),其中 t u i t_{ui} t