前言

随着互联网的深入发展,人类已然进入大数据时代。如何在浩瀚的数据海洋里高速有效的获取有价值的信息,正是促使大数据技术具备走向众多企业的潜力。搜索引擎作为获取信息的有效入口,已然经历了20多年的发展,并一直试图理解用户搜索意图以及提升搜索的精准性。

 

Google是全球性的搜索引擎,看似简单的搜索框背后隐藏的是极其复杂的系统架构和搜索算法,其中排序(以下统称Ranking)的架构和算法更是关键部分。Google正是通过PageRank算法深刻改变搜索排序而一举击败众多竞争对手。

 

Ranking是搜索引擎的核心技术,本文以搜索引擎的Ranking技术为切入点,从搜索引擎架构、检索模型、机器学习算法、点击模型、搜索效果评估等方面将达观数据(www.datagrand.com)在搜索引擎Ranking的构建与优化过程中的一些实践经验与大家做分享。

 

达观数据(www.datagrand.com)一直致力于钻研和积累各种大数据技术、尤其在文本挖掘、搜索引擎、推荐系统等方面积累深厚,曾获得CIKM2014数据挖掘竞赛(搜索意图识别)全球冠军(达观数据桂洪冠陈运文)

 

wKioL1deW7zyZ415AACJ5rNvUa8703.jpg-wh_50

1:达观团队获得CIKM数据挖掘竞赛冠军

经典搜索排序架构

通常在线搜索引擎要求实时响应(毫秒级)用户的搜索请求,使得在线对每个文档进行基于模型的Ranking复杂计算不太现实,因而搜索的过程被分成两个阶段。阶段一是使用相对简单的常用检索模型对用户query从索引中快速检索出Top-k候选结果集。常用检索模型主要有向量空间模型(Vector Space Model)、布尔模型(Boolean Model)、概率检索模型BM25等,通常Top-k的候选集选取还结合离线计算质量分高的文档以排除掉文本相关但质量分太低的文档;阶段二则使用计算相对复杂的机器学习排序模型对Top-k候选结果集进行精确的重排序,因为Top-K的候选结果集数据量级一般不会很大,这一步计算可控。

wKiom1deW5DQ8ozZAAFamryqabM878.jpg-wh_50

2:一个经典的搜索引擎排序架构

 

Ranking模型的训练数据主要由query、文档以及query与文档的相关度组成,相关度可以标记成好、不好两个级别或细粒度更高的PerfectExcellentGoodFairBad五个级别。训练数据主要有两种获取方式:方式一是由搜索评测人员标记query与每个文档的相关度进行手工的评测整理;方式二是通过自动分析搜索点击日志生成。显然,对于大规模机器学习排序模型的训练数据人工标注的成本过高,而且人工也无法对模型进行相对实时的更新。达观数据(www.datagrand.com)主要通过方式二生成训练数据,自动分析搜索点击日志,分析用户在同一个搜索session内对query的各种变换、对搜索结果中不同位置的文档的点击行为以及后继的筛选、翻页等行为,综合计算出一个可以标记训练数据的搜索满意度得分。

 

达观搜索的实践表明,通过分析搜索点击日志可以实现模型训练数据的自动生成和实时更新,同时也可以达到比较满意的搜索效果。(达观数据桂洪冠陈运文)

 

达观搜索引擎架构

wKioL1deXRDw_blSAAHtBEB7h_M934.jpg-wh_50

3 达观搜索引擎架构

达观搜索引擎架构从底往上分别是分布式数据存储层、索引构建与模型训练层、索引数据与模型数据分发层、搜索核心层、开放接口层,同时系统架构还支持搜索引擎的索引配置和Ranking策略配置、以及搜索分析与效果评估。

 

搜索核心层是由query分析引擎、索引引擎、Ranking引擎构成。其中query分析引擎(QUERY ANALYSIS ENGINE)负责对用户的query进行语义分析和意图识别,包括query分词、中心词提取、query纠错、query自动提示、query扩展等。索引引擎(INDEX ENGINE)执行Top-k候选结果选取,这里我们综合考虑了检索模型的搜索相关性评分和文档的静态质量分(离线计算),另外在这一层还根据用户的筛选条件以及业务层面的搜索结果配置进行了搜索结果的筛选和融合。排序引擎(RANKING ENGINE)利用机器学习模型对Top-k的候选集执行第二轮的精确排序。RANKING ENGINE内置一个算法插件框架,可以根据用户配置的搜索排序策略加载相应的排序算法插件以及排序算法模型,同时还支持用户对搜索流量划分到不同的排序算法插件,以实现多个算法策略的同时在线A/B testing对比。

 

