广告召回系统入门:从匹配到排序
2016 年初我开始做广告检索系统的广告召回,这篇文章记录当时的入门理解。
广告检索和普通搜索有什么不同?
普通搜索要找到“最相关”的文档,广告检索要在“相关”和“商业价值”之间找平衡。公式很简单:
ECPM = bid × pCTR
用户搜一个 query,系统要从百万级广告库中找出几百个候选,然后按 eCPM 排序。整个过程必须在 几十毫秒 内完成。
触发召回:倒排索引不是万能的
普通搜索靠倒排索引就能覆盖大部分场景——query 分词后去倒排链求交即可。但广告召回有个本质问题:
广告主买的词 ≠ 用户真正搜的词
比如广告主买的是“北京装修”,用户搜的是“朝阳区新房简装”——传统倒排匹配什么都召回不到。
所以需要智能匹配:把用户 query 扩展到语义相近的广告词,或者把广告词泛化到能匹配更多 query。
漏斗模型
候选广告池 (百万)
↓ 触发召回
粗排候选 (万)
↓ CTR 预估 + 排序
精排结果 (千)
↓ 截断
最终展示 (个位数)
每一层都在“精度 vs 性能”之间取舍。触发层的核心 KPI 是召回率(漏掉的相关广告比例),粗排层关注排序一致性,精排就是最终质量。
当时的启发
刚接手时觉得“匹配”很简单——分词、求交、排序就完了。实际做起来才发现:
- 冷启动:新广告没有历史数据,怎么评估?
- 长尾 query:低频搜索词的匹配质量远低于头部
- 预算约束:广告主预算花完了就别召回了,但这个逻辑要实现在毫秒级
这些会在后续文章展开。
下一篇预告:基于高斯随机投影的关键词匹配方法。