发布时间:2022-06-29 文章分类:编程知识 投稿人:王小丽 字号: 默认 | | 超大 打印
标签

搜索引擎广告排序自动检测系统说明

搜索引擎在互联网中的应用越来越广泛,如何展现与用户搜索意图更相关的信息必然会涉及到排序系统,面对错综复杂的广告搜索引擎排序系统,如何去检测系统本身的正确性?

这里提供两种检测方法,第一种对比线上环境和预发布环境(或实验环境),第二种基于算法,直接检测搜索引擎广告排序系统的正确性。

先说第一种,对比检测线上环境和预发布环境(或实验环境)。对于搜索广告引擎,一般都会有着两种环境:线上环境和预发布环境(或实验环境)。当系统算法,或引擎系统相关模块在其中一套环境有升级(非排序算法相关的升级)的时候,或者离线数据有更新的时候,需要检测升级之后(或数据更新之后)的搜索广告引擎的正确性,可以将没有进行升级的环境和进行升级之后的环境进行的前端请求页面进行对比,从对比的不同结果中,验证是否是由于离线数据的不同,引起的排序结果的不同。如果两条相同的广告,排序分/静态分完全相同,说明升级之后的系统排序结果没有受到离线数据更新和系统升级的影响,升级之后的系统正确可用。

这第一种检测系统的实现技术方案:使用相同的前端请求链接分别请求两套环境,获取两套环境各自的广告排序返回结果,将线上环境的adgoupId(广告组Id)和rankscore(排序分),存入第一张hash map ,将预发布环境(或实现环境)的adgroupId (广告组Id)和rankscore(排序分),存入第二张hash map,其中adgroupId是key ,rankscore是value,

遍历对比这两个hash map,获取只在第一个结果中的<key , value>对(广告),只在第二个结果中的< key , value>对(广告),两个环境都有,但是算分不同的广告。获取到这三种类型的广告之后,对其中两个环境都有但是算分不同的广告进行检测(如果验证算分正确,则可以默认第一种和第三种的广告排序也是正确的)。将广告相同,算分不同的这些广告,请求离线的静态分数据,得到两套环境的这条广告的各自的线下静态分,比较rankscore1/staticscore1(线上环境的分数),rankscore2/staticscore2(预发布环境或实验环境),如果 rankscore1/staticscore1 = rankscore2/staticscore2 ,则可推断,两套环境的相同广告的算分不同,是由于两套环境的各自的离线数据更新不一致引起的,而与系统升级无关,也即是,系统升级没有影响算法系统的正确性。

实现的数据流图如下:

第二种,基于一套独立环境的搜索引擎广告排序自动检测系统。以上介绍的第一种检测系统是基于有两套相同的搜索引擎环境,当其中的一套环境升级之后,进行对比验证,通过对比两套环境的前端请求页面的正确性,从而检测升级之后的系统正确性,确保其可服务。而下面要介绍的,就是假设只有一套单独的搜索引擎排序系统的环境,没有可以进行对比的对象。这时候,就要从排序算法本身去验证系统的正确性。

验证搜索引擎广告系统的正确性,就是要验证在相应的query(请求下),其出的广告是不是符合我们算法约定的广告,算法本身需要保证的是能够展示和用户请求更相关的广告,同时考虑广告主竞价因素。但是算法并不是单一的,每个搜索引擎广告排序系统可能都有自己的算法系统。这里举一个算法系统的例子。算分公式如下:

rankscore = bidscore*price = controlPara * staticscore * price

其中,

bidscore是不考虑出价因素的广告得分,也可以理解为广告相关性分数,controlPara是一个折算系数:用来提高相关性更好地广告的算分权重。(这里不指定具体的算法)

staticscore是线下计算并存储好的,根据抽取这个<query , ad>对的很多维度的特征,考虑出价因素计算出来的一个静态分数,存储到缓存中,提高查询计算效率。

price是广告主的出价。

同样,为了检测搜索引擎的系统正确性,可以发送前端请求,获取页面返回信息,根据算分公式,实时计算出页面上的广告的rankscore,和页面展示的rankscore进行对比,如果两者完全match,则说明搜索引擎升级或数据更新成功。

那么问题就变为我们如何根据某个query下的广告信息,计算其rankscore,以上面的算分公式为例(其他的也可以以此为标准实现)。首先需要查询广告索引得到其出价price ,然后以adgroupID为key,查询离线静态分数据,得到这个广告在这个query下的staticscore(静态分)。再来计算controlPara,三部分的算分因子都算好了之后,将它们相乘(staticScore * controlPara * price),得到广告应该得到的rankscore。将计算出来的rankscore和前端请求页面返回的rankscore进行对比,如果相等,说明,计算逻辑正确,系统升级或数据更新成功。如果两者不相同,说明系统升级或数据更新影响到了计算排序分的逻辑,升级或数据更新失败。

实现的数据流图如下: