Learning To Rank (LTR) 入门级概述

简介

转载于:R&S[19] | 学习排序入门级概述

学习排序,英文是learning to rank,缩写LTR,最近我之所以要看这块内容,主要是因为无论是搜索系统还是推荐系统,都是分为“召回”和“排序”两个阶段,而排序阶段作为其中一个重要的阶段一致被人们关注,但是很多视角其实只是关注在CTR预估等口径比较小的方面,私以为不够,所以就稍微探了一下更大口径的问题——学习排序,经过一些初步的学习,感觉有了一定的理解,此处给大家简单科普一波,让大家对这个领域有一定的了解,同时,也希望和大家交流~

1. 什么是LTR

此处的排序,不是数据结构与算法之中的排序,实质上是在探索一种在特定问题下,尤其是特征或者因素复杂的情况下,最合适的一种排序标准,这个标准是基于模型计算的。

来看个例子,电影推荐系统中,我们已经为用户A召回了10部电影,这10部召回的渠道不同,有的是基于协同过滤得到的,也有近期的热门电影等等,不论是召回渠道,此时都面临一个问题,就是把召回池中的内容,根据特定的顺序排列展示在用户面前,这里涉及了用户体验、商家体验等多角度因素,而这些因素也要从很多特征体现。再举个例子,对于用户输入的一个query,系统召回了很多不同的内容,可以是直接匹配得到的,可以是同义词转换得到的等等,召回得到的内容很多,我们该如何进行排序,这里要考虑query的匹配度,要考虑用户的实际深层需求等。

在上述两个例子下,我们都要寻求合适的方法来完成这个排序,那么学习排序其实给了我们很大的空间。现在给出一个比较可靠的学习排序定义:

Methods that use machine learning technologies to solve the problem of ranking.

这样,把推荐系统中提到的CTR、CVR包含进来,甚至还能够把搜索领域的排序之类的都涵盖进来,甚至包括可能要做成类似推荐的模式的问题,例如在翻译软件中会给出的几个翻译备选方案、搜索预想等等。

当然的,说一个未来会有点担心的点,什么问题都用机器学习其实会为未来的进步设限,希望新的研究能多出点新的方法而不要受到现行机器学习方法的限制,不过就结果来看,目前机器学习确实处于统治地位。

2. LTR模型的核心思路

LTR模型的核心思路其实就要归结到LTR的核心了——机器学习,如上述定义所示,因此实质上就是抽象好问题然后套用到机器学习模型中即可。下面是概括的比较好的一个LTR框架。

这个图是不是觉得在哪里见过?我来告诉你在哪里见过吧。《统计学习方法》,第一版19页,第二版第7页。

其实就能看到LTR的本质其实就是机器学习,用训练数据进行训练,得到模型后作用有具体的排序系统中,对每个新来的数据进行预测排序。

既然机器学习大家都已经知道了(默认大家就是知道怎么回事哈,不知道的后台回复“深度学习入门”,告诉你入门路线),那么现在的问题就是怎么定义这个排序问题,使得我们能够使用机器学习,定义这个排序问题,如果把目光放在输入端,即x的内容,是重在研究单个点的重要性,还是研究两者的对比优劣,还是对整个列表(召回池)的排序情况,这就引出了3大学习排序模型派系。

3. LTR的三大方法思路

可以分为pointwise、pairwise和listwise。

3. 1 pointwise

这是目前最为流行的,代表方法就是现在比较常见的一系列CTR模型,对于一堆待排序的item,每个分别将其特征输入,会得到一个打分,这个打分代表着这个东西的重要程度,最后根据每个item的得分进行排序,那么这个y其实就被定义为诸如点击率之类的值,那么最后的排序结果,其实就是根据用户的点击率来排序,当然在搜索领域,可以用相关性的标注来代替,即query和doc之间的相关性。

说的有点玄乎,我们来看一个基于回归的pointwise损失函数,大家就能理解了。

