本文收录在推荐系统专栏,专栏系统化的整理推荐系统相关的算法和框架,并记录了相关实践经验,所有代码都已整理至推荐算法实战集合(hub-recsys)。

一:背景介绍

在互联网搜索诞生之初,检索模型所依赖的特征是相对简单的,这些特征的设计主要是基于查询词与文档的匹配程度,所用到的信息比如TF-IDF等。在互联网不断发展的今天,更多复杂而有效设计的特征被应用到检索计算里面,比如查询与文档深层次匹配,网页pagerank等,人工参数调整已经不能满足需求,此时机器学习被应用到这项任务中,同时由于互联网海量数据的特点,比如展现点击日志,基于大数据的learning to rank逐渐成为热门的领域。

二:有监督机器学习排序原理框架

1.
训练阶段:

测试阶段:

在训练阶段输入是n个query对应的doc集合,通常数据来源有两种,一种是人工标注,即通过对实际系统中用户query返回的doc集合进行相关性标注,标签打分可以是三分制(相关,不相关,弱相关),也可以是更细的打分标准。另外一种是点击日志中获取,通过对一段时间内的点击信息进行处理获得优质的点击数据。这些输入的doc的表示形式是多个维度的特征向量,特征的设计也尤其重要,对网页系统检索而言,常用的有查询与文档匹配特征,其中细化了很多角度的匹配,比如紧密度匹配,语义匹配,精准匹配等等,还有通过将文档分为不同域后的各个域的匹配特征,关键词匹配特征,bm系列特征, 以及通过dnn学习得到的端到端的匹配特征。对各个垂直领域比如图像搜索而言,在网页搜索特征的基础上,需要利用图片相关性特征,图片标签等一系列垂直特征去加强学习效果。

通过排序模型的不断迭代,当一个用户输入一个query之后,排序系统会根据现有模型计算各个doc在当前特征下的得分,并根据得分进行排序返回给用户。

1.
排序算法

常见的LTR学习将学习任务分为三种策略,即pointwise,pairwise,Listwise三类。其中pointwise将其转化为多类分类或者回归问题,pairwise将其转化为pair分类问题,Listwise为对查询下的一整个候选集作为学习目标,三者的区别在于loss不同。

1)
Pointwise

一种思想是将query与doc之间的相关程度作为标签,比如标签有三档,问题就变为多类分类问题,模型有McRank,svm,最大熵等。另一种思想是将query与doc之间的相关程度作为分数利用回归模型拟合,经典回归模型有线性回归,dnn,mart等。

输入:doc 的特征向量

输出:每个doc的相关性分数

损失函数: 回归loss,分类loss,有序回归loss

2)
Pairwise

Pairwise的方法是将文档组成文档对,不单考虑单个文档,而是考虑文档组对是否合理,比如对于query 1返回的三个文档 doc1,doc2,doc3, 有三种组对方式,<doc1,doc2>,<doc2,doc3>,<doc1,doc3>。当三个文档原来的label为3,4,2时,这样组对之后的三个例子就有了新的分数(表达这种顺序是否合理),可以利用这种数据进行分类学习,模型如SVM Rank, 还有RankNet(C. Burges, et al. ICML 2005), FRank(M.Tsai, T.Liu, et al. SIGIR 2007),RankBoost(Y. Freund, et al. JMLR 2003)。

Pairwise的一个问题是其对不同分数的doc区分度是一样的,然而在信息系统里面用户更倾向于点击最前面的结果,所以应该着重将相关性最高的排在前面。并且在现有的各类模型中并非以排序性能作为最终目标,将会导致最终排序效果并不理想。

输入:doc pair <d1,d2>

输出: 偏向得分 {-1,+1}

损失函数:pairwise分类loss

3)
ListWise

Pointwise将训练集里每一个文档当做一个训练实例,pairwise方法将同一个査询的搜索结果里任意两个文档对作为一个训练实例,Listwise方法是将每一个查询对应的所有搜索结果列表整体作为一个训练实例,

常见的模型比如ListNet使用正确排序与预测排序的排列概率分布之间的KL距离(交叉熵)作为损失函数,LambdaMART的框架其实就是MART,主要的创新在于中间计算的梯度使用的是Lambda,将类似于NDCG这种无法求导的IR评价指标转换成可以求导的函数,并且富有了梯度的实际物理意义

输入:doc 集合{d1,d2….}

输出:所有doc的打分或者排列顺序

损失函数:IR评价机制如NDCG,MAP

LambdaMart由于是基于MART框架,在学习的过程中可以通过特征采样和样本采样来降低过拟合风险。

3
实际应用

