引言
随着智能互联网时代的到来和发展,推荐系统作为理解用户的核心技术之一成为智能网络的重要组成部分,并在各种实际系统中得到广泛应用。在推荐系统任务中,我们经常需要为用户排列出top-N的物品以供选择,这个任务可以理解为学习排序(Learning to Rank)任务。一个好的推荐系统应该注重top列表的精确性,然而传统的数据对(Pairwise)损失函数并不能很好的匹配top推荐。在精准推荐的需求下,LambdaFM应运而生。
主要符号对照表
ENG | CN |
---|---|
(Implicit feedback based context-aware recommendation ,IFCAR) | 基于隐式反馈的文本感知推荐系统 |
(Factorization Machines ,FM) | 因式分解机 |
(pairwise ranking Factorization Machines,PRFM) | 数据对排序分解机 |
(Follow-the-regularized-Leader ,FTRL) | 从理论研究到实际工程化实现 |
(Normalized Discounted Cumulative Gain,NDCD) | 归一化折现累计增益 |
优势:LambdaFM特别适用于优化IFCAR性能
LambdaFM模型
FM:在数据匮乏的环境下,表示用户之间或项目之间联系的隐藏信息,探究上下文的交互信息。
LambdaFM:把lambdaRank和FM结合,实现了lambdaFM,同样是FTRL的online learning优化方法,支持高维稀疏特征。lambdaFM同时也实现了pairwise的算法,即不考虑deltaNDCG,可以通过参数-rank来选择使用lambdaRank还是pairwise。
Pairwise
让我们从pairwise说起,以搜索为例,对于一对样本 ⟨ x i , x j ⟩ \langle x^i,x^j\rangle ⟨xi,xj⟩ ,如果 x i x^i xi 的相关性好于 x j x^j xj,我们记为 x i ▹ x j x^i\triangleright x^j xi▹xj ,反之为 x i ◃ x j x^i\triangleleft x^j xi◃xj ,相应目标值 y i j y_{ij} yij 为1或0。建立概率模型如下:
P i j = P ( x i ▹ x j ∣ Θ ) = P ( y i j = 1 ∣ ⟨ x i , x j ⟩ , Θ ) = σ ( y ^ ( x i ∣ Θ ) − y ^ ( x j ∣ Θ ) ) = 1 1 + e − ( y ^ ( x i ∣ Θ ) − y ^ ( x j ∣ Θ ) ) P_{ij}=P(x^i\triangleright x^j|\Theta)=P(y_{ij}=1|\langle x^i,x^j\rangle,\Theta)\\ =\sigma(\hat{y}(x^i|\Theta)-\hat{y}(x^j|\Theta))=\frac{1}{1+e^{-(\hat{y}(x^i|\Theta)-\hat{y}(x^j|\Theta))}} Pij=P(xi▹xj∣Θ)=P(yij=1∣⟨xi,xj⟩,Θ)=σ(y^(xi∣Θ)−y^(xj∣Θ))=1+e−(y^(xi∣Θ)−y^(xj∣Θ))1
其中 y ^ ( x ∣ Θ ) \hat{y}(x|\Theta) y^(x∣Θ) 就是FM的输出:
y ^ ( x ∣ Θ ) : = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n ⟨ v i , v j ⟩ x i x j = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n x i x j ∑ f = 1 k v i , f v j , f = w 0 + ∑ i = 1 n w i x i + 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i , f x i ) 2 − ∑ i = 1 n v i , f 2 x i 2 ) \hat{y}(x|\Theta):=w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n\sum_{j=i+1}^n\langle v_i,v_j\rangle x_ix_j\\ =w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n\sum_{j=i+1}^nx_ix_j\sum_{f=1}^kv_{i,f}v_{j,f}\\ =w_0+\sum_{i=1}^nw_ix_i+\frac{1}{2}\sum_{f=1}^k\left(\left(\sum_{i=1}^nv_{i,f}x_i\right)^2-\sum_{i=1}^nv_{i,f}^2x_i^2\right) y^(x∣Θ):=w0+i=1∑nwixi+i=1∑nj=i+1∑n⟨vi,vj⟩xixj=w0+i=1∑nwixi+i=1∑nj=i+1∑nxixjf=1∑kvi,fvj,f=w0+i=1∑nwixi+21f=1∑k⎝⎛(i=1∑nvi,fxi)2−i=1∑nvi,f2xi2⎠⎞
模型参数估计仍然用最大似然,对于所有训练样本对集合 S S S ,最优化问题为:
arg max Θ ∏ ( ⟨ x i , x j ⟩ , y i j ) ∈ S P i j y i j ( 1 − P i j ) 1 − y i j \mathop{\arg\max}_{\Theta}\prod_{(\langle x^i,x^j\rangle,y_{ij})\in S}P_{ij}^{y_{ij}}(1-P_{ij})^{1-y_{ij}} argmaxΘ(⟨xi,xj⟩,yij)∈S∏Pijyij(1−Pij)1−yij
对于训练样本集合 S S S ,我们总可以调整每一对样本的顺序使得总是有 x i ▹ x j x^i\triangleright x^j xi▹xj ,即所有的 y i j y_{ij} yij 都等于1,上面公式简化为:
arg max Θ ∏ ( ⟨ x i , x j ⟩ , 1 ) ∈ S P i j = arg min Θ ∑ ( ⟨ x i , x j ⟩ , 1 ) ∈ S − ln P i j \mathop{\arg\max}_{\Theta}\prod_{(\langle x^i,x^j\rangle,1)\in S}P_{ij}=\mathop{\arg\min}_{\Theta}\sum_{(\langle x^i,x^j\rangle,1)\in S}-\ln P_{ij} argmaxΘ(⟨xi,xj⟩,1)∈S∏Pij=argminΘ(⟨xi,xj⟩,1)∈S∑−lnPij
这样每一对样本 ⟨ x i , x j ⟩ \langle x^i,x^j\rangle ⟨xi,xj⟩ 的损失函数为:
l ( Θ ∣ ⟨ x i , x j ⟩ ) = − ln P i j = ln ( 1 + e − ( y ^ ( x i ∣ Θ ) − y ^ ( x j ∣ Θ ) ) ) l(\Theta|\langle x^i,x^j\rangle)=-\ln P_{ij}=\ln (1+e^{-(\hat{y}(x^i|\Theta)-\hat{y}(x^j|\Theta))}) l(Θ∣⟨xi,xj⟩)=−lnPij=ln(1+e−(y^(xi∣Θ)−y^(xj∣Θ)))
损失函数对参数求偏导数:
∂ l ∂ θ = ∂ l ∂ ( y ^ ( x i ∣ Θ ) − y ^ ( x j ∣ Θ ) ) ( ∂ y ^ ( x i ∣ Θ ) ∂ θ − ∂ y ^ ( x j ∣ Θ ) ∂ θ ) \frac{\partial l}{\partial\theta}= \frac{\partial l}{\partial(\hat{y}(x^i|\Theta)-\hat{y}(x^j|\Theta))}(\frac{\partial\hat{y}(x^i|\Theta)}{\partial\theta}-\frac{\partial\hat{y}(x^j|\Theta)}{\partial\theta}) ∂θ∂l=∂(y^(xi∣Θ)−y^(xj∣Θ))∂l(∂θ∂y^(xi∣Θ)−∂θ∂y^(xj∣Θ))
我们令:
λ i j = ∂ l ∂ ( y ^ ( x i ∣ Θ ) − y ^ ( x j ∣ Θ ) ) = − 1 1 + e y ^ ( x i ∣ Θ ) − y ^ ( x j ∣ Θ ) \lambda_{ij}=\frac{\partial l}{\partial(\hat{y}(x^i|\Theta)-\hat{y}(x^j|\Theta))}=-\frac{1}{1+e^{\hat{y}(x^i|\Theta)-\hat{y}(x^j|\Theta)}} λij=∂(y^(xi∣Θ)−y^(xj∣Θ))∂l=−1+ey^(xi∣Θ)−y^(xj∣Θ)1
则上面公式可以简化为:
∂ l ∂ θ = λ i j ( ∂ y ^ ( x i ∣ Θ ) ∂ θ − ∂ y ^ ( x j ∣ Θ ) ∂ θ ) \frac{\partial l}{\partial\theta}= \lambda_{ij}(\frac{\partial\hat{y}(x^i|\Theta)}{\partial\theta}-\frac{\partial\hat{y}(x^j|\Theta)}{\partial\theta}) ∂θ∂l=λij(∂θ∂y^(xi∣Θ)−∂θ∂y^(xj∣Θ))
而FM的输出对参数的偏导数在Geo-FM的介绍中已经给出过,下面直接列出。注意,由于是pair的方法,偏置项 w 0 w_0 w0 相减总会抵消掉,我们可以固定 w 0 w_0 w0 为0,不需要再求解,也就不需要对 w 0 w_0 w0 再算偏导数:
∂ y ^ ∂ θ = { x i , i f    θ    i s    w i x i ∑ j = 1 n v j , f x j − v i , f x i 2 i f    θ    i s    v i , f \frac{\partial\hat{y}}{\partial\theta}= \begin{cases} x_i, & if\,\,\theta\,\,is\,\,w_i \\ x_i\sum_{j=1}^nv_{j,f}x_j-v_{i,f}x_i^2 & if\,\,\theta\,\,is\,\,v_{i,f} \\ \end{cases} ∂θ∂y^={xi,xi∑j=1nvj,fxj−vi,fxi2ifθiswiifθisvi,f
有了损失函数对参数的偏导,后面优化就是水到渠成。
更新参数
w k = w k − η ( λ i , j ( x k i − x k j ) + γ w k w k ) w_k = w_k-\eta(\lambda_{i,j}(x_k^i-x_k^j)+\gamma _{wk}w_k) \\ wk=wk−η(λi,j(xki−xkj)+γwkwk)
lambdaRank
在上面的pairwise方法中,可以看到对于每一对样本都是同等对待的,算法尽量使得每一对样本的label大小关系都能预测对,而对于它们具体的label是多少以及在展现中的位置并不敏感。但在实际问题中,当评价指标是NDCG等时,这些信息就很重要了。举个例子:比如同一query下召回了4个doc,实际相关性分数分别为0 1 3 4,我们有两个排序模型A和B,通过模型的打分,排列结果分别为4 3 0 1和3 4 1 0。从pairwise的角度来看,两个排列跟最优排列4 3 1 0都只相差一次交换,似乎模型效果没差别,但是从NDCG的角度来看,NDCG(A) = 0.997,NDCG(B) = 0.852,明显模型A的效果更好。
为了迎合NDCG指标,需要在训练的时候对样本pair区别对待,设置不同的权重,lambdaRank提出了一种权重deltaNDCG,即在原来的顺序上如果交换样本 i i i 和样本 j j j ,带来的NDCG值变化的绝对值。形式上是将上面公式的 λ i j \lambda_{ij} λij 乘以权重系数,变成 λ i j ’ \lambda_{ij}’ λij’ :
λ i j ’ = λ i j ∣ Δ N D C G i j ∣ \lambda_{ij}’=\lambda_{ij}|\Delta NDCG_{ij}| λij’=λij∣ΔNDCGij∣
这应该就是lambda名字的来源。在我看来,lambdaRank其实仍然是一种pairwise的方法.