排序模型入门详解(未完待续)


1. 排序问题的定义

当商家需要向用户提供多个商品供选择时,往往会遇到这个问题:如何将商品按照一定的顺序呈现给用户,以便使用户能够尽可能地完成购买流程?这就涉及到对商品的排序,用到的模型称排序模型。通常情况下,我们希望排在前面的商品是用户更大概率会点击的商品。

根据不同类型的训练数据,可以将排序模型可以分为三大类:

  1. 单点标注(point-wise)
  2. 两两标注(pair wise)
  3. 列表标注(list wise)

2. 排序模型的几大类别

2.1. point-wise排序模型

输入特征向量集合表示为 { x ( 1 ) , x ( 2 ) , ⋯   , x ( m ) } \{x^{(1)},x^{(2)},\cdots,x^{(m)}\} {x(1),x(2),,x(m)},其中 x ( i ) x^{(i)} x(i)是一个n维向量,各个维度的含义可以是商品的特征例如评分、小量、价格以及用户的特征例如性别、年龄、偏好等,以及用户和商品的关联特征例如是否点击过该商品、是否购买过该商品、对该商品的评价等,以及场景特征如时间、地点等;标签集合为 y ( 1 ) , y ( 2 ) , ⋯   , y ( m ) y^{(1)},y^{(2)},\cdots,y^{(m)} y(1),y(2),,y(m),其中 y ( i ) y^{(i)} y(i)的取值集合是一个实数,例如用户没有点击过的商品为1,用户点击过但是没购买的商品为3,用户点击并购买过的商品为10.

在上述定义的基础上,我, 可以将point-wise排序模型转换为一个分类问题或者回归问题。如果将排序问题转换为分类问题,会导致输出只有预先定义的那几类(例如1,3,10),进而导致很多商品的label一样,无法进一步区分次序。因此,实际中往往将point-wise排序模型转换为回归问题。

point-wise模型的缺点是,没有考虑训练样本之间的相对顺序。例如,在某次点击事件中,用户点击了样本 x ( i ) x^{(i)} x(i),在另一次点击事件中用于点击了样本 x ( j ) x^{(j)} x(j)(且此次事件中存在样本 x ( i ) x^{(i)} x(i)但是用户没有点击)。根据point-wise模型, x ( i ) x^{(i)} x(i) x ( j ) x^{(j)} x(j)的标签一样,但这显然是不合理的( x ( j ) x^{(j)} x(j)应该比 x ( i ) x^{(i)} x(i)更靠前才合理)。

2.2. pair-wise排序模型

在pair-wise模型汇总,我们不再从单文档的分类或者回归的角度去看待问题,而是从一个文档对 < d 1 , d 2 > <d_1,d_2> <d1,d2>来看待问题。如果用户点击了 d 1 d_1 d1而没有点击 d 2 d_2 d2,那么说明 d 1 d_1 d1 d 2 d_2 d2更靠前,可以把 d 1 − d 2 d_1-d_2 d1d2的label设置为+1, d 2 − d 1 d_2-d_1 d2d1的label设置为-1,对所有的文档pair进行这样标注,就得到了一系列用于二分类的训练样本。预测时,对测试集里面的所有pair进行分类,便可以得到测试集的一个偏序关系,从而实现排序。SVM Rank、RankNet、FRank、RankBoost等方法都是pair-wise模型。

2.2.1. RankNet

https://www.cnblogs.com/genyuan/p/9788294.html
RankNet提出的时候是为了解决如下搜索排序问题:给定query集合,每个query都对应着一个文档集合,如何对每个query返回排序后的文档集合。
RankNet将输入query的特征向量 x ∈ R n x\in R^n xRn映射为一个实数 f ( x ) ∈ R f(x)\in R f(x)R.
给定query下两个文档 U i , U j U_i,U_j Ui,Uj,对应的特征向量分别为 x i , x j x_i,x_j xi,xj,经过RankNet前向计算得到的分数分别为 s i = f ( x i ) , s j = f ( x j ) s_i=f(x_i),s_j=f(x_j) si=f(xi),sj=f(xj).记 U i ⊳ U j U_i\rhd U_j UiUj U i U_i Ui U j U_j Uj更靠前,在RankNet里面用如下公式表示其概率:
P i j ≡ P ( U i ⊳ U j ) = 1 1 + e − σ ( s i − s j ) (2-1) P_{ij}\equiv P(U_i\rhd U_j)=\frac{1}{1+e^{-\sigma(s_i-s_j)}}\tag{2-1} PijP(UiUj)=1+eσ(sisj)1(2-1)
上式其实就是用logistic回归模型来将分数之差映射到0~1之间,来近似拟合概率。 σ \sigma σ是可学习的参数
对于特定的query,记文档 U i , U j U_i,U_j Ui,Uj(后文简记为文档i,j)被标记的标签之间的关联:
S i j = { 1    i 比 j 更 相 关 0    i 和 j 相 关 性 一 致 − 1    j 比 i 更 相 关 (2-2) S_{ij}=\left\{ \begin{aligned} &1 \ \ i比j更相关\\ &0 \ \ i和j相关性一致\\ -&1 \ \ j比i更相关\\ \end{aligned} \right. \tag{2-2} Sij=1  ij0  ij1  ji(2-2)
P ˉ i j = 1 2 ( 1 + S i j ) \bar P_{ij}=\frac{1}{2}(1+S_{ij}) Pˉij=21(1+Sij)为真实情况下i比j更相关的概率。
那么可以用交叉熵来作为损失函数:
C = − P ˉ i j l o g P i j − ( 1 − P ˉ i j ) l o g ( 1 − p i j ) = 1 2 ( 1 + S i j ) ( 1 − S i j ) σ ( s i − s j ) + l o g ( 1 + e − σ ( s i − s j ) ) (2-3) \begin{aligned} C&=-\bar P_{ij}logP_{ij}-(1-\bar P_{ij})log(1-p_{ij})\\ &=\frac{1}{2}(1+S_{ij})(1-S_{ij})\sigma(s_i-s_j)+log(1+e^{-\sigma(s_i-s_j)}) \end{aligned} \tag{2-3} C=PˉijlogPij(1Pˉij)log(1pij)=21(1+Sij)(1Sij)σ(sisj)+log(1+eσ(sisj))(2-3)
不难验证,上述损失函数是具有对称性的,也即 ∀ i , j , i f   S i j = 1 \forall i,j,if\ S_{ij}=1 i,j,if Sij=1也即i比j更相关,有(交换i和j的位置,下式形式对应的将i和j调换就行)
C = l o g ( 1 + e − σ ( s i − s j ) ) (2-4) C=log(1+e^{-\sigma(s_i-s_j)})\tag{2-4} C=log(1+eσ(sisj))(2-4)
这个结论对于训练加速会有帮助

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值