检索模型的选择

常见的检索模型主要有布尔模型(Boolean Model)、向量空间模型(Vector Space Model)、概率检索模型BM25BM25F

 

布尔模型

布尔(Boolean)模型是基于集合论和布尔代数的一种简单检索模型。它的特点是查找那些对于某个查询词返回为“真”的文档。在该模型中,一个查询词就是一个布尔表达式,包括关键词以及逻辑运算符。通过布尔表达式,可以表达用户希望文档所具有的特征。由于集合的定义是非常直观的,Boolean模型提供了一个信息检索系统用户容易掌握的框架。查询串通常以语义精确的布尔表达式的方式输入。

布尔模型的主要优点是直观和简单,缺陷在于完全匹配会导致被返回的结果文档太多或者太少。

 

向量空间模型(Vector Space ModelVSM)

VSM概念简单,即把对文本内容的处理简化为向量空间中的向量运算,并且它以空间上的相似度表达语义的相似度,直观易懂。当文档被表示为文档空间的向量,就可以通过计算向量之间的相似性来度量文档间的相似性。文本处理中最常用的相似性度量方式是余弦距离。

wKioL1deXUiRRfB4AAECo_dd0XI311.jpg-wh_50

向量空间模型中通常采用TF* IDF的方式计算权重。Wij = TFij * IDFij 表示termi在文档dj的权重,Wiq = TFiq * IDFiq 表示termiquery q中的权重。

 

VSM的优点:

  1. term的权重的计算可以通过对term出现频率的统计方法自动完成,使问题的复杂性大为降;

  2. 支持部分匹配和近似匹配,并可以根据query和文档之间的相似度对结果进行排序。

 

VSM缺点:

  1. 基于term之间的独立性假设,也即权重计算没有考虑term之间的位置关系,也没有考虑term的长度对权重的影响;

  2. 计算量大。新文档加入需要重新计算term的权重。

 

概率检索模型

概率统计检索模型(Probabilistic Retrieval Model)是另一种普遍使用的信息检索算法模型,它应用文档与查询相关的概率来计算文档与查询的相似度。

二元独立模型(BIM)

词汇独立性假设:文档里面出现的词没有任何关联,这样一个文档的出现就可以转为各个单词出现概率的乘积。

对于同时出现查询qi以及文档di的时候,对qidi中出现的单词进行“相关文档/不相关文档”统计,即可得到查询与文档的相关性估计值

wKiom1deXM_QGCYMAAB0-DwiUAI389.jpg-wh_50

其中:

     N表示是文档集中总的文档数;

R表示与query相关的文档数;

ri表示与query相关的文档中含有的第iterm文档个数;

ni表示含有的第iterm文档总数;

0.5是平滑因子,避免出现log(0)

 

BM25 模型

BM25 模型在BIM模型的基础上考虑了查询词在Query以及Doc中的权重,并通过实验引入了一些经验参数。BM25模型是目前最成功的内容排序模型。

改进之后的 BM25 模型的拟合公式如下:

wKiom1deXQLgtbE2AACqCQ6K7ag207.jpg-wh_50

公式的第1部分同BIM独立模型,公式的第2部分是查询词的termDoc中的权重,第3部分是查询词的term在查询本身的权重。

fi 表示termD中的词频,K因子表示文档长度的考虑,其计算公式为:

wKioL1deXimDXSnRAAAyCPWeIdo306.jpg-wh_50

其中:

k1为经验参数, k1一般设置为1.2

b为调节因子,将b设为0时,文档长度因素将不起作用,经验表明一般b=0.75

dl代表当前文档的长度;

avdl代表所有文档的平均长度;

qfi 表示在查询中的词频,k2也为调节因子,因为在短查询下这部分一般为1,为了放大这部分的差异,k2一般取值为 0~1000

 

综上所述,BM25模型结合了BIM因子、文档长度、文档词频和查询词频进行公式融合,并利用k1k2b对各种因子进行权重的调整。

 

BM25F模型

