范德萨发而为
全部博文(392)
分类: 大数据
2015-05-06 16:50:35
作者:仁重 (一淘及搜索事业部-搜索技术-算法技术-主搜索与商城)
前言
排序中我们需要解决的是什么样的问题?怎么样把用户想要的,好的商品排到前面;怎样调节不同卖家的流量;给质量好,但价格不便宜的商品更多的流量,来引导市场更加规范。需要解决的问题很复杂,但是排序结果好坏难以评判。
对于搜索结果好不好的问题,通常的做法是把搜索结果的每一条分为5类:
bad(差)
fair(一般)
good(好)
excellent(非常好)
perfect(完美)。
对搜索的结果进行人工评价,并且对这5类计算ndcg,来判断排序结果的好坏。
这是非常粗放的一个评判标准,并且需要大量的人工对排序结果进行标注。这种方法费时费力并且人对搜索结果的评价很难标准化。所以对于新加入的特征做一个新的排序,在实际应用中,我们通常会采用AB test的方法在线上进行对比测试。这样绕开的对搜索结果的直接判断,间接的通过用户反馈来评价新排序的好坏。
回到问题的本质,我们需要知道排序结果的好坏,整体的好坏,是很难得到的,但是对于一对(pair)商品的好坏,即一个宝贝是否比另外一个宝贝好,我们是比较容易判断的。如果构造出和线上分布基本一致的宝贝对集合,只要在这些集合上的商品对排序和我们期望的是一致的,就可以认为排序是较好的,这样把商品的好坏和排序的好坏定义更加明确,更有利于我们去优化排序。有了商品对的好坏,我们在淘宝的搜索上使用learning to rank技术来实现了对商品对(pairwise)优化来优化排序。
Learning to rank(ltr)中文翻译为排序学习,用机器学习的方法来解决检索系统中的排序问题。当特征大到一定的规模,或排序的分类到了一定的规模,再使用人工规则就很难达到一个较好的状况,这种情况就需要使用机器学习的方法来帮助我们优化排序模型。
为什么要在淘宝使用learning to rank。
首先得简单介绍一下淘宝搜索的的发展历史,从数据库到搜索引擎,解决了商品量较大的问题;那时商品排序完全依靠下降时间来排序,随着商品量的不断增加,排序后的效果越来越差,就先后加入了类目相关性与文本相关性,商品人气分;再后来为了平衡卖家流量,加入了卖家分;再后来为了更好的用户体验,加入了个性化,图像质量等因素。
类似类目相关性,文本相关性在搜索排序模型中都称之为特征,每个特征会根据不同的模型或者规则生产一个0~1的分数,这些分数通过线性加权的方式对最终的排序进行作用,这些特征的权重通过不断的进行AB test的方法找到较优的一组。
一步一步走来,现在淘宝搜索的排序模型有他一定的必然性。但是,每次模型的修改权重参数都需要进行较长时间的调整,需要结合人工的经验预估出一些比较合理的参数,再不断的通过用户反馈进行测试,找到较优的一组参数。这样做有以下缺点:
1.测试时间较长。
2.测试有效,一般可能不能达到一个最优化的效果。
3.在不断的优化过程中,对已有特征参数的调整常常被遗漏。
所以,我们通过learning to rank的方法,通过机器学习模型来自动调整这些参数。项目命名为Jazz,定位是自动调整特征权重参数,但不产生新特征。之后新加入的特征,都通过这个模型来确定它最优的参数。
优点,缺点,难点
淘宝的ltr
淘宝的ltr主要有以下几个特殊之处,
一、一般来说,ltr的特征都是很基础的特征,例如一个网页排序中经常会被提到的特征有:
与一般意义上的ltr不同,在淘宝已经积累了不少较强的统计意义的特征。这些用到的特征经过不断优化,在淘宝已有的排序上表现的已经较好。我们再对齐进行优化,就不需要像网页排序那样从头开始发掘特征,我们在这个基础上来做ltr,使用的特征自然而然是原来使用的这些特征,对他们在加权参数上进行调整。更像是对排序参数的优化。(当然这只是第一步,之后会根据效果来新增特征。)
二、使用统计的用户反馈的行为来代替人工标注。很多ltr的论文都提到需要人工将排序的相关性分为bad, fair, good,excellent, perfect五档,这个是耗时耗力的工作,并且由人工来标注,标准很难以统一,所以选用用户的点击与购买等行为来代替对商品的相关性及商品优劣的判断。
对特征参数的优化,从原始的手工调整,到了自动化的学习。这个变化如下图所示,
原有的商品排序系统参数产生流程如下图中绿色箭头所示,新的流程如红色所示。减少人为的因素,并且可以在线下评估效果,节省了线上ABtest的反复测试的时间,并且是可以达到最优化参数的目的。
总体的架构如下:
使用pairwise的方法来生产训练数据
搜索的目标是相对比较多的,既需要考虑商品购买转化率,又需要兼顾商品点击率等,不适用pointwise这样目标单一的方法,所以我们选择了pairwise来做训练数据。Pairwise的难点在于训练数据的构建,当然后续也在实验listwise的一些方法,以及pairwise和listwise结合的方法,以及boost的方法。
大多数论文上都会提到几种pairwise的方法,
1.Click> Skip Above
2.LastClick > Skip Above
3.Click> Earlier Click
4.LastClick > Skip Previous
5.Click> No-Click Next
Click>SkipAbove是指,在搜索结果页点击的商品,好于在点这个商品之前浏览过的商品,即排序排在这个商品前面的并且未被点击的商品。前4个方法都是类似的思想,不过对于像淘宝这样相对成熟的排序系统来说,这些方法并不适用,因为这样选出的pair样本与排序的分数恰好相反,原始的排序顺序,将各个特征分数较高的排在前面,而通过Click > SkipAbove选出的pair集合,都是表述分数低的比分数高的好,可以说都是反例,这样会导致模型训练结果所有的特征权重都为负。
所以我们选择pair的方法是通过用户的点击与购买反馈来生产表示商品好坏的pair对。
使用点击反馈来形成pair
统计同query下,每个商品的点击率,将点击率平滑后,将点击率相差一定以上的商品形成pair。
使用无点击的数据来形成pair
在样本中加入一部分通过原始排序来生成的pair,这样的目的是使排序的参数变化不至于太剧烈,形成一些意想不到的badcase。
这部分的样本根据展示日志中原始商品的排序,第1个商品好于第20个商品,第2个商品好于第21个商品,以此类推。
样本的混合与分层抽样
样本产生之后
1. 按照线上参数进行排序计算NDCG。
a) NDCG计算有点击的商品相关性是1,有成交的商品相关性为2
b) 对pvlog进行重排时,重排范围只在当前页面内,不考虑重排后,第2页的商品排到第一页的情况。
c) DCG[i] = DCG[i-1] + G[i]/log_2?〖(i+1)〗,i是排序的位置,G[i]是在第i个位置上商品的相关性。IDCG为按相关性排序后的DCG
d) NDCG=DCG/IDCG
2. 调整样本混合比例,或者样本选择策略。并且重新进行训练。
3. 按训练好的模型的参数对pvlog进行重新排序。计算NDCG
4. 和按照线上参数排序的NDCG进行比较,看是否有增加或者减少,和增加的程度,来判断这次调整的收益。
5. 并且通过找到ndcg下降的query,分析下降的原因。
提示:本文同步发布于微信号{alibabatech},敬请关注。