浅谈Pointwise/Pairwise/Listwise模型

在搜索场景下,Learning-to-Rank大致可以分为Pointwise/Pairwise/Listwise三种不同的机器学习建模范式。第一次接触这些模型是在上学的时候,最近由于做项目的原因重新温习了一下,顺便追了一下最新的进展,简单写一下,就当记录和科普吧。

总览

抽象一点来讲,这三种建模范式的定义分别是

  • Pointwise: 模型的训练目标是单个文档的用户反馈(点击率/转化率/相关性等)
    • 训练数据以单个文档为单位,不考虑其他在同一个列表中一起展示的文档
    • 模型推断对每个文档独立处理,结果通常是一个有含义的概率值(比如predictedCTR)
  • Pairwise: 模型的训练目标是把好的文档排在差的文档的前面
    • 训练数据以(好文档,差文档) pair的形式构造。
    • 训练好的模型,推断依然对每个文档独立处理,出来的分数没有特定数学含义,但是模型会尽量使得好的文档的分数比差的文档的分数要高
  • Listwise: 模型的训练目标是整个文档列表的排列尽可能最优(最优的定义可以采用类似NDCG之类的指标)
    • 训练数据以列表为单位。
    • 模型推断可能每个文档独立进行,也可能对整个列表进行(复杂度较高,较少采用)

如果你觉得上面的描述还是太过抽象,那么下面的例子可能可以帮你更好地理解。

应用场景举例

我们以用户点击预测为例子,给定:

  • 用户 �
  • 查询 �
  • 这个查询返回的文档列表 �={�1,�2,...,��}
  • 用户的点击 �={�0,�1,...,��} , 这里如果用户点击了 �� ,那么 ��=1 ,否则 ��=0

我们来看看这三种模型范式的差异:

#1 - Pointwise Model:这类模型尝试预测的是 �(��|�,�,��) ,也就是用户对单个文档 �� 是否会点击,其他的文档可以被当做不存在。这就是一个典型的二分类问题,一般用的是cross-entropy loss。

如果我们定义模型拟合出来的函数为 ����������(�,�,�) ,那么当

  • ��=0 的时候: ����������(�,�,��) 会尽可能接近0
  • ��=1 的时候: ����������(�,�,��) 会尽可能接近1

#2 - Pairwise Model. 这类模型尝试预测的是 �(��>��|�,�,��,��) ,这里 ��,�� 是两个label不一样的文档(也就是 ��≠�� )。直白一点说,这类模型尝试做的事情是把用户正反馈的文档,排在用户负反馈的文档前面。我们的最终目的是排序,说白了就是好的要排在差的前面——因此这种模型跟我们最终目的的契合程度是更高的

如果我们定义模型拟合出来的函数为 ���������(�,�,�) ,那么当

  • ��=0,��=1 的时候: ���������(�,�,��)−���������(�,�,��) 就会尽可能小、尽可能接近 −∞
  • ��=1,��=0 的时候:那就反过来, ���������(�,�,��)−���������(�,�,��) 就会尽可能大、尽可能接近 +∞

从直觉上理解,Pairwise的好处是可以拟合到更有区分度的函数,可以用来区分两个可能本身区分度不高的文档。比如说,一个查询出来的两个商品都是热销商品:

  • 如果用 ����������(�,�,�) ,很可能两者都会给一个比较高的分数,两者相差不大
  • 如果用 ���������(�,�,�) ,在模型学习的过程中就可能可以加大两者分数的区分度,从而更容易选出两者中较好的一个放在前面

#3 - Listwise Model

这个范式下有比较多的变种和思路,不能一概而论。我举个相对比较直观的算法作为例子——SoftRank算法

在搜索领域,通常用NDCG这个指标来衡量文档列表排序的好坏。如果排序完美,那得分=1;跟完美排序差的越远,分数就越低,最低不低于0。举个例子,假设一次搜索返回了四个结果 {�1,�2,�3} ,用户点击了 �2,�3 ,那么

  • 最佳排序就是 �2→�3→�1 ,或者 �3→�2→�1 。这两个排序的打分都满分=1
  • 如果排序是 �2→�1→�3 ,这显然不是最优的——有正反馈的 �3 应当排�1 前面。这个排序的分数只有0.9
  • 如果排序再差一点,是 �1→�2→�3 ,那NDCG打分就只有0.69
  • ...

最理想的情况,就是模型可以直接优化NDCG——但可惜NDCG本身需要一个排序操作才可以算出来,这使得NDCG不是一个smooth的目标函数,因此不是一个可以直接用神经网络+梯度下降来直接优化的目标。

SoftRank这篇论文的核心,就是用一个smooth函数去近似NDCG。这个近似的NDCG是可以对模型参数求导的,因此(理论上)可以套用大部分神经网络算法来求解。具体算法大家可以去看原论文,这里就不展开太多细节了,附一张图给点直观的感受:

核心是把离散的rank变换成连续的rank distribution

最新进展

(以下不能被当作Survey,只是我用有限的精力找出来的一些样本文章,请学术界大佬们轻喷 + 指点)

Pointwise

绝大多数“点击率预测”类的算法都可以直接套用上来。最近比较有名但稍微有一点点年头的例子有Deep Interest Network (DIN) 和Deep Interest Evolution Network (DIEN) ——在此之后似乎还没有炸裂程度类似的论文横空出世(当然可能我孤陋寡闻了,如果有的话请告知我)。

顺带翻了一下最近两年KDD/RecSys的列表,有一些比较有意思的论文:

  • EXTR:这篇论文做的是广告点击率判断,但是它会考虑到广告放置位周围的信息(比如周围的organic content的质量)
  • SATrans:这篇论文主要解决如何用同一个模型解决不同场景下面的点击率预测(比如都是广告,在feed和在search的广告点击率预测的模式会有所不同)。在搜索场景下,可以借用同样的Attention思路来对不同类别进行优化(比如零食相关的搜索,需要给品牌特征更大的权重;衣服相关的搜索,需要给用户性别更大的权重等)

Pairwise

这块相对没有那么多逆天炸裂的论文。业界最负盛名的,似乎还是微软一手搞出来的RankNet -> LambdaRank -> LambdaMART这一套,到今天依然很多公司都在用。

最近找到的一些论文:

Listwise

这块我也没有找到特别多新的炸天论文。最经典的依然是ListMLEListNet这些算法。唯一找到的一个是RankFormer——这是一篇KDD23论文,用了Transformer来处理文档列表(相当于每个文档是一个token),并且引入List-wide label的概念——这是对整个list的质量的评判,这个概念有助于我们从那些没有任何用户正反馈的session中学习。

另外有一篇比较有意思的不好归类的论文——https://dl.acm.org/doi/pdf/10.1145/3580305.3599851 。这篇论文想要解决的问题是Pairwise/Listwise出来的prediction,不能被当做概率使用。这篇论文提出了一个方法可以让Pairwise/Listwise的模型的prediction能够通过转化变成一个概率值,从而可以跟Pointwise的模型的输出一样当成一个概率来用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值