广告检索
倒排索引是搜索引擎的关键技术,而广告的检索上也采用这样的框架。但是广告的检索问题也有一些自身的特点和需求,基本的倒排索引技术在广告检索中遇到了两个新问题。
- 广告的定向条件组 ,可以看成是一个由与或关系连接的布尔表达式,这样的文档显然与搜索引擎面对的 Bow 文档不太一样,这里存在着有针对性的检索性能优化空间。
- 在上下文关键词或用户标签比较丰富,广告检索中查询可能相当长,甚至会由上百个关键词组成,这种情况下的检索也与搜索引擎中主要由 1 ~ 4 个关键词组成的查询有很大区别。试想,如果将 100 个关键词同时输入到搜索框中,返回的结果会是你想要的吗?
布尔表达式的检索
广告检索与普通搜索引擎检索的第一不同是布尔表达式的检索问题。
如下图:有 7 条广告的定向条件。
注意:我需要将定向条件写成析取范式(Disjunctive Normal Form,DNF)的形式。
DNF 中有两个概念:
- 每个 DNF 都可以分解为一个或者多个交接(conjunction)的
并
- 每个交集又可以进一步分解为一个或多个赋值集(assignment)的
交
布尔表达式检索的问题有两个特点
- 当某次广告请求的定向标签满足某个 Conjunction 时,那么 Conjunction 包含的所有广告一定符合当前请求。
- 因此需要对 Conjunction 建立倒排索引,并加一层 Conjunction --> AD 的倒排索引辅助检索。
- Conjunction 建立倒排索引
- Conjunction --> AD 的倒排索
- 因此需要对 Conjunction 建立倒排索引,并加一层 Conjunction --> AD 的倒排索引辅助检索。
- 在 Conjunction 的倒排索引中,有一项直接可以帮助我们减少计算:
- 令 sizeof( query )表示广告请求中的定向标签个数
- 令 sizeof( Conjunction )表示某 Conjunction 的含有
∈
的赋值集数目 - 当 sizeof( query )< sizeof( Conjunction )时,该 Conjunction 一定不满足该次请求
- 例如:广告请求只有 2 个标签,对于需要 3 以上标签求
并
的广告,肯定不满足此次检索的匹配条件
- 例如:广告请求只有 2 个标签,对于需要 3 以上标签求
根据上图的一组广告为例,这组广告的 DNF 可以按如下的方式分解成一些 conjunction
对应的倒排索引很容易地写成下面的的形式:
在上述 所有 Conjunction 的最大 size 为 2(Conjunction 的含有 ∈
的赋值集数目),可以将倒排索引分成 3 部分,每部分中所有
Conjunction 的 size 一样,按照这样的准则,最终形成的 Conjunction 排索引 应为下面的形式:
注意:
- sizeof( Conjunction )= 0,包含那些所有只有
∉
操作负的 Conjunction - 为了保证给定一个 assignment,sizeof( Conjunction )= 0 至少出现在一个倒排表里,算法引入
Z
为一个特殊的 term,并且将所有 sizeof( Conjunction )= 0 都放入其倒排表中,并赋以一个∈
操作符。