Learning to rank的算法已经被应用到图片检索系统中。训练数据主要来源于标注数据集,我们把query与图片的相关性标签分为三档,即弱相关,相关与不相关。在query的选择上,通过对近六个月的query进行统计挖掘,将pv次数少的长尾query作为重点目标,在实际中也是这类的query效果优化需求更高。目前标注数据一共四万个query,每个query包含30个返回结果,其中,train集,val集以及test集合的比例为4:1:1。特征的构建一方面基于文本检索系统本身的特征,主要是前面所提到的各种文本域的匹配信息,还加入了包括query与站点匹配,query与图片匹配,图片与所在网页文本匹配等基于图片和站点挖掘的各种信息。

训练采用5-fold交叉验证,在实验中尝试采样特征以及采样数据来降低过拟合,并且调整树和叶子节点数目获得最优参数。下面给出在部分实验数据上的效果(20000
query)。

这里仅给出了LambdaMart与Mart的效果对比,同时在LambdaMart与其他LTR算法的对比实验中也都是效果更好,这里就不一一列出了。

上面讲了多种LTR算法,而在实际应用中通常会根据任务目的调整算法,例如Yahoo在2016年的论文《Ranking Relevance in Yahoo Search》中core ranking 模块中利用GDBT+logistic
loss,核心思想是对于正样本,保证梯度一直是正的,而对于负样本,保证梯度一直是负的.通过这种策略,减少了40%的bad
url,并且在此基础上调整了响应函数,相当于对于不同的label具有不同的loss权重,称它为LogisticRank。

下面是论文中提到的几种排序策略对比的对比:

可以看到logisticRank可以提高最相关的结果的排序,这也符合用户对于检索系统的要求。

这种方法在实际中的效果也取决于当前训练数据,我们利用已有的标注数据基于论文提到的算法进行实验,,然后对实际系统中的top k结果进行重排,发现排序效果并没有比lambdamart更好,原因是这种方法的目的是消除候选doc中的负例,而topk中明显不好的负例占比不大,而因此训练样本最好是query返回的全量数据,但是这样标注代价太大,需要数据的长期积累。

4.Risk机制

现在许多改善搜索结果质量的策略被相继提出,这些技术通过设计高级排序特征或者利用复杂的学习排序去提升整体平均效果,然而,尽管这些策略相对于基准线来说提升了搜索结果的平均效果,但一个很重要的因素却被忽略了,那就是稳健性,也就是说虽然在平均整体上有提升,但是许多query上的表现却大打折扣,这在真实检索场景中是不适用的。因此,系统有效性和稳健性应该同时作为训练目标,目的是尽量降低最严重的排序失误,我们需要在两者之间找到一个平衡。

Lidan Wang ,Paul N. Bennett以及Bekir
Taner Dincer等人在这个方向进行了探索,提出了risk的概念。

下面我们的一个直方图统计,帮我们更好的理解这个问题。

图中为query经过LTR模型之后相对于baseline的NDCG变化情况,正值代表相对于baseline效果提升,负值代表相对于baseline效果下降。 其中负值的部分就是所谓的risk,更进一步说就是随机选择一个query,可预见模型在此query上的搜索结果质量的下降幅度。正值的含义称为risk,就是相反的概念。因此整体效果的提升可以用公式表达:

Reward – Risk +Baseline

因此优化Reward和Risk,可以直接改善搜索质量。更好的系统应该是能够尽可能降低risk,同时又能保证整体搜索质量提升。

上面表格是risk模型在微软数据集上的表现,a控制模型训练过程中risk控制程度,可见随着控制程度加大,loss>20%的query数据显著下降。

在我们自己的数据集上的实验效果如下:

因此通过加入risk机制,可以灵活的调节模型在query上的表现。

论文中一共提到了三种优化方法,Urisk,SARO,FARO,后两种是在第一种的基础上加入了自适应调节策略,它们三者都是优化中心都是LambdaMART训练过程中的梯度,也就是传说中的deltaNDCG。

笔者基于RankLib-2.3实现了以上三种策略,开源代码地址为 ilovedoudou/Risk-Sensitive-LTR。

5结语

目前LTR不仅被应用到检索系统中,也应用到所有与排序相关的各种需求中。与此同时,在这方面的研究一直是信息检索领域的热点和难点。本文中所提到都是有监督的,但是标注耗费人力物力,并且标注的结果也不一定满足最终用户的需求,因此近几年无监督的Online Learning to Rank for Information
Retrieval 在IR领域越来越被关注,它是基于用户点击模型以及交互行为的在线学习排序系统,也是之后我们的研究方向。