说白了,就是构造一个模型,使得他尽可能去接近这个标签,而这个标签其实就是体现相似度、用户是否点击之类的问题。

但是,这种直接的方法,其实会有一些缺点:

  • 计算损失时,由于不相关或者负类较多会统治整个数据集和模型,需要进行降采样。
  • 标签单一会导致损失函数和具体预测的结果中无法表现相对排位。在这个思路下只能通过策略的方式调整,例如提权。

3.2 pairwise

pairwise顾名思义,其实就是考虑两者的相对关系了,也就是在构造机器学习模型时,输入应该是两个item的特征,最终的输出应该是两个item的大小关系,来看公式可能更加抽象清楚。

对于两个item,$u$和$v$,其实两者的排序只有两种,$u>v$和$v>u$(不会平行,排序必有高下!),因此我们去预测实质上就是预测这两个值:$P(X_u>X_v)$ 和 $P(X_u<X_v)$,那么现在我们来看看这个损失函数:

$h$是我们构建的机器学习模型,$y$是标签,两个$P$是概率,但是在机器学习模型下,就是预测的概率结果了,即$h(u,v)=P(X_u>X_v)$,$h(v,u)=P(X_v>X_u)$,虽然从直观的概率角度$X_u>X_v$和$X_u<X_v$是对立事件,但是在机器学习的预测中,到了预估值层面,这个计算可就不敢保证了,因此在损失函数计算的时候我们要预估双向,这样就能够体现$u$和$v$的双向关系,从而体现pairwise。

3.3 listwise

listwise在pairwise的基础上,不仅要考虑两者之间的关系,而是尝试去考虑整个列表之间的关系,即输入端,我们放入的是所有待排序的item,而在输出端,实质上的输出是其最后的排序,而这个排序实质上是基于内部模型的一个打分系统得到的,有意思的是,这个打分系统里面,不仅会考虑单个被打分item,还会考虑所有输入item的综合信息,这样这个排序就能够体现整个列表下的特性。

有关损失函数这块,我真没有看到非常好的总结起来的方法思路,各个模型都有自己的损失和方法,此处暂时不展开说,有兴趣的可以进一步了解。

4. 来两个简单的例子讲解

都是我之前讲过的吧,这次归结到LTR里面来谈,大家更好的理解,这两个都是pointwise的例子,这里只谈他在LTR中的意义,对具体原理不再赘述。

4.1 电影推荐

之前手把手搞推荐一连几篇和大家讲过一个评分预估模型是怎么从无到有做起来的,想想还有点小刺激,错过的同学可以直接传送过去看看这个系列哈。

最后这里我是利用了很多特征,做了一个打分预估模型,判断用户对该电影的喜爱程度,最后是希望用这个打分情况来为用户进行推荐排序,没错,排序的标准是我用LR模型预估的这个打分,越高分,我会把这个放在越前面,所有抽象来看,这就是一个典型的pointwise思路的模型,每个模型判断一个item,经过预测后得到最终结果,根据每个item的结果从而完成排序。

4.2 query-doc相似度

这个其实前面我也有文章提到,传送门在这里。

搜索中非常要考虑的一个问题就是query要和你给出的doc要尽可能匹配甚至一致,query是用户表达当前搜索需求的重要接口,因此我们就是需要考虑两者是否相关匹配,才能给出我们的搜索排序结果。

在我之前这篇文章的一系列阐述中,其实就在考虑“何为匹配”,那么我们对于越“匹配”的doc,其实就应该摆在前面,数据的标签只有0和1,但是预测肯定就是一个[0,1]闭区间的结果,根据这个预测,我们也可以进行排序,和上面的电影排序类似,实质上就是一种基于某种标准设置的学习排序模型,能够为一个复杂问题提供一种排序方案。

5. 小结

这就是LTR,学习排序,这实质上是一个非常抽象,不为大家所知,但却时常用到的点,希望做推荐、搜索的同学有时间还是可以多少了解一下~

一分一毛,也是心意。