0717-7821348
新闻中心

欢乐彩app

您现在的位置: 首页 > 新闻中心 > 欢乐彩app
欢乐彩-一文看懂机器学习排序(Learning to rank)理论与实战(附学习教程
2019-05-15 22:11:57

机器学习排序(Learning to rank)将查找转化为机器学习问题,在本文中,我想找出查找与其他机器学习问题不同的原因,怎么将查找排名作为机器学习或许是分类和回归问题?咱们将经过两种办法,对机器学习排序办法的评价有个直观的知道。

衡量查找的好坏

方针是查找和经典机器学习问题的底子差异,更详细地说,怎么量化查找的好坏。例如股价猜想体系的精确性,取决于咱们有多少猜想数据是来自实在的公司股价。假定咱们猜想亚马逊的股价是123.57美元,实践上是125美元,咱们会说这十分挨近。假定按均值来说,咱们的猜想跟实践股价的差错在1美元到2美元之间,咱们能够认为体系猜想的很好。

这种状况下的差错咱们称之为残差,即实践值与猜想值之间的差异:实践值-猜想值。(实践上,残留^2才是最小化,但在这儿坚持通俗易懂。)

练习期间,回归体系经过怎么量化好坏来得到最优解。咱们能够测验公司不同的量化特征,例如职工人数、收入、手头现金、或许其他任何有助于削减股价差错的特征。它或许会使最小二乘回归(least-squares regression)学习为线性公式,例如:股价= 0.01*职工人数+0.9*收入+0.001*手头现金,作为削减差错的最佳办法。

查找成果的好坏(或介于两者之间)却彻底不相同。股价猜想体系彻底是为了削减实践值-猜想值的差错,但查找体系是尽量挨近查找查询的抱负排序。换句话说,方针是减小抱负排序到成果项调集的间隔,排序的优先反映出查找者感知查找的好坏。

例如,电子商务用户查找“dress shoes”,咱们界说一个大略的抱负排序:

  1. Best-selling dress shoes
  2. Low-performing dress shoes
  3. Other kinds of shoes
  4. Ladies dresses (if at all)

以此咱们能够幻想一些场景,并猜想他们间隔抱负成果有多远。至少需求向“dress shoes”的查找者在展现衣服前优先展现一些鞋子 - 但这一点都不完美。这就像猜想亚马逊的股价是150美元而不是125美元:下面的成果挨近吗?

  1. A pair of tennis shoes
  2. Meh Dress Shoes
  3. A ladies dress

另一方面,优先于其他鞋子并在best-selling dress shoes前一个方位展现meh dress shoes,这样或许会十分挨近,但也并不完美。这或许与猜想亚马逊的股价为123美元恰当:

  1. Meh pair of dress shoes
  2. Best-selling pair of dress shoes
  3. Tennis Shoes

正如你看到的查找,并不是实践值-猜想值,而是尽或许挨近每个用户查询的最佳排序。NDCG是一种衡量查找成果和抱负排序间隔的方针。其他一些方针衡量查找成果的好坏各有利害,这些方针简直总是取值介于0(最差查找成果)至1(最好查找成果)。

此外,这些方针不能仅是朴实的差异或修改间隔类型的核算。由于用户更重视顶部的查找成果,因而要获取这些方位需具有优先权。因而,查找方针一般包括方位差错,这意味着前几个成果违背抱负时,比底部成果违背更糟糕,NDCG内置了方位差错。

尽管有一些可用的方针 ( 例如 ERRMAP等 ),在本文中我只把 “NDCG”作为实在相关性方针的缩写。

用机器学习生成ranking函数

经典的回归问题构建了一个用一组特征直接猜想的函数 f。咱们尽量削减实践股价- f(公司特征)。机器学习排序的方针是构建不直接猜想的ranking函数。相反,它用于排序-咱们供给一组抱负的次序作为练习数据,ranking函数需求两个输入,即query查询和document文档,并为每一个查询正确排序的文档分配一个分数。

重述以上一点更多内容:

股市:关于公司x,生成函数f(x),使y - f(x)最小化

查找:关于文件d,查询q,生成函数f(d,q),当f(d,q)降序排序时,使一切文档的NDCG最大化

咱们来看一个大略的比方,看看咱们的意思。作为数据科学家/查找工程师,咱们认为以下查询/文档的特征对咱们的电子商务查找有协助:

  • 产品标题中关键字的TF * IDF分数:titleScore(d,q)
  • 产品描绘中关键字的TF * IDF分数:descScore(d,q)
  • 产品的销量:numSold(d)

机器学习进程或许会得到一个文档评分公式,如:

f(d,q)= 10 * titleScore(d,q)+ 2 * descScore(d,q)+ 5 * numSold(d)

经过一组测验查询(经过这样的模型,咱们能够得到尽或许挨近用户抱负的排序)能够最大极限地进步NDCG

大多数机器学习排序的复杂度一般来自于调整的问题,以便能够运用其他机器学习办法。这些往往分为三种:单文档办法(point-wise),文档对办法( pair-wise)和文档列表办法(list-wise),咱们将在下面介绍。咱们将扼要介绍几种办法,并考虑每种办法的利害。

单文档 机器学习排序(point-wise learning to rank)

查找的“练习集”看起来有点像一般的机器学习练习集。单文档学习排名根据这种状况,所以让咱们扼要回忆一下查找练习集的姿态。查找练习集的办法为在某个查询下带得分的文档,并称为判别列表,以下是一个判别列表的比方:

得分,查询,文档

4,dress shoes,best_selling_dress_shoes

3,dress shoes,meh_dress_shoes

...

0,dress shoes,ladies_dress

0,dress shoes,toga_item

正如你所看到的,十分相关的文档比方best_selling_dress_shoes的得分为4,而彻底不相关的文档(toga_item)得分为0。

单文档学习排名不重视直接优化每个查询的排名。相反,咱们仅仅测验猜想相关性得分。咱们运用某种回归来创立包括文档d,查询q的排序函数fd,q)。就像股价的比方相同,咱们企图尽量削减残差。咱们期望f(toga_item,“dress shoes)得分为0,和f(best_selling_dress_shoes,“dress shoes”)得分为4。