排序学习(Learning to rank)综述相关推荐

  1. 【学习排序】 Learning to Rank中Pointwise关于PRank算法源码实现

    最近终于忙完了Learning to Rank的作业,同时也学到了很多东西.我准备写几篇相关的文章简单讲述自己对它的理解和认识.第一篇准备讲述的就是Learning to Rank中Pointwise ...

  2. 机器学习排序之Learning to Rank简单介绍

     机器学习排序之Learning to Rank简单介绍 标签: Learning to Rank学习排序PointwisePairwiseListwise 2015-01-03 21:50 23 ...

  3. 【学习排序】 Learning to Rank 中Listwise关于ListNet算法讲解及实现

    前一篇文章"Learning to Rank中Pointwise关于PRank算法源码实现"讲述了基于点的学习排序PRank算法的实现.该篇文章主要讲述Listwise Appro ...

  4. LTR学习排序 Learning to Rank 小结

    出处:http://blog.csdn.NET/nanjunxiao/article/details/8976195 学习排序(Learning to Rank) LTR(Learning toran ...

  5. Learning to rank在淘宝的应用

     Learning to rank在淘宝的应用 作者:仁重 浏览量: 8066 评论数: 0 作者:仁重 (一淘及搜索事业部-搜索技术-算法技术-主搜索与商城) 前言 排序中我们需要解决的是什么样 ...

  6. Learning to Rank中Pointwise关于PRank算法源码实现

    [学习排序] Learning to Rank中Pointwise关于PRank算法源码实现 标签: 学习排序PRankPointwiseLearning to Rank代码实现 2015-01-28 ...

  7. Learning to Rank 中Listwise关于ListNet算法讲解及实现

     [学习排序] Learning to Rank 中Listwise关于ListNet算法讲解及实现             版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习, ...

  8. learning to rank

    "Yahoo发起了一项学习排序竞赛(Learning to Rank Challenge)作为ICML 2010大会的一部分,任何人可以以个人名义或组队(最多10人)参赛.竞赛3月1日开始, ...

  9. Learning to rank的讲解,单文档方法(Pointwise),文档对方法(Pairwise),文档列表方法(Listwise)

    学习排序(Learning to Rank) LTR(Learning torank)学习排序是一种监督学习(SupervisedLearning)的排序方法.LTR已经被广泛应用到文本挖掘的很多领域 ...

  10. 排名算法(三)--排序学习

    转自:https://blog.csdn.net/anshuai_aw1/article/details/86018105 Learning to rank(简写 LTR.L2R) 也叫排序学习,指的 ...

最新文章

  1. 从工程中删除Cocoapods
  2. 课时 30:理解 RuntimeClass 与使用多容器运行时(贾之光)
  3. JavaScript——易班优课YOOC课群在线测试自动答题解决方案(五)简单插件
  4. 深度学习:优化器工厂,各种优化器介绍,numpy实现深度学习(一)
  5. 实现pxe的自动化安装
  6. 信息学奥赛C++语言: 单词的长度
  7. maven学习(3)
  8. Eclipse+Maven+Spring+CXF 构建webservice 服务
  9. mybatis中resultMap的几种用法
  10. 归并排序——Java代码实现
  11. 局域网内两台电脑无法共享文件问题
  12. pink老师世纪佳缘作业
  13. word文档中统计总页数_如何在Google文档中查找页数和字数统计
  14. 韩国驾驶照换中国驾驶照
  15. micropython 串口 wifi_MicroPython实现wifi干扰与抓包
  16. 支持向量机(SVM)优化算法原理超详细证明过程,几何的角度证明互补松弛条件
  17. 机器学习3:——Pandas——3:文件读取和存储
  18. 怎么把excel文件转成dta_如何将excel表格数据转化为dta格式-怎么把dat文件转换成Excel文件,里面的数据格式要......
  19. ORA-19706和_external_scn_rejection_threshold_hours的前世今生
  20. 【PHP】高德地图经纬度和地址转换

热门文章

  1. SiTime硅晶振的弹性
  2. 【虚幻引擎UE】UE4/UE5 功能性插件推荐及使用介绍 2
  3. centos7 最小安装 ELK7.9.0 生产部署 elasticsearch7.9.0 + kibana7.9.0 一键部署
  4. Untiy3D使用HighlightingSystem插件实现鼠标移动到物体物体高亮效果
  5. 微信小程序 删除数组中指定的对象
  6. 【AI数学】Group Normalization(何恺明ECCV2018最佳论文提名)
  7. 一些常用编程辅助软件
  8. oracle中multiset,集合操作符Multiset
  9. 无心剑英译王建《十五夜望月》
  10. 前端开发编辑器大集合,选择困难症的速看