流程:倒排、召回、粗排、精排、混排等。
bitmap介绍:在建立用户画像时,存在性能问题(如本可使用mysql一条条记录,但随着用户标签越来越多,大量数据的去重和统计怎么做?),方案(用户标签用bitmap存,一位代表一种标签,但一个用户一个bitmap,成百上千标签也很大啊?可以反着来,让一个bitmap代表一个标签,一个标签对应多个用户。)
这样实现去重和统计就一目了然,作交集也更方便。
EWAHCompressedBitmap简介
使用long数组,一个long64bit(称word),初始化只有word0(存跨度信息) word1 word2 word3 ,当都有数后会动态扩容增加word4(存跨度信息) word5 word6 word7,若此时要插入400000,可直接写入word5中。存跨度信息的word高32位存后面有多少个连续的word,低32位存当前word跨了多少个空word。若再插入400003,先看word0算出来不在word1到word3里面,再在word4算出来能放在word5里面。
Ad Targeting是广告投放引擎的在线服务,有广告定向检索、广告流控、广告频控等功能,性能要求高。
定向:只有满足定向条件的用户才能投放该广告主的广告。
频控:如dislike后,两周不再投该广告。
流控:控制在投广告上下线,如当cost大于预算,计费告诉流控,流控模块向targeting发消息,下线该广告。
targeting粗选模型:recall2send(将原先的随机截断3w个广告修改成了根据模型粗选最优的3w个广告)。
总之,targeting就是根据规则过滤出广告,并将选出的广告传给下游的召回模型。过滤分为正排和倒排两种:
正排:是个二重循环,针对每个定向条件的每个value判断当前请求是否满足,计算量较大。
倒排:构建倒排索引,针对每个定向条件的每个value构建倒排表,同时进行bitmap优化,当请求到来后直接取出value值对应的bitmap过滤。
构建倒排 主要流程分为定向倒排,频控倒排,流控倒排。
定向倒排的结果是:fied->value->bitmap。
频控倒排:
主要为用户考虑,adtargeting使用adarbiter构建好的频控规则过滤广告,Arbiter会解析用户历史,根据 rit、客户端版本号等条件,以adfilter形式生成Dislike过滤规则、频控过滤信息、样式过滤信息、风险控制信息等。
流控倒排:
流控过滤也实现为倒排索引,流量控制主要为广告主考虑,让预算消耗的更加合理,广告检索时,检索结果会经过流控倒排,过滤掉被流控下线或限速的广告,以此实现流控过滤逻辑。
例如,我们要从3000w的候选集里面选3个广告,可以拆解为从3000w候选集里选3000个广告,然后从3000个广告里选300个广告,再从300个广告里面选3个广告。
这里的3000w->3000,3000->300,300->3在广告系统里分别对应的就是召回、粗排和精排。
召回的容错率较精排更宽容,但对性能的要求也更高。
- 召回层的特点是数据量大、速度快、模型简单、特征较少。
- 排序层的特点是数据量小、排序精准、模型复杂、特征较多。