本文原作者:彭江军,经授权后发布。
1: 搜索排序的概念
搜索排序:在一次会话中,用户在交互界面输入需要查询的query,系统给返回其排好序的doc例表的过程。
2:搜索排序和推荐排序的区别
推荐:基于用户的行为挖掘出用户的兴趣,为其推荐对应的视频,doc等。
2.1从展示形式来讲:
搜索排序每次展示一系列的消息例表,如下图所示:
推荐每次可以展示一条消息,但是我们看到的这条可以被展示的doc也是经过背后的排序算法得到的。
也可以在界面上一次展示多条doc,这种情况下推荐排序的展示形式也是多条和搜索排序没有本质的区别。如腾讯视频的火锅视频的推荐就是一次展示多个视频,在这种情况下展示的顺序就由推荐的排序算法给出的。
2.2 难度上而言:
排序相比推荐而言,用户有一个较为明确的目的,所以在排序的初级阶段该问题的难度并不高。但搜索排序在后期的优化上面难度也很大。
前期,因为即使单纯的依据内容与query的文本相关性、内容的质量和内容的时新就可以给出一个还不错的排序结果。但是在基础的排序上在想来提升用户的体验,提升体验包括挖掘用户的意图,提高用户的点击率,长点击率等就比较困难。
由于不管是推荐还是搜索最后都离不开排序,下面结合自己的经验和项目写一点对排序的理解。
3:对排序的理解
排序;顾名思义,就是从一堆杂乱的例表中依据某些特征进行排序。
常见的一些排序的因子在大的维度上可以分为:
文本相关性类特征
内容质量分类特征
内容的时新类特征
点击类特征
用户画像类特征
每个大的维度下的排序特征可以是单个特征,或者多个特征。
对于这些排序特征,排序类的算法的目的就是要做好一件事——审时度势。有点偏哲学,哈哈(研究算法本身就是一门哲学,一种方法论)。
审时度势有点玄乎,其实细分下来可以分为两个,审时和度势。
度势。多个排序的特征融合到一起,每个都有自己的作用,所以需要以一种方式去组合这些特征。排序类算法要做的事就是去确定用何种方式,该怎么组合,来选定每个特征的重要性,度势就体现在这——即确定每个特征的势力范围,重要程度。
审时。任何的一个算法,拟合训练只是手段,真正要做的事情还是去预测。预测这个事情就要求训练模型时候的数据分布和需要预测的数据的分布尽可能一致,这种一致性保证了模型的泛化能力。所以对于实际问题而言,用一个月前的训练模型来预测今天的表现效果自然是不如用一个星期前的训练模型来预测今天的线上表现。
训练数据时间 | 预测数据 | 数据分布一致性 | 模型预测效果 |
---|---|---|---|
一个月前数据 | 今日数据 | 不太一致 | 低 |
一个星期的数据 | 今日数据 | 较为一致 | 中 |
昨天的数据 | 今日数据 | 很一致 | 高 |
关于如何衡量数据或者特征的分布,可以见后续的特征分析文章。
4:排序的常见算法
搜索排序可以大致分为两个阶段:
先是召回,然后是排序。排序里面又分为粗排和精排,拍完之后,为了预防某些badcase,还会有产品的干预,这个在下一节中讲到。
这一小节我们只从排序的算法层面讲起。大体上来讲,排序算法的可以分为传统阶段和learning to rank 两个阶段。
4.1: 传统的阶段
排序的前期是没有模型的,是直接对精选的特征进行手动组合。这种手动组合的形式一般比较简单,每种组合的形式之下,权重的大小由经验比较丰富的从业者或者专家敲定,特征的可解释性很强。一般常用的有线性组合如加法公式,有简单的非线性组合如乘法公式。这两种其实背后对应的机器学习的方法,分别是线性回归,和Logistic 回归。
下表整合了以加法公式和乘法公式为代表的手动设置权重的特征组合方法的优缺点:
在传统的阶段,我们可以看到,如果我们把组合的方式转化为机器学习的方法参数的确定由样本去学,就可以兼顾组合类方式的优点和缺点。
所以构造一个将搜索排序构造成一个机器学习问题的好处是不言而喻的。这样就进入第二个阶段,learning to rank(以下简称LTR) 阶段。
4.2: LTR阶段
我们在4.1看到,可以将加法公式变成线性回归来克服手动定权重的弊端。但实际上由于线性模型的组合方式太过于简单,其模型的复杂度太低,在面对实际问题的时候,表现力不走。那该选择何种方式来自动组合这些特征呢?
上面的何种方式对应到机器学习的专业术语中,可以叫做学习器,学习器是一族模型的集合,类似于函数族(千万别被两个术语吓到,其实不理解这个术语,也没影响的)。如神经网络学习机,如树模型,如线性模型学习器。每个学习器就代表一类特征的组合方式。言而总之,学习器就决定了以何种方式进行组合。
一旦选定了学习器,就需要去学习对应的组合形式的权重应该是多少?学习权重的时候需要确定损失函数,损失函数的作用相当于告诉学习器的优化方向。学习器应该沿着那个方向去优化才能保证获得最优的权重。
不同的策略下对应的损失函数差别很大。
排序常见的优化策略有三种。借用CSDN博文https://blog.csdn.net/clheang/article/details/45674989,下面分别给出三种优化的策略和对应的损失函数形式:
4.2.1:PointWise
该方法只考虑给定查询下,单个文档的绝对相关度,而不考虑其他文档和给定查询的相关度。亦即给定查询q的一个真实文档序列,我们只需要考虑单个文档di和该查询的相关程度ci,亦即输入数据应该是如下的形式:
这里将需要学习的学习器记为f:
损失函数为:
这里的l是loss的缩写,常见的选择方式由RMSE和entropy cross, logloss等。
Pointwise方法主要包括以下算法:Pranking (NIPS 2002), OAP-BPM (EMCL 2003), Ranking with Large Margin Principles (NIPS 2002), Constraint Ordinal Regression (ICML 2005)。
Pointwise方法仅仅使用传统的分类,回归或者Ordinal Regression方法来对给定查询下单个文档的相关度进行建模。这种方法没有考虑到排序的一些特征,比如文档之间的排序结果针对的是给定查询下的文档集合,而Pointwise方法仅仅考虑单个文档的绝对相关度;另外,在排序中,排在最前的几个文档对排序效果的影响非常重要,Pointwise没有考虑这方面的影响。
4.2.2:PairWise
文档对方法(Pairwise)中排序问题被转化成结果对的回归、分类或有序分类的问题。Pairwise方法考虑给定查询下,两个文档之间的相对相关度。亦即给定查询q的一个真实文档序列,我们只需要考虑任意两个相关度不同的文档之间的相对相关度:di>dj,或者di<dj。
需要学习的学习器记为f:
损失函数为:
Pairwise方法主要包括以下几种算法:Learning to Retrieve Information (SCC 1995), Learning to Order Things (NIPS 1998), Ranking SVM (ICANN 1999), RankBoost (JMLR 2003), LDM (SIGIR 2005), RankNet (ICML 2005), Frank (SIGIR 2007), MHR(SIGIR 2007), Round Robin Ranking (ECML 2003), GBRank (SIGIR 2007), QBRank (NIPS 2007), MPRank (ICML 2007), IRSVM (SIGIR 2006) 。
相比于Pointwise方法,Pairwise方法通过考虑两两文档之间的相对相关度来进行排序,有一定的进步。但是,Pairwise使用的这种基于两两文档之间相对相关度的损失函数,和真正衡量排序效果的一些指标之间,可能存在很大的不同,有时甚至是负相关,如下图所示(pairwise的损失函数和NDCG之呈现出负相关性):
另外,有的Pairwise方法没有考虑到排序结果前几名对整个排序的重要性,也没有考虑不同查询对应的文档集合的大小对查询结果的影响(但是有的Pairwise方法对这些进行了改进,比如IR SVM就是对Ranking SVM针对以上缺点进行改进得到的算法)。
4.2.3:ListWise
与Pointwise和Pairwise方法不同,Listwise方法直接考虑给定查询下的文档集合的整体序列,直接优化模型输出的文档序列,使得其尽可能接近真实文档序列。
这里的NDCG是衡量排序的一个关键性指标,在后面排序类指标中会单独进行描述。
Listwise算法主要包括以下几种算法:LambdaRank (NIPS 2006), AdaRank (SIGIR 2007), SVM-MAP (SIGIR 2007), SoftRank (LR4IR 2007), GPRank (LR4IR 2007), CCA (SIGIR 2007), RankCosine (IP&M 2007), ListNet (ICML 2007), ListMLE (ICML 2008) 。
相比于Pointwise和Pairwise方法,Listwise方法直接优化给定查询下,整个文档集合的序列,所以比较好的解决了克服了以上算法的缺陷。Listwise方法中的LambdaMART(是对RankNet和LambdaRank的改进)在Yahoo Learning to Rank Challenge表现出最好的性能。
5:排序模型的常用评价指标
这里列举最常用的几种指标,指标具体的含义,计算公式,计算例子在后面的里面详细展开
1:NDCG,全称: Normalized discounted cumulative gain。 该衡量指标通过这种归一化的折扣的方式来保证头部的排序的准确性。
2:MAP,全称为Mean Average Precision。该衡量指标是反映系统在全部相关文档上性能的单值指标,衡量了每个主题的平均准确率。
3:MRR,全称为Mean Reciprocal Rank。该衡量指标是把标准答案在被评价系统给出结果中的排序取倒数作为它的准确度,对于头部的排序做一个discount,已经保证头部排序的准确性。
4:AUC,全称为Area Under Curve。这个其实是一个二分类的指标,但是这个也可以用来作为排序。并且是十分有效的。该指标有效的解决了分类(排序)问题中样本严重有偏的评估数值的置信度问题。
系列文章:
【技术分析】二:搜索排序—工业流程
https://cloud.tencent.com/developer/article/1525595
【技术分享】三:搜索排序—机器学习化建模
https://cloud.tencent.com/developer/article/1527336
【技术分享】四:搜索排序—数据的采集与构造
https://cloud.tencent.com/developer/article/1528253
【技术分享】五:搜索排序-特征分析
https://cloud.tencent.com/developer/article/1531448
【技术分析】六:搜索排序—指标介绍与选择
https://cloud.tencent.com/developer/article/1532635
【技术分享】七:搜索排序—排序模型
https://cloud.tencent.com/developer/article/1533656
腾讯云一站式机器学习平台智能钛TI-ONE试运营阶段限时0折,欢迎大家积极试用。
https://cloud.tencent.com/product/tio
更多优质技术文章请关注官方知乎机构号:
https://www.zhihu.com/org/teng-xun-zhi-neng-tai-ji-qi-xue-xi-ping-tai/activities
更多优质技术文章请关注官方微信公众号: