配置文件是:https://github.com/alibaba/TorchEasyRec/blob/master/examples/dbmtl_taobao.config
一、什么是 DBMTL
DBMTL = Deep Bayesian Multi-Target Learning,是一种多任务学习模型。
核心思想是利用贝叶斯任务关系建模——任务之间不是独立的,而是有因果依赖的。比如用户先"点击"才可能"购买",CVR 依赖于 CTR。
二、数据与特征
数据源
训练数据: odps://{PROJECT}/tables/taobao_multitask_sample_v1_train 评估数据: odps://{PROJECT}/tables/taobao_multitask_sample_v1/ds=20170513
从 MaxCompute 读取淘宝多任务样本数据,使用 FG_DAG 模式(C++ DAG 引擎处理特征)。
标签(双目标)
label_fields: "clk" ← 是否点击(CTR 任务) label_fields: "buy" ← 是否购买(CVR 任务)
特征一览(16 个特征,全部 embeddingdim=16)
| 特征名 | 类型 | 侧 | 含义 | 桶数/哈希 |
| user_id | IdFeature | user | 用户 ID | 1,141,730 |
| cms_segid | IdFeature | user | 用户人群分段 | 98 |
| cms_group_id | IdFeature | user | 用户人群组 | 14 |
| final_gender_code | IdFeature | user | 性别 | 3 |
| age_level | IdFeature | user | 年龄段 | 8 |
| pvalue_level | IdFeature | user | 消费档次 | 5 |
| shopping_level | IdFeature | user | 购物频次等级 | 5 |
| occupation | IdFeature | user | 职业 | 3 |
| new_user_class_level | IdFeature | user | 新用户等级 | 6 |
| adgroup_id | IdFeature | item | 广告组 ID | 846,812 |
| cate_id | IdFeature | item | 商品类目 | 12,961 |
| campaign_id | IdFeature | item | 营销活动 ID | 423,438 |
| customer | IdFeature | item | 广告主 | 255,877 |
| brand | IdFeature | item | 品牌 | 461,498 |
| price | RawFeature | item | 价格(98 个分桶边界离散化) | 99 桶 |
| pid | IdFeature | context | 广告资源位 | hashbucket=20 | |
9 个 user 特征 + 6 个 item 特征 + 1 个 context 特征,所有特征放入一个 "all" 特征组。
三、模型结构
对应配置中的各层:
① 共享底层 Bottom MLP
bottom_mlp { hidden_units: [512] }
所有特征 embedding 拼接后(256维)→ 512 维隐层。这是 CTR 和 CVR 共享的表征。
② CTR Tower(点击预测)
tower_name: "ctr"
label_name: "clk"
mlp { hidden_units: [256, 128, 64] }
loss: binary_cross_entropy
metric: auc
512 → 256 → 128 → 64 → 1,预测点击概率。
③ CVR Tower(购买预测)— 贝叶斯关系建模
tower_name: "cvr"
label_name: "buy"
mlp { hidden_units: [256, 128, 64] } ← 本 tower 没有配 mlp!
relation_tower_names: "ctr" ← 依赖 CTR tower
relation_mlp { hidden_units: [64] }
loss: binary_cross_entropy
metric: auc (thresholds: 1000)
这是 DBMTL 的核心特点:CVR tower 没有配置自己的 mlp,所以直接用 bottom_mlp 的 512 维输出。然后:
- 将 bottom_mlp 输出(512维)与 CTR tower 的 MLP 输出(64维)做 concat(576维)
- 通过
relation_mlp [64]融合(576 → 64) - 线性层输出购买概率
这体现了贝叶斯因果链:P(buy) = P(buy|click) × P(click),CVR 的预测依赖 CTR 的中间表征。
四、训练参数
| 参数 | 值 | 含义 |
| batch_size | 8192 | 每批样本数 |
| num_epochs | 1 | 训练 1 轮 |
| num_workers | 8 | 数据加载并行度 |
| sparse_optimizer | Adagrad (lr=0.001) | Embedding 参数优化器 |
| dense_optimizer | Adam (lr=0.001) | MLP 参数优化器 |
| 学习率调度 | constant | 固定学习率 |
稀疏/稠密分离优化是推荐系统标准做法:Embedding 参数稀疏更新用 Adagrad,MLP 参数稠密更新用 Adam。
五、与普通多任务模型的区别
| 模型 | 任务关系 |
| SharedBottom | 共享底层,任务独立输出 |
| MMoE | 多专家 + 门控,任务独立但自适应选择专家 |
| DBMTL | 显式建模任务因果链(CTR → CVR),后续任务拼接前序任务的输出 |
配置中注释掉的 expert_mlp 和 num_expert 说明 DBMTL 也可以在 bottom 层加 MMoE,但这个例子选择了更简单的 shared bottom MLP 方案。