BM25F模型对BM25模型的改进之处在于考虑了文档不同区域的加权统计,例如文档的标题和描述被赋予了不同的区域权重,在各个不同区域分别统计词频。

BM25F模型的计算公式为:


wKioL1deXk2Ch1MmAADKg-fwg1s993.jpg-wh_50

wKiom1deXT3BSWVYAACCrJWtFWY642.jpg-wh_50


其中:

文档D来自不同的u个域;

各个域对应的全总为Wk

fui表示词频;

Bu表示各个域的长度;

ulu为域的实际长度,uvulu表示域的平均长度;

bu为各个域长度的调节因子。

 

检索模型总结

每种检索模型各有千秋,适用不同的场景和应用。布尔模型、空间向量模型、概率模型等传统检索模型的排序方法一般通过构造相关性函数实现,然后按照相关性进行排序。检索模型尤其概率模型比较适用于内容相关性排序,但内容相关性一般仅考虑querydoctfidfdlavdl等因素,很难融合点击反馈、文档质量分、点击模型等更多的排序因素。一个大型搜索引擎排序因子往往多达数十个乃至上百个(Google搜索排序因子超过200个),如果模型中参数过多,调参会变得非常困难,也很容易导致过拟合现象。

 

但正如前文所述,搜索引擎需要快速响应用户搜索请求,无法在毫秒级时间内对每一个召回结果进行精确的机器学习排序,业界的主流的做法是首先进行第一轮的Top-k选取再对Top-k结果进行第二轮的精确重排序。传统检索模型尤其概率模型比较适用于文本内容相关性排序,能够满足快速获取 Top-k候选结果集的需求。达观数据(www.datagrand.com)搜索在第一轮Top-k选取中选用的是BM25F检索模型。BM25F模型相比BM25模型考虑了文档不同区域的加权统计,可以获得更好的文本相关性,是目前最优的文本检索模型。

 

 

机器学习排序(Machine Learning to rank)方法很容易融合多种特征,且有成熟深厚的数学理论基础,通过迭代优化参数,对于数据稀疏、过拟合等问题也有比较成熟的理论和实践。

(达观数据桂洪冠陈运文)

 

