共计 1849 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点:为什么需要对比学习
传统 CTR 预估模型(如 LR、DeepFM)在动态广告场景面临三大挑战:

- 冷启动问题 :新广告或新用户缺乏历史交互数据,导致 Embedding 初始化困难
- 长尾效应 :中小广告主样本稀疏,模型容易过拟合头部广告
- 动态性不足 :静态 Embedding 难以捕捉用户实时兴趣变化
技术对比:三大学习范式差异
| 方法类型 | 代表算法 | 广告场景优势 | 广告场景劣势 |
|---|---|---|---|
| Pointwise | LogisticRegression | 实现简单,计算高效 | 忽略广告间相对关系 |
| Pairwise | RankNet | 优化广告对排序 | 仅考虑两两比较 |
| Listwise | LambdaMART | 直接优化 NDCG 等列表指标 | 计算复杂度高 |
核心实现:双塔模型代码详解
基础结构实现(PyTorch)
import torch
import torch.nn as nn
class DualTower(nn.Module):
def __init__(self, user_feat_dim=256, ad_feat_dim=128):
super().__init__()
# 用户塔(实际工程需包含多模态特征处理)self.user_tower = nn.Sequential(nn.Linear(user_feat_dim, 512),
nn.ReLU(),
nn.Linear(512, 256) # 最终输出用户向量维度
)
# 广告塔
self.ad_tower = nn.Sequential(nn.Linear(ad_feat_dim, 256),
nn.ReLU(),
nn.Linear(256, 256) # 需与用户塔输出维度一致
)
def forward(self, user_feats, ad_feats):
user_emb = self.user_tower(user_feats) # [batch_size, 256]
ad_emb = self.ad_tower(ad_feats) # [batch_size, 256]
return user_emb, ad_emb
InfoNCE 损失函数实战
def info_nce_loss(user_embs, pos_ad_embs, neg_ad_embs, temperature=0.1):
"""
user_embs: 用户向量 [batch_size, dim]
pos_ad_embs: 正样本广告向量 [batch_size, dim]
neg_ad_embs: 负样本广告向量 [batch_size, num_neg, dim]
"""
# 计算正样本得分
pos_scores = torch.sum(user_embs * pos_ad_embs, dim=-1) # [batch_size]
pos_scores = torch.exp(pos_scores / temperature)
# 计算负样本得分
user_embs_expanded = user_embs.unsqueeze(1) # [batch_size, 1, dim]
neg_scores = torch.sum(user_embs_expanded * neg_ad_embs, dim=-1) # [batch_size, num_neg]
neg_scores = torch.exp(neg_scores / temperature).sum(dim=-1)
# 计算损失
losses = -torch.log(pos_scores / (pos_scores + neg_scores))
return losses.mean()
性能优化关键点
负采样策略选择
- 随机负采样 :简单但效果差,易采样 ” 假负样本 ”
- Batch 内负采样 :复用同 batch 其他正样本作为负样本,节省计算
- 困难负样本挖掘 :存储近期高得分但未点击的广告作为负样本池
Faiss 加速检索
import faiss
# 构建广告向量索引
d = 256 # 向量维度
index = faiss.IndexFlatIP(d) # 内积相似度
index.add(ad_embeddings) # 添加所有广告向量
# 线上实时查询
D, I = index.search(user_embedding, k=100) # 返回 top100 相似广告
避坑指南
特征穿越预防
- 严格划分训练 / 验证时间窗口
- 禁用未来特征(如次日点击率)
- 在线服务使用 T + 1 更新策略
AB 测试指标设计
- 核心指标 :
- CTR 提升幅度(需统计显著)
- 广告主 ROI 变化
- 辅助指标 :
- 长尾广告曝光占比
- 新广告冷启动速度
思考题
在跨渠道广告(搜索 + 信息流 + 视频)场景中,如何设计统一的对比学习策略?考虑:
1. 渠道特性差异如何处理
2. 用户行为序列如何融合
3. 负样本如何跨渠道构建
正文完
发表至: 未分类
近一天内
