写点什么

Multi-task 多任务模型在推荐算法中应用

2019 年 11 月 29 日

Multi-task多任务模型在推荐算法中应用

1.阿里 ESMM:Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate


CVR 是指从点击到购买的转化,传统的 CVR 预估会存在两个问题:样本选择偏差和稀疏数据。



样本选择偏差是指模型用用户点击的样本来训练,但是预测却是用的整个样本空间。数据稀疏问题是指用户点击到购买的样本太少。因此阿里提出了 ESMM 模型来解决上述两个问题:主要借鉴多任务学习的思路,引入两个辅助的学习任务,分别用来拟合 pCTR 和 pCTCVR。



ESMM 模型由两个子网络组成,左边的子网络用来拟合 pCVR,右边的子网络用来拟合 pCTR,同时,两个子网络的输出相乘之后可以得到 pCTCVR。因此,该网络结构共有三个子任务,分别用于输出 pCTR、pCVR 和 pCTCVR。假设用 x 表示 feature(即 impression),y 表示点击,z 表示转化,那么根据 pCTCVR = pCTR * pCVR,可以得到:



则 pCVR 的计算为:



由上面的式子可知,pCVR 可通过 pCTR 和 pCTCVR 推导出来,那么我们只需要关注 pCTR 和 pCTCVR 两个任务即可,并且 pCTR 和 pCTCVR 都可以从整个样本空间进行训练?为什么呢,因为对于 pCTR 来说可将有点击行为的曝光事件作为正样本,没有点击行为的曝光事件作为负样本,对于 PCTCVR 来说,将同时有点击行为和购买行为的曝光事件作为正样本,其他作为负样本。模型的 loss 函数:



另外两个子网络的 embedding 层是共享的,由于 CTR 任务的训练样本量要远超过 CVR 任务的训练样本量,ESMM 模型中 embedding 层共享的机制能够使得 CVR 子任务也能够从只有展现没有点击的样本中学习,从而能够极缓解训练数据稀疏性问题。


  1. 阿里 DUPN:Perceive Your Users in Depth: Learning Universal User Representations from Multiple E-commerce Tasks


多任务学习的优势:可共享一部分网络结构,比如多个任务共享一份 embedding 参数。学习的用户、商品向量表示可方便迁移到其它任务中。本文提出了一种多任务模型 DUPN:



模型分为行为序列层、Embedding 层、LSTM 层、Attention 层、下游多任务层。


  • 行为序列层:输入用户的行为序列 x = {x1,x2,…,xN},其中每个行为都有两部分组成,分别是 item 和 property 项。item 包括商品 id 和一些 side-information 比如店铺 id、brand 等(好多场景下都要带 side-information,这样更容易学习出商品的 embedding 表示)。property 项表示此次行为的属性,比如场景(搜索、推荐等场景)时间、类型(点击、购买、加购等)。

  • Embedding 层,主要多 item 和 property 的特征做处理。

  • LSTM 层:得到每一个行为的 Embedding 表示之后,首先通过一个 LSTM 层,把序列信息考虑进来。

  • Attention 层:区分不同用户行为的重要程度,经过 attention 层得到 128 维向量,拼接上 128 维的用户向量,最终得到一个 256 维向量作为用户的表达。

  • 下游多任务层:CTR、L2R(Learning to Rank)、用户达人偏好 FIFP、用户购买力度量 PPP 等。

  • 另外,文中也提到了两点多任务模型的使用技巧:

  • 天级更新模型:随着时间和用户兴趣的变化,ID 特征的 Embedding 需要不断更新,但每次都全量训练模型的话,需要耗费很长的时间。通常的做法是每天使用前一天的数据做增量学习,这样一方面能使训练时间大幅下降;另一方面可以让模型更贴近近期数据。

  • 模型拆分:由于 CTR 任务是 point-wise 的,如果有 1w 个物品的话,需要计算 1w 次结果,如果每次都调用整个模型的话,其耗费是十分巨大的。其实 user Reprentation 只需要计算一次就好。因此我们会将模型进行一个拆解,使得红色部分只计算一次,而蓝色部分可以反复调用红色部分的结果进行多次计算。


  1. 美团“猜你喜欢”深度学习排序模型


根据业务目标,将点击率和下单率拆分出来,形成两个独立的训练目标,分别建立各自的 Loss Function,作为对模型训练的监督和指导。DNN 网络的前几层作为共享层,点击任务和下单任务共享其表达,并在 BP 阶段根据两个任务算出的梯度共同进行参数更新。网络在最后一个全连接层进行拆分,单独学习对应 Loss 的参数,从而更好地专注于拟合各自 Label 的分布。



这里有两个技巧可借鉴下:


  • Missing Value Layer:缺失的特征可根据对应特征的分布去自适应的学习出一个合理的取值。

  • KL-divergence Bound:通过物理意义将有关系的 Label 关联起来,比如 p(点击) * p(转化) = p(下单)。加入一个 KL 散度的 Bound,使得预测出来的 p(点击) * p(转化)更接近于 p(下单)。但由于 KL 散度是非对称的,即 KL(p||q) != KL(q||p),因此真正使用的时候,优化的是 KL(p||q) + KL(q||p)。


  1. Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts



  • 模型(a)最为常见,两个任务直接共享模型的 bottom 部分,只在最后处理时做区分,图(a)中使用了 Tower A 和 Tower B,然后分别接损失函数。

  • 模型(b)是常见的多任务学习模型。将 input 分别输入给三个 Expert,但三个 Expert 并不共享参数。同时将 input 输出给 Gate,Gate 输出每个 Expert 被选择的概率,然后将三个 Expert 的输出加权求和,输出给 Tower。有点 attention 的感觉

  • 模型©是作者新提出的方法,对于不同的任务,模型的权重选择是不同的,所以作者为每个任务都配备一个 Gate 模型。对于不同的任务,特定的 Gate k 的输出表示不同的 Expert 被选择的概率,将多个 Expert 加权求和,得到[公式],并输出给特定的 Tower 模型,用于最终的输出。

  • 其中 g(x)表示 gate 门的输出,为多层感知机模型,简单的线性变换加 softmax 层。