机器学习排序(Machine Learning to rank简称MLR

机器学习排序系统框架

 

机器学习排序系统一般分为离线学习系统和在线预测排序系统。离线系统的设计需要靠特征的选择、训练集的标注、MLR方法的选定、确定损失函数、以最小化损失函数为目标进行优化,以获取排序模型的相关参数。在线预测排序系统将待预测结果输入到机器学习得到的排序模型,即可得到结果的相关性得分,进而依据相关性得分得到搜素结果的最终排序。

wKioL1deXprgMj4pAANinosaU3Q907.jpg-wh_50

4机器学习排序系统框架

 

排序模型的选择直接影响在线预测的效果。在类似电商时效性强的应用场景中,业务上经常需要根据商品库存、价格等变化及时调整排序结果,由于排序模型的高度复杂性,人工干预只能做局部小范围的调整,更多的还是要对模型进行实时的自动化更新。

 

对于这个问题,达观数据(www.datagrand.com)在实践中总结出了一个在线-近线-离线的三层系统架构,即Online-Nearline-Offline(在线-近线-离线)三层混合机制。离线系统负责day级全量训练数据的学习、近线系统负责hour级模型的学习与更新、在线系统负责minut级的准实时反馈数据的学习与模型的更新。

 

特征选取与特征工程

特征是算法、模型的养料之源。特征选择的好坏直接关系到算法训练学习出的模型的效果。与传统的文本分类不同,MLR输出的是给定query的文档集合的排序,不仅要考虑文档自身的特征,还要考虑query与文档关联关系的特征。综合来说,MLR需要考虑三个方面的特征:

  1. 文档本身的静态特征,包括文档的文本特征,如带权重的词向量,文档不同域(主标题、段落标题、描述内容、锚文本、URL链接等)的TFIDFBM25和其他语言模型得分,也包括文档的质量分、网页文档的PageRank等重要性得分。关于文档的质量分,达观搜索根据不同的业务场景有不同的计算指标,比如电商相关的商品的质量分计算除了要考虑商品本身的文本与图片丰富度,更多的还要考虑商品的各种业务指标如销量变化、收藏、价格、库存、类别、上架时间、评论、商家信誉等级、是否作弊等,而媒体相关的文章的则需要考虑阅读数、转发数、赞数、收藏、评论、发文时间、主题类型等。

  2. 文档和query关联的特征,比如query对应文档的TD-IDF score BM25 score等。

  3. query本身的特征,比如文本特征,带权重的词向量,query长度,query所述的分类或主题,queryBM25sum/avg/min/max/median分数,query上个月的热度等。

 

query与文档的特征工程中,除了从词法上分析,还需要从“被阐述”的词法所“真正想表达”的语义即概念上进行分析提取。比如一词多义,同义词和近义词,不同的场景下同一个词表达不同的意思,不同场景下不同的词也可能表达相同的意思。LSA(隐语义分析)是处理这类问题的著名技术,其主要思想是映射高维向量空间到低维的潜在语义空间或概念空间,也即进行降维。具体做法是将词项文档矩阵做奇异值分解(SVD

                         C = U

其中:

     C是以文档为行,词项terms为列的矩阵(假设M x N),元素为termtf-idf值。C被分解成3个小矩阵相乘;

U的每一列表示一个主题,其中的每个非零元素表示一个主题与一篇文章的相关性,数值越大越相关;

V表示keyword与所有term的相关性;

∑ 表示文章主题和keyword之间的相关性。

 

MLR算法的选择

MLR一般来说有三类方法:单文档方法(Pointwise),文档对方法(Pairwise),文档列表方法(Listwise)。

Pointwise方法

Pointwise把文档当成单个的点分别进行计算,实际上把一个Ranking 问题转化成二值分类问题、回归问题或多值分类问题。Query与文档之间的相关度作为labellabel一般划分为: {Perfect Excellent Good Fair Bad}

 

Pointwise方法主要包括:Pranking (NIPS2002) OAP-BPM (EMCL 2003) Ranking with Large Margin Principles (NIPS 2002) ConstraintOrdinal Regression (ICML 2005)

 

Pointwise的不足之处:

Pointwise使用传统的分类,回归或者OrdinalRegression来对给定query下的单个文档的相关度进行建模,没有文档位置对排序结果的影响,而回归和分类的损失函数会尽量拟合所有的数据,算法为了整体损失最小,有可能把排在前面的文档的损失变得更大,或者把排在后面的文档的损失变得更小,从而导致排序难以取得良好的效果。

 

Pairwise方法

Pairwisequery与文档对<di dj>结合,假设在同一Query下,di的相关性大于dj,那么我们可以把 di-dj标记为+1dj-di标记为 -1,从而可以把原问题转换为一个分类或回归问题。

 wKiom1deXeqxllfhAAFct2r0kyg119.jpg-wh_50

wKioL1deXy6ix1ZmAAHybl0BOQI508.jpg-wh_50

 

Pairwise方法主要包括:Ranking SVM(ICANN 1999) RankBoost (JMLR 2003) LDM (SIGIR 2005) RankNet (ICML 2005) Frank (SIGIR 2007)GBRank (SIGIR 2007) QBRank (NIPS 2007) MPRank(ICML 2007) IRSVM (SIGIR 2006)

 

Pairwise的不足:

  1. 文档较多时,pair的数目是平方级增长的,计算量太大;

  2. Pair对不同级别之间的区分度一致对待,没有对排在前面的结果作更好的区分。对于搜索引擎而言,用户更倾向于点击前几页的结果;

  3. 相关文档集大小带来模型的偏置。如果一个query下文档远多于另一query支持向量就会向该query偏置,导致分类器对后者区分不好。

 

Listwise方法

Listwise的输入是query对应的一个文档列表,计算每个query对应的文档列表的得分。

Listwise有一种基于文档排列的概率分布进行训练的方法,通过对训练实例的训练找到一个最优的打分函数f使得fquery的打分结果的概率分布与训练数据的实际排序尽可能相同。损失是按照训练数据的实际排序概率分布与模型输出的概率分布之间的KL距离来度量的。

wKioL1dejIWjqgWKAAHIT3UAWds090.jpg-wh_50 

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)p-ListMLE

 

相比于PointwisePairwise方法,Listwise方法直接优化给定查询下整个文档集合的序列,所以比较好的解决了以上算法的缺陷。Listwise方法中的LambdaMART(是对RankNetLambdaRank的改进)Yahoo Learning to Rank Challenge表现出最好的性能。

 

达观数据(www.datagrand.com)在搜索排序中使用了一种position-aware ListMLE(p-ListMLE)的算法,ListMLE考虑了排序位置信息,但没有对不同位置的重要程度进行区分。达观数据(www.datagrand.com)搜索的实践显示同样的条件下p-ListMLE的搜索效果指标nDCG要优于ListMLE. (达观数据桂洪冠陈运文)

 

点击模型

我们在排序实践中还发现MLR无法充分利用用户对搜索结果的点击反馈。俗话说群众的眼睛是雪亮的,用户对不同位置的搜索结果的点击行为直接反应了搜索结果的好坏。我们根据用户的历史点击记录生成了点击模型,通过点击模型对MLR的结果再进行一次调整。

 

点击模型又称为点击调权,搜索引擎根据用户对搜索结果的点击,可以挖掘出哪些结果更符合查询的需求。点击模型基于如下基本假设:

1)用户的浏览顺序是从上至下的。

