1. 项目概述
2025年腾讯广告算法大赛提出了一个颠覆性的推荐系统新范式——将推荐任务重新定义为序列生成问题。这个baseline项目展示了如何用Transformer架构实现"生成式推荐",标志着推荐系统从传统的多阶段pipeline向端到端统一建模的重大转变。
作为一名长期从事推荐算法研发的工程师,我认为这次比赛最大的突破在于:它不再将推荐视为静态的CTR/CVR预测问题,而是将其重构为动态的序列生成任务。用户行为序列被token化处理,推荐过程转化为类似语言模型的next-token预测。这种思路与当前大语言模型(LLM)的技术路线高度一致,我们称之为"推荐系统的LLM化"。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 任务本质:从"打分"到"生成"
2.1 问题建模
每个用户被表示为:
python复制[user_token, item_1, item_2, ..., item_T]
其中每个item包含:
- ID/类别信息
- 行为类型(曝光/点击/转化)
- 多模态embedding(文本+图像)
目标函数简化为:
python复制预测下一个最可能点击/转化的广告
这种建模方式的革命性在于:
- 将离散的用户行为转化为连续的token序列
- 推荐任务转化为自回归预测问题
- 多模态特征直接融入序列上下文
2.2 与传统推荐的对比
| 维度 | 传统推荐 | 本比赛方案 |
|---|---|---|
| 任务形式 | CTR/CVR预测 | next-item生成 |
| 特征处理 | 静态特征拼接 | 动态序列建模 |
| 驱动方式 | ID特征为主 | 语义+多模态 |
| 系统架构 | 多阶段pipeline | 端到端统一建模 |
这种转变带来的核心优势是:
- 更好地捕捉用户兴趣的动态演变
- 自然处理多模态内容理解
- 简化推荐系统架构
3. 数据:工业级复杂度的挑战
3.1 数据规模与分布
比赛提供了两个级别的数据集:
- TencentGR-1M(百万级样本)
- TencentGR-10M(千万级样本)
关键统计数据:
- 用户量:100万→1000万
- 广告量:百万级
- 序列长度:100
- 行为分布:
- 曝光:>90%
- 点击:~3%
- 转化:~2%
3.2 多模态特征处理
广告不再仅用ID表示,而是包含:
python复制文本embedding(Qwen/BERT)
图像embedding(LLaVA/Hunyuan)
这种设计迫使模型必须:
- 理解广告的语义内容
- 将视觉信息融入推荐决策
- 处理异构特征的空间对齐
4. Baseline架构解析
4.1 整体流程
mermaid复制graph TD
A[用户行为序列] --> B[Token构建]
B --> C[Transformer编码]
C --> D[User embedding]
D --> E[ANN检索]
E --> F[TopK推荐]
4.2 核心组件
4.2.1 Token设计
每个item被编码为:
code复制ID embedding +
类别 embedding +
行为 embedding +
多模态 embedding
这种设计实现了:
- 保留传统推荐的特征工程
- 融入多模态理解能力
- 统一不同模态的特征空间
4.2.2 模型Backbone
采用Causal Transformer(类似GPT):
- 仅关注历史信息(因果mask)
- 输出每一步的用户状态
- 最后一层hidden state作为用户表征
4.2.3 训练目标
两阶段优化:
- 基础阶段:最大化正样本>负样本
- 精调阶段:conversion权重大于click
这种设计反映了业务优先级:
CTR → CVR的递进优化
5. 代码深度解读
5.1 仓库结构
code复制.
├── dataset.py # 数据加载与处理
├── main.py # 训练入口
├── model.py # 核心模型
├── infer.py # 推理逻辑
├── eval.py # 评估脚本
├── model_rqvae.py # RQ-VAE扩展
└── faiss-based-ann # ANN检索实现
5.2 关键代码模块
5.2.1 特征处理(feat2emb)
python复制def feat2emb(self, feature_dict, include_user=True):
# 1. 基础ID embedding
if include_user:
user_emb = self.user_emb(feature_dict['user'])
item_emb = self.item_emb(feature_dict['item'])
else:
item_emb = self.item_emb(feature_dict['item'])
# 2. 多模态特征投影
emb_features = []
for k in self.ITEM_EMB_FEAT:
emb = feature_dict[k]
proj = self.emb_transform[k](emb)
emb_features.append(proj)
# 3. 特征融合
all_features = torch.cat([item_emb] + emb_features, dim=-1)
return self.itemdnn(all_features)
5.2.2 序列编码(log2feats)
python复制def log2feats(self, log_seqs, mask, seq_feature):
# 1. 特征嵌入
seqs_emb = self.feat2emb(seq_feature)
# 2. 位置编码
positions = torch.arange(seqs_emb.size(1)).unsqueeze(0)
seqs_emb += self.pos_emb(positions)
# 3. Transformer编码
for layer in range(self.num_blocks):
# Multi-head Attention
seqs_emb = self.attention_layers[layer](seqs_emb, mask)
# Feed Forward
seqs_emb = self.forward_layers[layer](seqs_emb)
return self.last_layernorm(seqs_emb)
6. 工业实践启示
6.1 生成式建模+检索式推理
baseline采用了折中方案:
- 训练:生成式目标(next-item预测)
- 推理:检索式执行(ANN搜索)
这种设计平衡了:
- 建模的先进性
- 工业落地的可行性
- 线上服务的实时性
6.2 多模态特征工程
项目展示了如何:
- 处理预计算的embedding
- 设计特征投影层
- 实现跨模态特征对齐
6.3 评估体系设计
比赛评测重点关注:
- 召回率@K
- 转化率提升
- 多目标平衡
7. 优化方向建议
基于baseline的改进空间:
7.1 模型架构
- 引入更高效的attention机制
- 尝试多兴趣表征
- 加入时间衰减因子
7.2 特征工程
- 设计跨模态交互层
- 引入图结构信息
- 添加用户画像特征
7.3 训练策略
- 课程学习(从易到难)
- 多任务学习
- 对抗训练
8. 实操建议
8.1 环境配置
bash复制# 推荐使用conda环境
conda create -n taac2025 python=3.8
conda activate taac2025
# 安装核心依赖
pip install torch==1.12.0+cu113 -f https://download.pytorch.org/whl/torch_stable.html
pip install transformers==4.18.0
# 编译Faiss
git clone https://github.com/facebookresearch/faiss.git
cd faiss && mkdir build && cd build
cmake .. -DFAISS_ENABLE_GPU=ON
make -j8
8.2 训练技巧
- 学习率预热:
python复制scheduler = get_linear_schedule_with_warmup(
optimizer,
num_warmup_steps=1000,
num_training_steps=total_steps
)
- 梯度裁剪:
python复制torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
- 混合精度训练:
python复制scaler = torch.cuda.amp.GradScaler()
with torch.cuda.amp.autocast():
loss = model(features)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
9. 常见问题排查
9.1 内存溢出
症状:训练时GPU内存不足
解决方案:
- 减小batch_size
- 使用梯度累积
- 启用checkpointing
9.2 收敛困难
症状:loss波动大或不下降
检查点:
- 学习率是否合适
- 特征归一化是否合理
- 数据shuffle是否充分
9.3 推理延迟高
优化方向:
- 量化模型参数
- 优化Faiss参数
- 使用更高效的ANN算法
10. 项目意义与展望
这个baseline标志着推荐系统发展的新方向:
- 从静态推荐到动态生成
- 从ID驱动到语义理解
- 从人工特征到自动表征
未来可能的发展:
- 更大规模的序列建模
- 与LLM的更深度结合
- 多模态交互的进一步增强
在实际业务中应用时需要注意:
- 线上服务的性能考量
- 多目标之间的平衡
- 用户体验的一致性
这个项目最值得借鉴的是它展示了一种渐进式的技术升级路径——既拥抱生成式AI的新范式,又保持了工业推荐系统的务实特性。对于从业者来说,理解这种平衡的艺术可能比单纯追求模型复杂度更为重要。
