构建企业级推荐系统:算法、工程实现与案例分析
上QQ阅读APP看书,第一时间看更新

5.5.2 利用贝叶斯框架来建模用户的兴趣

我们可以将用户的兴趣分为两种:一种是用户的真实兴趣,另一种是会受到国家/地区大的兴趣趋势影响的临时兴趣。一方面,用户的真实兴趣是由用户的性别、年龄、受教育程度、专业等决定的,它是相对稳定的,在一定时间内不会急剧变化。另一方面,当用户觉得要读什么新闻时,是会受到用户所在区域新闻趋势的影响的,这种影响是短期的,是随着时间变化的。

基于用户点击行为模式和用户所在地群体的行为模式,通过贝叶斯框架可以很好地预测用户当前对新闻的兴趣,具体可以通过如下三个步骤来获得用户的当前兴趣。

1.预测用户在某个时间周期内的真正兴趣

对于特定时间周期t内的某个用户u,D(u,t)是用户在所有新闻主题上的点击分布,D(t)是用户所在地域整体用户的兴趣分布,代表的是兴趣趋势。我们期望学习用户从D(u,t)呈现出的而不会受到D(t)干扰的真实兴趣。

用pt(click|category=ci)来表示用户在新闻主题ci上的真实兴趣,它是一个条件概率,表示在新闻主题为ci的条件下,用户进行点击的概率。利用贝叶斯公式,我们可以采用如下公式来计算pt(click|category=ci)。

式(5-3)中pt(category=ci|click)是用户点击的所有新闻中该新闻属于主题ci的概率,它可以从用户的点击分布D(u,t)中估算出(参见式5-2),可以用D(u,t)的第i个分量来估算)。

而pt(category=ci)是新闻属于主题ci的先验概率,也就是在时间周期t内所有发布的新闻属于类别ci的比例,它与用户所在地域的新闻变化趋势相关,如有更多的有关主题ci的新闻事件发生,那么关于主题ci的新闻就会越多。我们可以用整体分布D(t)中的第i个分量来近似估计pt(category=ci)。

pt(click)是用户点击任何一个类别的文章的先验概率,与具体的文章主题无关。

从式(5-3)可知,pt(click|category=ci)表示用户对主题ci的感兴趣程度,不同于该地区其他用户的兴趣。如果用户读了很多体育类新闻,而很多其他用户也读了体育类新闻,那么这可能是由一些体育相关热点事件引起的。相反,如果该用户阅读了大量体育新闻,而该地区其他用户很少读体育新闻,这就代表的是用户真的对体育新闻感兴趣。

2.结合用户在不同时间周期的兴趣,获得用户精确的与时间无关的真实兴趣

前面计算了用户在一个时间周期t内的兴趣偏好,我们可以将用户在过去统计周期内所有时间周期的兴趣归并起来,从而综合获得用户对新闻类别的真实兴趣偏好,具体参见下面公式的计算逻辑。

上式中Nt是用户在时间周期t内总的新闻播放量。我们可以假设用户在所有时间周期内点击一篇新闻的先验概率是固定不变的,也即假设上式中的pt(click)与时间周期t无关,记为p(click)。那么上式可以改写为下面的公式:

式(5-4)就是用户的真实兴趣,该兴趣其实是用户在多个时间周期内兴趣的某种加权平均。

3.结合用户真实兴趣和当前的新闻趋势,预测用户当前的兴趣

如前面所说,用户的兴趣可以分解为两部分,一部分是用户长期的真实兴趣,另外一部分是受到当前趋势影响的短期兴趣。前面基于用户过去的点击播放行为计算出了用户长期的真实兴趣。为了度量用户当前对新闻的短期兴趣,可用用户所在地域的所有用户在一个较短时间段(比如过去一个小时)的整体点击分布来刻画(用p0(category=ci|click)来表示),由于所在地域有大量用户,在这段较短时间内也有足够多的数据来准确计算出哪些新闻主题是热门的。

我们的最终目标是预测用户在将来一段时间的点击分布,同样,也可以用贝叶斯公式得到下面的计算公式:

我们用用户的真实兴趣interest(category=ci)即式(5-4)来估计p0(click|category=ci),并且假设用户点击任何一篇新闻的概率为常数,不受时间影响(即假设p0(click)=p(click)),那么上式就可以表示为(将式(5-4)代入进来)如下形式。

我们可以在上式中加上一个虚拟点击项,如果它跟当前新闻趋势的概率分布p0(category=ci)同分布,那么用户在未来短时间内对新闻的兴趣偏好概率最终变为

式(5-5)中的G就是虚拟点击数(在本章参考文献[2]中取值为10),它可以看成是一个光滑化的因子,当某个用户只有非常少的点击历史时,这时是用当前的新闻趋势(p0(category=ci))来预估该用户的点击概率,这在没有太多该用户历史数据的情况下是一个合理的估计。当ΣtNt远远大于G时,上式就可以忽略G,还原为用户真实的点击分布预估。

预估用户将来短时间内的兴趣分布的方法有一个重要优点,就是我们可以增量地计算用户的点击分布,可以将过去每个时间周期t对应的Nt的值事先存起来,当更新用户的兴趣偏好概率时,只需要将最近一个时间周期的值计算出来,利用式(5-5)及预先存下来的过去时间段的值就可以得到用户最新的兴趣偏好分布。