Embedding is All You Need:广告召回中的深度学习
2018 年深度学习的风终于吹到了广告系统。我们做了第一版基于 DNN 的广告召回模型,效果显著好于所有基于规则和浅层模型的方案。
为什么需要 Embedding?
回顾一下传统的匹配方式:
Query "学英语" → 分词 ["学", "英语"]
Ads = 倒排["学"] ∩ 倒排["英语"]
问题:同义表达(“学英文”、“英语培训”、“English course”)完全无法召回。
DNN Embedding 的思路:
- 用用户点击日志构造训练样本(query, ad, click=1/0)
- 训练双塔模型:query tower + ad tower
- 两个塔输出维度相同的 embedding
- 线上用 query embedding 做 ANN 检索
双塔模型
Query Tower Ad Tower
"朝阳区装修" 广告标题+描述+落地页
↓ ↓
Tokenizer Tokenizer
↓ ↓
LSTM/GRU LSTM/GRU
↓ ↓
Dense Layer Dense Layer
↓ ↓
128-dim向量 ←─── cosine sim ──→ 128-dim向量
训练时,正样本 (query, 点击广告),负样本 (query, 随机广告),loss 用 triplet loss 或 sampled softmax。
工程落地的坑
1. 线上推理延迟
理想情况是 query embedding 实时计算,但双塔模型的推理需要几毫秒。折中方案:
- 高频 query 预计算 + 缓存
- 低频 query 用浅层替代模型
2. ANN 索引更新
广告 embedding 需要每天更新(广告主会新建/修改广告)。百万级 embedding 的全量 ANN 构建需要约 30 分钟。我们用了 Faiss IVFPQ 索引,每天凌晨重建。
3. 冷启动广告
新广告没有点击数据,embedding 基本随机。解决方案:用广告文本 + 关键词生成初始 embedding,并在前几天给少量曝光做探索。
效果
相比传统匹配,embedding 召回使得整体的召回率提升了 ~40%,长尾 query 的曝光覆盖率翻倍。
这也是后来支撑智能匹配 SHOWS +2704% 的基础设施。