参考文献:


https://arxiv.org/pdf/1804.07931.pdf


https://www.jianshu.com/p/35f00299c059


https://arxiv.org/pdf/1805.10727.pdf


https://www.jianshu.com/p/aba30d1726ae


https://tech.meituan.com/2018/03/29/recommend-dnn.html


https://zhuanlan.zhihu.com/p/70


本文转载自 Alex-zhai 知乎账号。


原文链接:


https://zhuanlan.zhihu.com/p/78762586


2019 年 11 月 29 日 08:00344

评论

发布
暂无评论
发现更多内容

2021 DevOpsDays 东京站完美收官 | CODING 专家受邀分享最新技术资讯

CODING DevOps

CI/CD DevOpsDays CODING DevOps

并发王者课 - 青铜 3: 双刃剑-理解多线程带来的安全问题

秦二爷

Java 多线程 并发 王者并发课

ETL-KETTLE工具使用

this

Java 数据 数据同步 ETL

字节跳动Java岗一二三面全经过分享

北游学Java

Java 字节跳动 面试

仰望天空,脚踏实地 —— CODING OKR 全新上线

CODING DevOps

团队管理 OKR

活久见!22张图带你maven实战通关,GitHub上线1小时浏览量破万

java专业爱好者

Java

Spark知识点简单总结

五分钟学大数据

大数据 spark 5月日更

做一次黑客,入侵一次服务器

叫我阿柒啊

Docker 入侵 docker远程 redis注入

老生常谈:面试必问“三次握手,四次挥手”这么讲,保证你忘不了

程序员小毕

Java 程序员 面试 TCP 网络

飞猪基于 Serverless 的云+端实践与思考

阿里巴巴云原生

Serverless 容器 运维 云原生 监控

记十亿级Es数据迁移mongodb成本节省及性能优化实践

杨亚洲(专注mongodb及高性能中间件)

MySQL 数据库 mongodb 架构 分布式数据库mongodb

华为18级工程师十年之作,整整3625页互联网大厂面试题合集

周老师

Java 编程 程序员 架构 面试

重点人员管控监控平台建设,重点人口预警系统开发方案

WX13823153201

阿里云原生开源大家族加入中科院软件所开源软件供应链点亮计 - 暑期 2021

阿里巴巴云原生

开源 容器 微服务 开发者 云原生

量化马丁策略交易系统开发app,现货量化交易平台搭建

WX13823153201

Hive窗口函数与分析函数

大数据技术指南

hive 5月日更

ipfs矿机怎么组装?ipfs矿机合法吗?

v:IPFS456

ipfs矿机怎么组装? ipfs矿机合法吗?

我粉了!阿里大牛从内部带出来的百亿级高并发系统,从基础到实战、面面俱到

云流

Java 程序员 架构 面试

Kubernetes 普及系列:容器基础入门

CODING DevOps

Kubernetes

参与 Apache 顶级开源项目的 N 种方式,Apache Dubbo Samples SIG 成立!

阿里巴巴云原生

开源 开发者 云原生 dubbo 中间件

MindSpore:不用摘口罩也知道你是谁

华为云开发者社区

算法 人脸识别 口罩 mindspore 口罩人脸

百度智能小程序框架性能优化实践(上)

百度开发者中心

百度智能小程序 百度

腾讯T4一年心血成就17W字操作系统、网络教程(导图+笔记)

周老师

Java 编程 程序员 架构 面试

Gartner中文电子书:深度剖析数字化加速

Geek_bacee5

Gartner Gartner中文电子书 深度剖析数字化加速 数字化进程的指南 gartner中国

fil挖矿步骤教程是什么?fil挖矿规则是什么?

投资矿机v:IPFS1234

fil挖矿步骤教程是什么 fil挖矿规则是什么

每个开发人员都应该知道的 10 个 GitHub 仓库

LeanCloud

GitHub web开发

首届HarmonyOS开发者创新大赛颁奖典礼于深圳召开

科技汇

推荐计划 | 推荐好友用 CODING,获高额返现奖励

CODING DevOps

团队管理 敏捷开发 研发工具 开发团队

阿里P9架构师强烈推荐:想拿60W以上年薪必看,Java高并发四套小册。

Java架构追梦

Java 阿里巴巴 架构 面试 高并发

iOS面试--拼多多最新iOS开发面试题

一意孤行的程序员

ios swift 面试 ios开发 知识分享

玩转直播系列之消息模块演进(3)

vivo互联网技术

Java 服务器 消息系统 直播技术

「中国技术开放日·长沙站」现场直播

「中国技术开放日·长沙站」现场直播

Multi-task多任务模型在推荐算法中应用-InfoQ