写点什么

多任务学习在推荐算法中的应用(一)

2020 年 1 月 07 日

多任务学习在推荐算法中的应用(一)


导读:我们在优化推荐效果的时候,很多时候不仅仅需要关注 CTR 指标,同时还需要优化例如 CVR ( 转化率 )、视频播放时长、用户停留时长、用户翻页深度、关注率、点赞率这些指标。那么一种做法是对每个任务单独使用一个模型来优化,但是这样做的缺点显而易见,需要花费很多人力。其实很多任务之间都是存在关联性的,比如 CTR 和 CVR。那么能不能使用一个模型来同时优化两个或多个任务呢?其实这就是 Multi-task 多任务的定义。本文主要总结了近两年工业界关于 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 子任务也能够从只有展现没有点击的样本中学习,从而能够极缓解训练数据稀疏性问题。


本文转载自 DataFunTalk 公众号。


**原文链接:https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247496333&idx=1&sn=da03f8db68e5276cffe73e090ac271ec&chksm=fbd740e1cca0c9f76da90a713311bac81e9890c1f9fd69976705e167dd30e4135db6ea297d6b&scene=27#wechat_redirect


2020 年 1 月 07 日 09:49242

评论

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

Java 25周年:MovedByJava之观点

范学雷

Java 架构 编程语言

回“疫”录(22):我以为结束了,其实才开始

小天同学

疫情 回忆录 现实纪录 纪实

一个产品最不重要的东西

Neco.W

产品 外包 产品经理

Android | Tangram动态页面之路(五)Tangram原理

哈利迪

android

SpringBoot瘦身

JFound

Spring Boot sprnig

Elastic Stack 系列专辑

Yezhiwei

elasticsearch Logstash Kibana ELK Elastic Stack

职场“潜”规则

俊毅

个人成长 职场 新人 人才培养 能力模型

游戏夜读 | 写游戏用什么语言?

game1night

ARTS_20200520

凌轩

Java ARTS 打卡计划

万字长文带你看懂Mybatis缓存机制

程序员小岑

Java 源码 技术 mybatis

Django的ListView超详细用法(含分页paginate功能)

Young先生

Python django ListView 分页

kotlin 200行代码开发一个简化版Guice

陈吉米

Java kotlin guice ioc mynlp

Spring Security 如何将用户数据存入数据库?

江南一点雨

Java spring Spring Cloud Spring Boot spring security

Java开发架构篇:DDD模型领域层决策规则树服务设计

小傅哥

领域驱动设计 DDD 小傅哥 重构

关于架构的几件小事:System context

北风

系统架构 系统性思考 架构师 系统上下文 极客大学架构师训练营

企业数字化转型:用 SpreadJS 打造互通互链的电力系统物联网

Geek_Willie

数字化转型 SpreadJS 电力

nginx 概念及上手

HelloZyjS

Enhanced Github:一个 GitHub 专用的好插件

非著名程序员

GitHub 程序员 效率工具

往日之歌

彭宏豪95

SQLite是什么

这小胖猫

sqlite 数据库 RDBMS 存储

为提升网点业务员效率,我们做的事情。

黄大路

商业

Redis6.0 多线程源码分析

代码诗人

redis 源码 技术 线程模型

深入剖析ThreadLocal原理

JFound

Java

竟然有人想看我的「日记」,满足一下大家

非著名程序员

学习 程序人生 提升认知

我的编程之路-4(进阶)

顿晓

进阶 看书 编程之路

Redis 命令执行过程(下)

程序员历小冰

redis 源码分析

分布式系统选主怎么玩

奈学教育

分布式系统

敏捷为什么会失败之「PA-SA-WAKA-DA」理论

Worktile

Scrum 敏捷开发 Agile

程序员需要了解的硬核知识大全

cxuan

Java c 计算机基础

Spring Security+Spring Data Jpa 强强联手,安全管理只有更简单!

江南一点雨

Java spring Spring Boot spring security

一个前端工程师与死神的较量

陈辰

前端工程 压力 医院 生活质量 工程师

NLP领域的2020年大事记及2021展望

NLP领域的2020年大事记及2021展望

多任务学习在推荐算法中的应用(一)-InfoQ