Embedding is All You Need:广告召回中的深度学习

2018 年深度学习的风终于吹到了广告系统。我们做了第一版基于 DNN 的广告召回模型,效果显著好于所有基于规则和浅层模型的方案。


为什么需要 Embedding?

回顾一下传统的匹配方式:

Query "学英语" → 分词 ["学", "英语"]
Ads = 倒排["学"] ∩ 倒排["英语"]

问题:同义表达(“学英文”、“英语培训”、“English course”)完全无法召回。

DNN Embedding 的思路:

  1. 用用户点击日志构造训练样本(query, ad, click=1/0)
  2. 训练双塔模型:query tower + ad tower
  3. 两个塔输出维度相同的 embedding
  4. 线上用 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% 的基础设施。