2)需求满足好的结果,整体点击率一定高。

3)同一个query下,用户点击的最后一个结果之后的结果,可以假设用户已经不会去查看了(一定程度上减弱了位置偏见)

4)用户进行了翻页操作,或者有效的query变换,则可以认为前页的结果用户都浏览过,并且不太满意。

5)用户点击的结果,如果引发后继的转化行为(比如电商搜索中的加购物车),则更有可能是用户满意的结果。

 

点击模型日志:

wKiom1deXbKReZ57AAvSPHNtZDs758.jpg-wh_50

5 点击模型(日志收集)

达观数据(www.datagrand.com)搜索中MLR算法优化+点击模型对结果调权后搜索效果的显著提升。

wKioL1dejCyw5J1_AAIMHOPgp4E400.jpg-wh_50

6 达观数据搜索上线前后的效果对比

搜索排序效果评估

 

搜索引擎的排序是一个复杂的过程,特征的选择、算法的变化、模型的更新都会导致排序结果的变化。那如何衡量一个排序结果的好坏呢?MLR是用机器学习的方法来进行排序,所以评价MLR效果的指标就是评价排序的指标,主要包括一下几种:

  1)WTA(Winners take all) 对于给定的查询q,如果模型返回的结果列表中,第一个文档是相关的,则WTA(q)=1,否则为0.

  2)MRR(Mean Reciprocal Rank) 对于给定查询q,如果第一个相关的文档位置是R(q),则MRR(q)=1/R(q)

  3)MAP(Mean Average Precision) 对于每个真实相关的文档d,考虑其在模型排序结果中的位置P(d),统计该位置之前文档集合的分类准确率,取所有这些准确率的平均值。

  4)NDCG(Normalized Discounted Cumulative Gain) 是一种综合考虑模型排序结果和真实序列之间关系的一种指标,也是最常用的衡量排序结果指标,详见Wikipedia

 

评价指标的使用

使用评价指标主要有手工标注答案和自动化评估两种。手工标注方式既费时费力,又无法及时进行评估效果反馈。自动化评估方式对提高评估效率十分重要。最常用的自动评估方法是A/B testing系统。

A/B testing系统将用户的流量在算法模型A/B之间进行分配,即将通过用户的分组号(bucket id)将用户流量分别导入不同的算法分支,用户在不同算法分支的行为连同分组号被记录下来,后台分析系统分析这些行为数据可以生成一系列对比指标,通过这些指标可以直观的分析算法模型优劣。

 wKiom1dei6bSSKBlAAHFqZsBTxg305.jpg-wh_50

总结

本文从搜索引擎排序的架构、检索模型、机器学习排序模型与算法到搜索效果评估,全面介绍了达观搜索引擎排序实践方面的一些经验。达观数据搜索团队长期致力于基于大数据的搜索算法优化,经过多年的积极探索,目前在开放搜索引擎的系统研发和效果提升方面已经积累了丰富的经验。随着DT时代的到来和深度学习兴起,达观数据(www.datagrand.com)技术团队将在基于大数据的深度挖掘方面不断探索和尝试以给用户带来更好的产品和服务。

 

 

 

 

 

作者介绍

桂洪冠,达观数据(www.datagrand.com)联合创始人&技术副总裁,中国计算机学会(CCF)会员。曾服务于阿里、盛大、腾讯几家公司,任腾讯文学、盛大文学数据中心高级研究员、阿里搜索技术专家等职务,主要负责搜索与广告团队。