分享到微博 分享到人人 分享到LinkedIn 分享到Email
机器学习在行业应用中的案例研究

原文作者:微软雷德蒙研究院首席研究经理Chris Burges

译者:陈彬

大家好,我是Chris Burges。在我于微软14年以及此前在贝尔实验室14年的科研生涯中,我一直在机器学习领域从事研究,并致力于解决一些行业内应用的相关问题。近年来,随着大家对机器学习兴趣的高涨,特别是其在各行各业的应用,因此无论是从实际角度出发,还是从算法架构本身,都是我们探讨机器学习运作蓝图的大好时机。

2004年,微软研究院和微软网页搜索团队开始合作,以共同提高网页搜索结果的相关性。当时我们使用的是一个名为“飞翔的荷兰人(The Flying Dutchman)”的系统。几个月后,我们设计了一个新系统,它不仅提高了搜索结果的相关性,除此之外,还能使网页搜索的结果排名更容易实现:比起“飞翔的荷兰人”需要花费几天时间和一个机群来完成一个搜索结果排序模型,这个叫做“RankNet”的简单神经网络排序器在一小时左右就可以生成一个排名模型,并只需要一台机器即可实现。

科学、研究、算法设计和产品开发,在未来几年中势必会碰撞出更多精彩的火花。本文中,我希望首先为你们呈现一些它们之间相互作用的特点——即使你没有任何机器学习的先前知识;在接下来的文章中,再为你们解释目前使用的基础算法是如何工作的。我们已经接触到了这个过程中一个基本思想:快速实验的能力。当你有了一个好的想法,理论上你会想要用各种实验方法和证据立刻来实现它。因此即便一个模型刚开始可能不会像现有模型表现的一样好,但如果它能够更快速地被训练和测试,那么整体的处理过程就会加快——仅此一点,就能使这个新的模型在精确度和实现速度上很快超越现有的模型。

近来,一组名为“提高决策树(Boosted Decision Trees,以下简称BDTs)”的模型尤其的受欢迎。BDTs可以灵活解决不同类型的预测任务,例如:

  • 排序:比如将最为相关的网页搜索结果置顶;
  • 分类:比如判断一封邮件是否为垃圾邮件;
  • 回归分析:比如预测你的房屋将会卖出的价格。

灵活性听起来就是很赞的,但BDTs究竟有多好用呢?由微软内部收集的机器学习服务使用记录显示,仅在过去一年中,BDTs在全微软的训练运行中使用超过67万次。这个数据虽然在一定程度上有所放大,因为实验者在实验中通常会进行模型选择,即他们会训练多个模型,而每个模型都有不同的参数设置,并使用一个支持的数据集来选择最佳模型。但是这个数据仍给出了一个大致的数量级。那么这仅仅是微软对BDTs的偏爱,还是BDTs在其他地方也广受欢迎呢?2010年,雅虎举办了一个关于最好的网页搜索排名算法的比赛——“Learning to rank challenge”,超过1000个团队报名参加了这个挑战。最终的排名非常接近,微软团队不负众望赢得了冠军。但对我来说最有趣的收获是,前5名的系统都不约而同地选择了决策树组合,并在不同形式上进行了优化提升(事实上,我们的系统是BDTs和神经网络的集成)。所以,如果你正在考虑通过训练一个固定模型来解决预测任务,BDTs一定会是你的不二选择。

让我们用网页搜索排名作为一个典型的研究/产品周期开发的案例。在研究中最大的挑战是如何提出对的问题,并对你的想法得到很好的验证。要解决这两个挑战,从与人们息息相关的实际问题出发是不失为一个好方法。

当你对必应发出查询请求的时候,我们会高效地扫描我们索引中的所有文件。大量的候选文档会被一些快速的过滤器淘汰掉,例如,我们可能不会考虑和你的查询内容没有任何相同关键字的文件)。这样就将候选文档的数量减少到了一个可管理的规模。对每一个候选文档,我们会生成几千个特征来表示它们和你查询内容的相关度。举个例子,一个特征可能是“文件的题目是否含有查询中的词语”,或者更高级一些——“文件是否涉及任何查询中提到的实体”等。而排名模型的任务就是把特征列表映射到一个对查询相关的文档进行编码的分数。通过这个过程,再结合开始的过滤处理,我们就可以按照你查询内容的相关程度,对网络上所有的文件进行排名。我们过去使用一个叫做“NDCG”的单一指标来衡量搜索结果的质量(现在,已经有多个指标用于用户的满意度测评的尝试)。给定查询的NDCG值,取决于整个的排名名单,其取值介于0和1之间。其中1表示对于特别的标记数据集的最佳排名,我们称之为D。

那么,我们是如何从RankNet发展到BDTs的呢?尽管RankNet在当时是个很大的突破,但它也并未很好的适应我们的任务。特别是它只是尝试得到正确文档的配对排序,却忽略了NDCG的测量。所以如果对于一个给定的查询内容,你有一对从D来的文件,其中一个已经被标记为“完美符合”查询内容,而另一个则被标记为“无关”文档,RankNet仍会做同样的工序把“完美符合”的文档放到“无关”文档的前面,因为这符合将“好”置于“不那么好”前面的规则(需要补充的是,这并不是我们实际使用的标签)。而创建模型来直接优化NDCG的问题是,直接设定NDCG在数学上的表现是不理想的——排名模型会分配给每个文件一个决定其排序的分数,而分数是连续不断变化的,就会导致NDCG随之发生间断性的变化。解决这个问题时,我们想到,对于一个神经网络模型的训练,我们不必提供优化函数的具体值,只需要一个梯度即可,它的值会表明当神经网络的输出分数改变的时候,函数随即会如何变化。对于排名任务,你可以将这些值当做一些小箭头或者牵引力,拉动每个文档在排名列表中上下移动。我们可以模拟这些在一对文件中小股的力,当NDCG改变时,交换这两个文件。那么对一个给定查询,将其每一个文件的所有力相加,就可以使用这些加和的力作为不同的梯度来训练神经网络。于是,LambdaRank就由此诞生了,虽然它仍是一个神经网络模型,但比RankNet更好的实现了相关性。之后我们在这个想法的基础上延伸,用一个叫做“LambdaMART”的算法来优化树状模型,使得BDTs超越了神经网络模型,其中两个优点是:

1. 更自然地处理较大范围内的不同特征;

2. 更快的训练时间,从而加快了整个实验的周转时间。

后来,由Ofer Dekel带领的团队成功使 BDTs的训练速度比神经网络快了几乎两个数量级,并能处理更大的数据集。

简而言之,这就是我们如何爱上BDTs的。整体的过程是一个良性循环,工程和产品的需求推动着研究的推进,而研究又为产品开发创造了新的机遇。对上述三个发展阶段的后两个——RankNet和BDTs而言,它们最主要的贡献是提供了更快地处理包含更大数据量的实验的能力。尽管我在这篇文章中的注意力重点放在了排名上,但应该注意的是,这不仅仅是一种微型但重要的排名算法,而是应用到必应搜索中,切实提高了其搜索质量的新突破。