在练习和评价期间,咱们单纯将残差 y - f(d,q)最小化(这儿的ydq的得分)。在这种状况下,假定咱们的排序函数f给出了上述0分的文档为0.12分,4分的文档为3.65分。只看残差的话这好像做的很好。假定一切文档得分均匀不违背0.5分以上,那么咱们认为每个查询的NDCG也被最大化,也就是说,咱们认为假定咱们能够创立一个只回来得分的排序函数,咱们应该能够得到挨近用户期望的抱负排序。

但表象或许是哄人的,单文档学习排名的一个问题是取得正确排序的头部项一般比判别列表尾部的含糊项愈加重要。基本上一切认知和方位差错在最大化衡量(如NDCG)下都会被疏忽。

实践上,一个常常交流精准相关项和不太相关项,但能够精确地猜想第50页较低的相关性等级的模型并不是很好。买家在前几个成果中看了些牵强相关的项目且没有被其感动时,所以他们离开了。

更为灾难性的是,当你考虑仅发生在详细查询中的联系时会呈现另一个问题,单文档办法会铲除查询分组,疏忽这些查询内的细微差别。例如,一个查询与标题字段上的相关性得分有很强的相关,而另一个查询与描绘字段得分相关。或许某个查询的“good”标题匹配得分是5,而另一个查询的“good”标题匹配得分是15,这些状况是实在存在的:不同匹配中文档频率不一致或许导致这些场景。

因而,一般来说,单文档办法的履行作用欠安,咱们将持续研讨那些不铲除查询分组,而是测验运用排序函数直接优化每个查询的排序的办法。

文档列表办法(LIST-WISE),文档对办法(PAIR-WISE)

