news 2026/4/29 17:02:57

告别任务打架!用MMoE搞定推荐系统里的CTR和观看时长预测(附Keras代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别任务打架!用MMoE搞定推荐系统里的CTR和观看时长预测(附Keras代码)

多任务学习实战:用MMoE模型解决推荐系统中的CTR与观看时长预测冲突

推荐系统工程师们每天都在面对一个永恒的矛盾:用户点击了内容不代表他们会认真观看,而长时间观看的内容又未必能获得高点击率。这种"点击率(CTR)与观看时长"的跷跷板效应困扰着无数算法团队。传统解决方案要么训练两个独立模型导致资源浪费,要么使用共享底层网络的多任务学习(MTL)模型遭遇性能瓶颈。2018年Google提出的MMoE(Multi-gate Mixture-of-Experts)架构为这个问题提供了优雅的解决方案——它像一位精通多国语言的同声传译,能同时理解不同任务的"语言"并给出恰当响应。

1. 多任务学习的困境与破局点

短视频平台的数据看板前,算法工程师小张盯着两组曲线发愁:A/B测试显示,新上线的CTR预测模型使点击率提升了2%,但平均观看时长却下降了15秒。这种"按下葫芦浮起瓢"的现象在推荐系统优化中屡见不鲜,其根源在于传统多任务学习模型的三大结构性缺陷:

  1. 共享底层的暴力统一:典型的Shared-Bottom结构强制所有任务共用底层特征表示,就像用同一把钥匙开所有锁
  2. 任务冲突的忽视:CTR预测关注用户瞬时兴趣,观看时长反映内容深度价值,二者的特征重要性分布存在本质差异
  3. 参数利用的低效:为缓解冲突而增加任务专属参数,会导致模型体积膨胀且难以收敛

MMoE的创新之处在于引入了"专家委员会"机制——多个专家网络形成知识池,配合任务专属的门控系统动态组合专家意见。这种结构在保持参数效率的同时,实现了:

  • 差异化特征提取:不同任务可激活不同的专家组合
  • 冲突隔离:相互矛盾的任务信号通过不同专家路径传递
  • 知识共享:相关性强的任务自动共享专家资源
# MMoE核心思想可视化类比 class HumanBrain: def __init__(self): self.experts = {'视觉': VisionExpert(), '语言': LanguageExpert(), '逻辑': LogicExpert()} def process_task(self, task_type, inputs): gates = {'阅读': [0.2, 0.7, 0.1], '数学': [0.1, 0.3, 0.6]}[task_type] return sum(g * expert(inputs) for g, expert in zip(gates, self.experts.values()))

2. MMoE架构深度解析

2.1 从MoE到MMoE的进化之路

MMoE并非凭空诞生,它的前身是2017年Google提出的MoE(Mixture of Experts)结构。原始MoE如同一个"智能路由器",为每个输入样本选择最合适的专家处理:

输入x → 门控网络 → 专家1(权重0.7) ↘ 专家2(权重0.2) ↘ 专家3(权重0.1)

而MMoE的创新在于为每个任务配备独立门控系统,形成多级路由机制:

任务A门控 → 专家1(权重0.8) → 任务A输出 ↘ 专家2(权重0.2) 任务B门控 → 专家1(权重0.3) → 任务B输出 ↘ 专家2(权重0.7)

这种结构带来了两个关键优势:

  1. 任务感知的特征转换:相同输入经过不同门控权重产生任务专属表示
  2. 动态参数共享:专家网络在不同任务间形成柔性共享,而非硬性切分

2.2 模型数学形式化表达

MMoE的每个任务输出可表示为:

$$ y_k = h^k \left( \sum_{i=1}^n g_i^k(x) f_i(x) \right) $$

其中:

  • $f_i$ 表示第i个专家网络(共n个)
  • $g_i^k$ 表示第k个任务对第i个专家的门控权重
  • $h^k$ 是任务专属的Tower网络

门控网络实现为简单的softmax全连接层:

# Keras门控实现示例 def build_gate(input_dim, num_experts): return tf.keras.Sequential([ Dense(num_experts, activation='softmax'), Reshape((num_experts, 1)) ])

2.3 推荐场景下的特殊设计

针对CTR和观看时长预测这对"欢喜冤家",我们需要对标准MMoE做出三项改进:

  1. 差异化损失加权

    • CTR使用二分类交叉熵
    • 观看时长采用Huber损失(对异常值鲁棒)
    def hybrid_loss(y_true, y_pred): ctr_loss = tf.keras.losses.binary_crossentropy(y_true[0], y_pred[0]) duration_loss = tf.keras.losses.Huber()(y_true[1], y_pred[1]) return 0.7 * ctr_loss + 0.3 * duration_loss # 可调权重
  2. 特征工程策略

    • CTR侧重点击相关特征(如封面图embedding)
    • 时长侧重内容质量特征(如完播率统计量)
  3. 专家数量选择

    • 实践表明4-8个专家最适合推荐场景
    • 过多专家会导致门控网络训练困难

3. 工业级实现技巧与陷阱规避

3.1 训练稳定性的关键要素

在真实业务数据上训练MMoE时,我们总结出以下经验:

挑战解决方案效果提升
专家坍塌门控输出加入L2约束+5.3% AUC
梯度冲突任务特定BatchNorm层+2.1% 时长预测准确率
冷启动问题专家参数预训练收敛速度提升3倍

典型训练流程优化

  1. 预训练各专家作为独立单任务模型
  2. 固定专家参数,仅训练门控网络1000步
  3. 联合微调全部参数
# 分阶段训练示例 def train_mmoe(model, data): # 阶段1:专家预训练 for expert in model.experts: expert.trainable = True model.compile(optimizer='adam', loss=expert_specific_loss) model.fit(data, epochs=5) # 阶段2:门控网络训练 for expert in model.experts: expert.trainable = False model.compile(optimizer='rmsprop', loss=hybrid_loss) model.fit(data, steps_per_epoch=1000) # 阶段3:联合训练 for expert in model.experts: expert.trainable = True model.compile(optimizer=Adam(1e-4), loss=hybrid_loss) model.fit(data, epochs=20)

3.2 线上服务性能优化

MMoE的推理效率直接影响推荐系统的响应延迟。我们通过以下手段实现<50ms的99分位延迟:

  1. 专家并行计算

    # 使用@tf.function加速 @tf.function(experimental_compile=True) def expert_forward(inputs): return [expert(inputs) for expert in experts]
  2. 门控网络简化

    • 用低秩近似代替全连接层
    • 门控输出稀疏化(top-k专家选择)
  3. 缓存热点专家

    • 根据用户历史行为缓存专家组合
    • 减少实时计算量

4. 业务效果与案例研究

某头部短视频平台上线MMoE模型后,关键指标变化如下:

离线指标对比

模型类型CTR AUC时长MAE参数量
双塔独立0.71223.4s2.1M
Shared-Bottom0.72321.8s1.3M
MMoE-4专家0.74119.2s1.5M

在线AB测试结果

  • 人均观看时长提升11.6%
  • 互动率(点赞/评论)提升8.2%
  • 推荐多样性指标提升15.3%

实际部署中发现,当专家数量超过6个时,模型收益趋于平缓,而计算成本线性增长。建议从4专家开始逐步增加,通过离线评估确定最优数量。

模型的可解释性分析也揭示了有趣现象:CTR预测主要依赖"视觉特征专家",而观看时长更偏好"内容质量专家"。这种自动化的专家分工正是MMoE的核心价值所在。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 17:00:55

3步打造你的B站学习资料库:BiliTools跨平台工具箱完整指南

3步打造你的B站学习资料库&#xff1a;BiliTools跨平台工具箱完整指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

作者头像 李华
网站建设 2026/4/29 17:00:48

拆解 DeepSeek-R1 的“大脑重塑”术(GRPO与CoT的极致共舞)

大模型圈子里有一个心照不宣的秘密&#xff1a;传统的 LLM 其实都是“快思考”的奴隶。无论你问 GPT-4 还是 Claude 一个复杂的数学题&#xff0c;它们本质上都是在做一件事——凭借庞大的参数记忆&#xff0c;“脱口而出”下一个概率最大的 Token。这就像让一个没有草稿纸的学…

作者头像 李华
网站建设 2026/4/29 16:57:46

5个步骤掌握Fan Control:告别电脑噪音,实现智能风扇控制

5个步骤掌握Fan Control&#xff1a;告别电脑噪音&#xff0c;实现智能风扇控制 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHu…

作者头像 李华
网站建设 2026/4/29 16:53:24

【agent】

make_lead_agent 函数功能解析 这是 DeerFlow 的核心代理工厂函数,负责根据运行时配置创建主代理(Lead Agent)。它是生产环境的入口函数,处理配置解析、模型选择、中间件构建和工具加载。 核心职责 职责 说明 配置解析 从 RunnableConfig 提取运行时参数 模型解析 按优先级…

作者头像 李华