📑 本页目录(点开跳转)
排序与多目标
⏱ 30 分钟 | ⭐ 推荐赛的主战场
🎯 一句话
召回决定上限,排序决定你实际拿到多少。这一章从 Wide&Deep 讲到 DeepFM 再到序列建模和多目标,但对竞赛来说更实用的是最后两节:推荐赛题的 Trick 和常见踩坑点。
一、排序模型演进
| 模型 | 核心改进 | 年份 |
|---|---|---|
| LR | 基础线性模型,人工特征交叉 | 2010 |
| FM | 自动二阶特征交叉 | 2010 |
| Wide & Deep | 记忆(Wide)+泛化(Deep) | 2016 |
| DeepFM | FM替代Wide部分,端到端训练 | 2017 |
| DIN | 注意力机制建模用户兴趣 | 2018 |
| DIEN | 兴趣演化网络,捕捉兴趣变化 | 2019 |
二、Wide & Deep
架构
| 组件 | 作用 | 特点 |
|---|---|---|
| Wide部分 | 记忆能力,学习特征共现 | 交叉特征(如"男+体育") → Dense(1) |
| Deep部分 | 泛化能力,学习特征组合 | Dense特征 → 多层DNN → Dense(1) |
| 合并层 | Wide+Deep输出合并 | concatenate → Dense(1, sigmoid) |
特征处理
| 特征类型 | Wide部分 | Deep部分 |
|---|---|---|
| 类别特征 | 交叉组合(如gender_x_sport) | Embedding → concat |
| 连续特征 | 归一化后直接输入 | 归一化后直接输入 |
| 交叉特征 | 手动构造(关键) | 自动学习 |
优劣势
| 优势 | 劣势 |
|---|---|
| Wide部分记忆能力强 | Wide部分需人工构造交叉特征 |
| Deep部分泛化能力强 | 两部分需分别优化 |
| 工业界成熟方案 | 交叉特征工程量大 |
三、FM与DeepFM
FM(Factorization Machine)
| 维度 | 说明 |
|---|---|
| 核心公式 | y = w0 + sum(wixi) + sum( |
| 关键创新 | 用隐向量内积 |
| 优势 | 自动学习二阶交叉,无需人工特征工程 |
| 劣势 | 仅二阶交叉,缺乏高阶交叉能力 |
DeepFM
| 组件 | 作用 | 与Wide&Deep区别 |
|---|---|---|
| FM部分 | 替代Wide,自动二阶交叉 | 无需人工交叉特征 |
| Deep部分 | 高阶特征交叉 | 与Wide&Deep相同 |
| 共享Embedding | FM和Deep共享同一套Embedding | 减少参数,联合训练 |
| 对比 | Wide & Deep | DeepFM |
|---|---|---|
| Wide部分 | LR+人工交叉 | FM自动交叉 |
| 特征工程 | 需人工构造交叉 | 无需人工交叉 |
| Embedding | Wide和Deep独立 | 共享Embedding |
| 训练方式 | 联合训练 | 端到端联合训练 |
| 竞赛推荐 | 有领域知识时 | 通用首选 |
四、序列建模
用户行为序列
| 维度 | 说明 |
|---|---|
| 输入 | 用户历史交互物品序列[item1, item2, ..., itemN] |
| 目标 | 从序列中提取用户兴趣表示 |
| 挑战 | 序列长度不一、兴趣随时间变化、多兴趣并存 |
序列建模方法对比
| 方法 | 原理 | 优势 | 劣势 |
|---|---|---|---|
| Mean Pooling | 对序列Embedding取平均 | 简单快速 | 丢失顺序信息 |
| RNN/LSTM | 递归处理序列 | 捕捉顺序依赖 | 训练慢,长序列梯度消失 |
| TextCNN | 多尺度卷积核提取局部模式 | 并行训练快 | 全局依赖弱 |
| Transformer/BST | 自注意力机制 | 全局依赖+并行 | 计算量大 |
DIN(Deep Interest Network)
| 维度 | 说明 |
|---|---|
| 核心思想 | 用注意力机制对用户历史行为加权,与候选物品相关的行为权重高 |
| Attention计算 | alpha_i = softmax(MLP([vi, va, vi-va, vi*va])) |
| vi | 历史物品i的Embedding |
| va | 候选物品的Embedding |
| 优势 | 自适应关注相关行为,不同候选物品激活不同兴趣 |
| 竞赛价值 | 推荐赛题中排序模型的核心组件 |
BST(Behavior Sequence Transformer)
| 维度 | 说明 |
|---|---|
| 核心思想 | 用Transformer编码用户行为序列 |
| 位置编码 | 时间间隔编码(相对时间),而非绝对位置 |
| 优势 | 全局注意力,捕捉长距离依赖 |
| 与DIN对比 | DIN是局部注意力(只看与候选相关),BST是全局注意力 |
五、多目标算法
动机
| 问题 | 说明 |
|---|---|
| 多目标冲突 | 点击率(CTR)和转化率(CVR)可能冲突,优化一个损害另一个 |
| 业务需求 | 同时优化点击、收藏、购买、停留时长等多个指标 |
| 竞赛场景 | 赛题可能同时评估多个指标 |
Shared-Bottom
| 维度 | 说明 |
|---|---|
| 结构 | 共享底层网络 → 多个任务特定输出头 |
| 优势 | 参数少,简单 |
| 劣势 | 任务差异大时负迁移(任务间互相干扰) |
MMOE(Multi-Gate Mixture-of-Experts)
| 维度 | 说明 |
|---|---|
| 结构 | 多个Expert网络 + 每个任务一个Gate(门控) |
| Expert | 多个独立的DNN网络,学习不同特征表示 |
| Gate | 为每个任务学习Expert的权重组合:g(x) = softmax(W_g * x) |
| 输出 | 每个任务的输入 = sum(gate_i * expert_i(x)) |
| 优势 | 任务间软共享,避免负迁移 |
| 关键 | Expert数量和Gate设计 |
PLE(Progressive Layered Extraction)
| 维度 | 说明 |
|---|---|
| 改进 | 在MMOE基础上增加任务特定Expert + 共享Expert |
| CGC层 | Customized Gate Control:任务Expert + 共享Expert → Gate |
| 多层堆叠 | 多层CGC逐步提取高层次特征 |
| 优势 | 更好地平衡共享和任务特定知识 |
| 竞赛表现 | 目前多目标竞赛中最强方案之一 |
六、知识图谱应用
知识图谱嵌入
| 方法 | 原理 | 适用 |
|---|---|---|
| TransE | h + r ≈ t (头实体+关系≈尾实体) | 1对1关系 |
| TransH | 将实体投影到关系超平面再计算 | 1对多/多对1关系 |
| TransR | 实体空间和关系空间分离 | 复杂关系 |
知识图谱增强推荐
| 方法 | 说明 |
|---|---|
| 实体链接 | 将物品与知识图谱实体对齐 |
| 路径推理 | 用户→实体→关系→实体,发现潜在兴趣 |
| 特征增强 | 用知识图谱Embedding作为物品附加特征 |
七、推荐赛题Trick
特征工程
| 特征类型 | 示例 |
|---|---|
| 用户统计 | 历史点击数、购买数、活跃天数 |
| 物品统计 | 总点击数、点击率、转化率 |
| 交叉统计 | 用户类别x物品类别点击率 |
| 时间特征 | 最近N天点击数、时间间隔统计 |
| 序列特征 | 最近点击物品类别分布、兴趣变化率 |
序列建模Trick
| Trick | 说明 |
|---|---|
| 序列截断 | 取最近50~100个行为,过长序列效果反而差 |
| 时间衰减 | 近期行为权重更高 |
| 行为类型区分 | 点击/收藏/购买分别建模 |
| 负反馈 | 不喜欢/取消收藏等负反馈单独处理 |
训练技巧
| 技巧 | 说明 |
|---|---|
| 负采样 | 随机负采样 + 热门物品负采样 |
| 样本权重 | 正样本权重 > 负样本权重 |
| 特征重要性 | 用LightGBM筛选重要特征再送入深度模型 |
| 多折验证 | 按时间划分验证集,避免数据泄露 |
八、竞赛实战流程
| 阶段 | 步骤 | 工具/方法 |
|---|---|---|
| 1. Baseline | ItemCF召回 + LR排序 | Python, pandas |
| 2. 召回优化 | 多路召回 + 向量召回 | DeepWalk, DSSM |
| 3. 排序优化 | DeepFM/DIN排序 | TensorFlow/PyTorch |
| 4. 多目标 | MMOE/PLE多任务学习 | 多目标损失加权 |
| 5. 特征工程 | 交叉特征 + 序列特征 | LightGBM筛选 |
| 6. 融合冲刺 | 多模型融合 + 规则修正 | 加权平均/Stacking |
九、高级排序模型
DCN(Deep & Cross Network)
| 维度 | 说明 |
|---|---|
| 核心思想 | 用Cross Network自动学习有界阶的特征交叉,替代Wide部分 |
| Cross层 | x_{l+1} = x_0 * (w_l^T * x_l) + b_l + x_l,每层增加一阶交叉 |
| DCN V2 | 用低秩矩阵替代全参数交叉,更高效 |
| 与DeepFM区别 | DeepFM做二阶交叉,DCN可做任意阶有界交叉 |
| 竞赛应用 | 特征交叉丰富的场景,如电商推荐 |
AutoInt
| 维度 | 说明 |
|---|---|
| 核心思想 | 用多头自注意力机制自动学习特征间交互 |
| 优势 | 可解释性强(注意力权重可视化特征交互) |
| 交互方式 | 每个特征域的Embedding通过注意力与其他域交互 |
| 适用场景 | 特征域多、交叉关系复杂的场景 |
xDeepFM
| 维度 | 说明 |
|---|---|
| 核心思想 | 用压缩交互网络(CIN)在向量级别学习高阶特征交叉 |
| 与DCN区别 | DCN在bit级别交叉,xDeepFM在向量级别交叉 |
| 优势 | 向量级交叉更精细,可学习更复杂的高阶交互 |
| 劣势 | 训练速度比DCN慢 |
十、多目标进阶
ESMM(Entire Space Multi-Task Model)
| 维度 | 说明 |
|---|---|
| 核心问题 | 转化率(CVR)预测存在样本选择偏差和数据稀疏问题 |
| 解决方案 | pCTCVR = pCTR * pCVR,用曝光样本训练CTR和CTCVR,间接学习CVR |
| 优势 | 在全样本空间训练,避免选择偏差;CTR和CVR共享Embedding缓解稀疏 |
| 竞赛应用 | 同时优化点击率和转化率的推荐赛题 |
DBMTL(Deep Bayesian Multi-Task Learning)
| 维度 | 说明 |
|---|---|
| 核心思想 | 用贝叶斯网络建模多目标间的因果关系 |
| 优势 | 显式建模目标间依赖关系(如购买依赖点击) |
| 与ESMM区别 | ESMM只建模CTR→CVR,DBMTL可建模更复杂的因果图 |
多目标损失权重调优
| 方法 | 说明 |
|---|---|
| 固定权重 | 手动设置各任务Loss权重,简单但需经验 |
| Uncertainty Weighting | 用同方差不确定性自动学习权重 |
| GradNorm | 平衡各任务梯度大小,避免某个任务主导训练 |
| DWA(Dynamic Weight Averaging) | 根据各任务Loss下降速度动态调整权重 |
十一、推荐系统竞赛常见踩坑点
| 坑点 | 原因 | 解决方案 |
|---|---|---|
| 召回不足 | 单路召回覆盖率低 | 多路召回合并 |
| 冷启动差 | 新用户/物品无交互历史 | 内容特征召回 + 跨域推荐 |
| 排序过拟合 | 特征过多或训练数据不足 | 特征筛选 + 正则化 + 早停 |
| 多目标冲突 | CTR和CVR优化方向相反 | MMOE/PLE软共享 |
| 负采样偏差 | 随机负采样过于简单 | 热门物品负采样 + 混合负采样 |
| 数据泄露 | 用未来数据训练 | 严格按时间划分训练/验证 |
| 序列过长 | 全部历史行为噪声大 | 截断最近50~100个行为 |
🔗 这一章连到哪里
| 去哪 | 为什么 |
|---|---|
| 推荐算法 08 深度学习推荐模型 | Wide&Deep / DeepFM / MMoE 的结构与动机 |
| 推荐算法 09 序列推荐 | DIN / SASRec 这类行为序列建模的原理 |
| 推荐算法 05 矩阵分解 | FM 的源头:Embedding 和二阶交叉是从这里长出来的 |
✅ 检查点
- Wide&Deep 的 Wide 部分和 Deep 部分各负责什么?
- FM 解决了什么问题?DeepFM 在它之上加了什么?
- 多目标建模里,Shared-Bottom 和 MMoE 的关键区别是什么?
- 推荐赛题里最常见的踩坑点是什么?
- 为什么推荐赛里「特征工程」的权重比很多人以为的高?
👀 答案
- Wide 部分负责「记忆」——用交叉特征直接记住历史上出现过的强共现组合;Deep 部分负责「泛化」——通过 Embedding 学到未出现过组合的相似性。两者互补:只有 Wide 会缺乏泛化,只有 Deep 可能对强规则记不牢。
- FM 解决的是「稀疏特征下二阶交叉难学」的问题:直接给每一对特征组合一个权重的话,很多组合在训练集里根本没出现过,权重学不到。FM 用每个特征一个隐向量、交叉权重用内积表示,从而能泛化到没见过的组合。DeepFM 在 FM 之上并联了一个 DNN,同时拿到低阶(FM)和高阶(DNN)的交互。
- Shared-Bottom 底层完全共享,任务冲突时会互相拖后腿(跷跷板效应);MMoE 用多个专家网络 + 每个任务一个门控,让每个任务自己决定用哪些专家,任务冲突时能各取所需。PLE 进一步区分「共享专家」和「任务专属专家」。
- 训练和预测的候选集不一致。训练时用的负样本分布,和线上/测试时实际面对的候选分布不同,导致离线指标很好但提交后崩掉。其次是时间穿越——用了预测时点之后才产生的行为统计特征。
- 因为推荐赛的信号大量藏在「交互统计」里而不是原始 ID 里:用户近 N 天的行为次数、类目偏好分布、物品的近期热度和衰减、用户-物品的历史共现次数……这些聚合统计特征往往比换一个更复杂的模型收益大得多,而且树模型就能吃得很好。
🛑 可以停在这里
⚡ 走神救援
召回决定上限,排序决定你实际拿到多少。Wide&Deep:Wide 负责记忆(交叉特征记住强共现),Deep 负责泛化(Embedding 学未见组合的相似性)。⭐FM 解决「稀疏特征下二阶交叉难学」——很多组合训练集里根本没出现过,FM 用每个特征一个隐向量、交叉权重取内积,从而能泛化;DeepFM = FM 并联 DNN,同时拿低阶和高阶交互。多目标:Shared-Bottom 底层全共享会有跷跷板效应,MMoE 用多专家+每任务一个门控让任务各取所需,PLE 再区分共享/专属专家。⚠️⭐推荐赛最常见的坑:训练和预测的候选集不一致(负样本分布对不上,离线好提交崩),其次是时间穿越。⭐特征工程权重比很多人以为的高——信号大量藏在交互统计里(近N天行为次数、类目偏好分布、物品热度衰减、用户-物品共现),这些聚合特征往往比换更复杂的模型收益大得多。