单文档学习排名以尽量削减抱负与实践相关程度之间的差异。其他办法界说了不同的差错了解,更挨近直接优化每个查询的抱负次序。咱们来看一下文档列表(LIST-WISE)和文档对办法(PAIR-WISE)机器学习排序解决方案的两个比方,以便更挨近于结合方位差错和包容每个欢乐彩-一文看懂机器学习排序(Learning to rank)理论与实战(附学习教程查询细微差别的才能。

直接用w/ListNet优化列表

文档列表学习感觉像最朴实的机器学习排序办法。它十分直接地界说过错:当时ranking函数的列表间隔抱负值的间隔有多大?例如,这样的一种办法是经过检查给定次序的摆放概率。 基本思想是界说一个函数,该函数核算按给定的相关性得分的摆放是用户实在寻觅的概率。假定咱们从判别列表中将“得分”作为排序,第1个成果的得分高于第2个,这样将取得最高概率。可是,从判别列表中获取的相关性等级关于当时用户当时的地址、时刻、上下文有或许是不正确的。因而,单个较低分项在高分项上不或许成为完美的相关性排序,或许这才是用户此时此刻实践想要的,最低相关性得分排榜首个的重摆放表是极不或许的,摆放概率挨近零。

相关于核算每个列表排序或许的过错,仅检查摆放中的榜首个项关于查找是“最佳”的概率来近似摆放优先级在核算上是愈加可行的。这被称为“榜首”概率,它查找单个相关性分数以及查询的每个其他相关性分数,以核算该项将是榜首的概率。正如你所意料的那样,较高的得分的相关性项将取得更高的概率排在前面,较低的得分项在该用户相同上下文时刻地址下不太或许排在前面。

文档列表办法ListNet提出最小化练习集相关得分与神经网络中权重之间的穿插熵。听起来像胡说八道,但实在重要的是经过最小化的error函数,开发一个直观的比方来看看它怎么作业,如下面的伪python所示:

def error():
error = 0
For each query
For each doc:
error -= TopO欢乐彩-一文看懂机器学习排序(Learning to rank)理论与实战(附学习教程neP(doc.grade) * log( TopOneP(f(doc, query)))

这儿f是咱们正在优化的ranking函数。 TopOneP是给定得分或分数排榜首的概率。

首要,咱们来看榜首项TopOnePdoc.grade)。你想想这儿发生了什么,假定榜首名根据判别列表得分的概率高,那么第二项logP ...)将添加更多权重,换句话说,榜首项能够被认为是根据判别列表中的得分该项的优先级。更高得分项有更多榜首的概率:正是咱们寻觅的方位差错!

现在看第二个,logTopOneP ...)。回想一下, log(TopOneP = 1)为0,当TopOneP挨近0时logTopOneP <1)越来越负。因而,假定TopOneP挨近于0,而且因而log越来越负,则整个项越来越负。负越多越欠好,由于error-=(big negative number)使过错变成更大的正数。

综上所述,当(1)该项在判别列表很重要时(TopOneP(doc.grade)很高),而且当咱们的rangking函数fTopOneP很低时,会发生更多的差错。明显这是欠好的:在判别的基础上,实在需求靠前的,应该用f把它排到前面。

ListNet中的方针是经过迭代更新f函数中的权重来最小化差错。这儿我不想深化解说,由于上面的点更为重要。参看这篇文章❶ 取得更多信息以及怎么运用差错的界说来核算梯度(怎么更改特征的权重)以尽量削减差错。

运用RankSVM优化文档对办法

