前言
之前我们已经陆续完成了数据集、评价指标和经典算法MF推荐的实战,接下来本章将介绍另一种应用也非常广泛的推荐技术:贝叶斯个性化排序(Bayesian Personalized Ranking, BPR)。将基于BPR矩阵分解进行推荐实战。
如果你对本系列(未写完,持续更新中)感兴趣,可接以下传送门:
【推荐算法】从零开始做推荐(一)——认识推荐、认识数据
【推荐算法】从零开始做推荐(二)——推荐系统的评价指标,计算原理与实现样例
【推荐算法】从零开始做推荐(三)——传统矩阵分解的TopK推荐
【推荐算法】从零开始做推荐(四)——python Keras框架 利用Embedding实现矩阵分解TopK推荐
【推荐算法】从零开始做推荐(五)——贝叶斯个性化排序矩阵分解 (BPRMF) 推荐实战
【推荐算法】从零开始做推荐(六)——贝叶斯性化排序矩阵分解 (BPRMF) 的Tensorflow版
什么是BPR?
这就要提到本人神交已久的引路人刘建平先生文章的介绍:贝叶斯个性化排序(BPR)算法小结。中文讲解,十分详细。
本文重在实现,这里只做一个简单的介绍,以下为本人对BPR的理解:假设用户 u u u 能观测到所有的项目,那么对于用户最终点击访问的项目 i i i, 和最终未访问的项目 j j j,有偏好 i > u j i>_uj i>uj。因此,BPR寻求一批参数 Θ \Theta Θ,使得概率 P ( Θ ∣ > u ) P(\Theta|>_u) P(Θ∣>u)最大.
这里举个例子,比如网易云给你推荐了一个歌单,里面有10首歌,10首你都看到了,然后选了第一首,其他没选。那么在这10首歌里,相比于其他9首你更喜欢第一首,即访问第一首的概率要比其他9首要大,学出来的参数就要能很好地描述这一点。
那么说直白点,就是期望用户访问过的项目,其评分要高于未访问过的,我们的目标即为最大化两者之间的差距。
在这个过程中,我们可以明确几点:
1. BPR不是具体的推荐方法,而是一种思想,因此它可以应用在多种推荐模型上,本文将其应用到矩阵分解上。
2. BPR是一种参数学习的方法,得到的参数是基于BPR思想的。
核心算法
以下内容以刘建平老师的博客为基准进行实现。
损失函数
arg max θ l ( θ ) = ∑ ( u , i , j ) ∈ D l n σ ( x ‾ u i − x ‾ u j ) + λ ∣ ∣ θ ∣ ∣ 2 , σ ( x ) = 1 1 + e − x \mathop{\arg\max_{θ}}\mathcal{l}(θ)=\sum_{(u,i,j)\in D} ln \sigma(\overline{x}_{ui}-\overline{x}_{uj})+\lambda||\theta||^2,\\ \sigma(x) = \frac{1}{1+e^{-x}} argθmaxl(θ)=(u,i,j)∈D∑lnσ(xui−xuj)+λ∣∣θ∣∣2,σ(x)=1+e−x1