文档对机器学习排序(pair wise learning to rank)经过最小化在查找成果中乱序成果数, 一欢乐彩-一文看懂机器学习排序(Learning to rank)理论与实战(附学习教程个详细方针:Kendall's Tau衡量了查找解决方案中有序对的份额。文档对学习排序的一种办法是对查询进行分类,使得项目“有序”或许“乱序”。例如,你或许会发现,当对特定的查询集进行排序时,标题得分更高的其出售事项总数反而比较低。

Thorsten Joachims在这篇文章❷ 中介绍了一种盛行的文档对机器学习排序办法RankSVM,还在Fabian Pedregrosa的博客文章中以Python办法完成,且愿意我在这篇文章借用他的图。

幻想一下咱们有两个查询,或许以咱们的“dress shoes”查询,另一个是“t-shirt”。下面的图表y轴为标题得分特征,而x轴或许是销量。咱们将“dress shoes”的每个判别制作为三角形,并将“t-shirt”的每个判别制作成圆形。色彩越深的形状越相关。

咱们的方针是发现一个类似于上面图画中的w向量的函数,将最挨近于正确的查找成果排序。

事实证明,这个使命与使一个项好于另一个项的分类问题是相同的,适用于支撑向量机(Support Vector Machine SVM)的二元分类使命。假定dress_shoes比meh_dress_shoes更好,咱们能够将该排序标记为“更好”或许“1”。类似地,meh_dress_shoes在dress_shoes之前标记为“更差”或“-1”。然后,咱们能够构建一个分类器来猜想一个项或许比另一个更好。

这个分类使命需求更多底层特征值,想想“更好“的意义是什么,这意味着dress_shoes和meh_dress_shoes之间存在某些差异而将它归类为更好。所以RankSVM在此增量:itemA的特征值减去itemB的特征值上进行分类。

作为一个比方,只重视单一特征“销量”,咱们或许会看到dress_shoes出售为5000,而meh_dress_shoes的出售量只要1000。所以发生的4000“差异”在练习进程中将会是一个特征。咱们将这个差异作为一个SVM练习样本:(1,4000)。这儿1是咱们猜想的“更好”的标签,而4000是咱们在SVM中用作特征的“销量”增量。

在特征空间中制作每个成对的差异来创立两个分类,如下所示,能够运用SVM来找到两个分类之间的恰当断定鸿沟:

当然,咱们不需求一个断定鸿沟。 咱们需求一个方向向量表明这个方向“更相关”。 终究,与该断定鸿沟笔直的向量供给了ranking函数的线性权重份额:

这听起来就像变成简略的线性回归,究竟咱们只取得特征权重和线性ranking函数。 可是假定你还记得单文档办法的评论,在单个查询中你有时会具有查询内依赖性/细微差别。 特征中的一个好的标题在“dress shoes”得分为“5”,比较在“t-shirts”的得分为“15”,“RankSVM” 所做的是经过重视单个查询中指出“标题得分越高,对应查询中相关性越高”的大略的感官中的分类增量。

在图形中,你能够看到,运用线性回归运转上述相同的数据:

RankSVM与List-Wise办法

你能够看到, RankSVM好像依然创立一个直接的、线性的相关性。咱们知道实际往往是非线性的。运用SVM,能够运用非线性内核,尽管线性内核往往是最受欢迎的。 RankSVM的另一个缺陷是它只考虑到文档对的差异,而不考虑方位差错。当RankSVM中的项无序时,无法优先确保头部项正确的一起疏忽底部项的不精确。

尽管文档列表办法往往更精确,而且包括方位差错,但练习和评价的本钱很高。尽管RankSVM往往不那么精确,但该模型很简略练习和运用。

由于其简略性,RankSVM能够轻松地为特定用户或部分查询/用户构建模型。能够幻想将查询分类到不同的用例中。或许关于电子商务,有些查询咱们能够肯定地说是错别字。而其他的是咱们知道的广泛的类目查找查询(如“shoes”)。

假定咱们相应地对查询进行分类,咱们能够为每种类型的用例别离构建模型。咱们乃至能够组合不同的SVM模型。例如,由于模型是一组线性权重调集,咱们能够将模型绑定到特定的用户Tom,并将其与Tom正在履行的查询绑定的模型相加,搜“dress shoes”回来dress shoes,咱们觉得Tom会很喜欢。

定论

首要的定论是不管挑选什么样的模型,理解该模型需求优化什么,需求尽量削减什么样的差错?

你了解了单文档办法怎么优化判别的残差,以及怎么为不抱负。 RankSVM履行一个更简略的优化来消除无序对,但这宫小柒也有问题,由于没有考虑到方位差错。风趣的是,ListNet的摆放概率和榜首概率给相同有用的好答案留有余地。我个人认为,假定这种办法用于多样化查找成果,能够为当时用户展现许多有用的假定。

当然,完毕之刻,假定咱们不选取正确的特征来练习咱们的模型,模型的类型或许不是很重要!特征选取,创造,生成和规划,往往才是最难的一部分,而非模型的挑选。

最终,柠檬为我们预备了一些机器学习视频教程,期望能够协助到我们!

收取办法:转发文章+私信小编“材料”即可收取全套的机器学习教程材料!