# 基于PaddleRec打造多任务视频推荐方案
## 1. 项目概述
如今短视频行业特别火,很多人都喜欢在等车的时候,地铁上刷几个短视频,甚至在上厕所的时候也要刷上半天。但是你知道吗?短视频APP在向你展示一个大长腿/帅哥视频之前,通常既要预测你对这个视频感兴趣/不感兴趣,又要预测你会看多久?点赞还是不点赞?会不会偷偷收藏起来下次接着看?只有同时在这么多个维度都比较符合您的兴趣,短视频APP才会将这个视频推送到您的手机上。但是问题又来了,有这么多个想要预测的信息维度,如果将每种指标都看做一个任务,每个任务都搞一个模型来学。那花费的线上资源将是非常昂贵的。这个时候,多任务模型就可以出来拯救开发同学了,一个模型多任务学习来一次全搞定。
<div align=center> <img src="https://ai-studio-static-online.cdn.bcebos.com/57b962984d714dc4a2a65be2c15d6ebe8b8dfa59a1754130a20a0e3f98220cba" /></div>
本项目主要介绍如何使用飞桨大规模推荐算法库[PaddleRec](https://github.com/PaddlePaddle/PaddleRec) ,仅以短视频推荐场景为例,说明多任务技术的应用方法和收益,但多任务技术不仅仅可以使用于视频推荐中,也可以在比如电商场景的点击&转化(购买),信息流推荐场景的点击&点赞(评论,关注等一系列后续行为),搜索广告场景下的点击&再点击(相关广告,相关搜索,猜你喜欢等等)等场景下使用。
另有高级研发工程师直播视频讲解,欢迎扫码关注:<p align="center"><img width="200" height="200" margin="500" src="../../doc/imgs/aistudio_micro_video.png"/></p>
## 2. 什么是多任务学习
### 2.2 多任务学习的概念
多任务学习(multitask)的定义和形式有很多种。我觉得比较直观的理解是和单任务学习相对的一种机器学习方法。
以短视频推荐为例介绍单任务和多任务的区别:
(1)短视频推荐中,同时需要预测点赞率,完播率和收藏率。
(2)单任务学习就是忽略任务之间可能存在的关系分别学习3个回归函数进行分数的预测
(3)而多任务学习则看重任务之间的联系,通过联合学习,同时对3个任务学习不同的回归函数,既考虑到了任务之间的差别,又考虑到任务之间的联系,这也是多任务学习最重要的思想之一。
### 2.3多任务学习的好处
多任务算法的应用场景还是很广泛的,只要是推荐技术涉及的业务,比如搜索、广告还是推荐都有需求,另外无论是成熟的大规模推荐系统还是处于上升期的初创场景对于多个目标的联合训练一般都有强需求。常见多任务学习的动机和需求还是围绕提升(主)模型的精度(泛化能力)、资源性能和维护成本。
(1)多任务场景下,多个任务(相关性较强)会从不同的角度学习特征,增强模型泛化能力来提升收益,最常见的就是通过增加优化目标。针对很多数据集比稀疏的任务,比如短视频转发,大部分人看了一个短视频是不会进行转发这个操作的,这么稀疏的行为,模型是很难学好的(过拟合问题严重),那我们把预测用户是否转发这个稀疏的事情和用户是否点击观看这个经常发生事情放在一起学,一定程度上会缓解模型的过拟合,提高了模型的泛化能力。
(2)共享参数,不额外增加资源的前提下变相增加参数规模。推荐系统的核心是embedding,对于相关的多个目标,比如点击/时长等,用户及相关特征的重合或者接近的,多个任务共享这部分参数可以极大的节省离线和在线资源
(3)用数据更多的任务指导学习数据较少的任务。一般常见的就是某个任务的数据量较少,期望能通过大数据训练较好的模型指导稀疏数据场景下的模型,比如点击率和转化率,一跳场景和二跳场景。
(4)冷启模型的快速收敛。将冷启模型和收敛模型同时训练,帮助冷启模型可以在一个相对正确的方向上快速收敛。
(5)有更多反馈和指导的模型(人工参与或更接近用户反馈层)指导学习其他模型。最常见的就是在精排阶段或者重排序阶段有一些"精准"评分用来指导更上层的粗排或者召回模型
(6)多个模型合并为一个模型后的线上资源多路请求可以合并为一路,减少请求资源。这个一般是架构同学的强需求,毕竟线上资源还是非常贵的。
(7)减少多模型的维护成本。有很多策略和架构同学减少维护多个"相似"模型的需求是强烈的,一般一个模型有数据链条,离线训练任务,在线任务等多个环节,如果能合并成一个任务会极大的减轻工作量。
(8)混合数据中训练不同任务。由于数据生成或者任务形式的不同,常见的需求是期望不同的数据训练不同的模型(比如mlp塔),而不是所有数据都训练每个模型,这也是多任务学习中的常见需求。不同的数据一般指不同的样本 或者一条样本的不同特征。
## 3. 方案设计&模型选取
推荐系统(深度学习)的演变,往往是从简单到复杂的过程,综合精度和性能考虑,最常见的路径是线性模型/LR -> 双塔模型(user/item) -> DNN全链接 -> 多个目标的联合学习 / 更复杂的特征学习(wide&deep, deepfm等)。
我们在为短视频推荐任务选取模型的时候也可以从简单到复杂,从硬参数共享(Hard parameter sharing) 到软参数共享(Soft parameter sharing),常见的升级路线为从share-bottom -> MMOE -> CGC/PLE的路径,一步步优化,让模型给我们找出最符合口味的短视频。
## 4. 代码实现
![](https://ai-studio-static-online.cdn.bcebos.com/3118dfc6a33d476a99fa213c76da23b043bade642f134e70adf5e286f48e2931)
![](https://ai-studio-static-online.cdn.bcebos.com/2052d2786d14461981b2cf6e67437c28efbe3ff6d81648488c6266321181d97c)
![](https://ai-studio-static-online.cdn.bcebos.com/15415b029f8a4ba6aea182505f2a9afc5357734751d84dcc9ddbb03f7e526c50)
在模型实现方面,这里强烈推荐我们组在推荐方向的工作成果——大规模推荐算法库[PaddleRec](https://github.com/PaddlePaddle/PaddleRec),欢迎大家动手点点star。
我们在PaddleRec模型库中已经开源实现了上述三个模型[Share_Bottom](https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/share_bottom),[MMoE](https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/mmoe),[PLE](https://github.com/PaddlePaddle/PaddleRec/tree/master/models/multitask/ple)。并且进行了论文复现,可以非常方便的运行模型,并获得论文效果。并且我们尝试了在相同数据和参数规模下(**很重要,有可比性**),上述三个模型的效果随着模型的升级获得了较为显著的提升。
### 4.1 数据准备
由于没有合适的公开数据集,我们基于公开数据集构造了一个视频数据集。这个数据集会以视频的完播率和点赞率作为label,得到两个tasks, 然后计算不同模型的AUC, 进行比较。
数据集中格式以逗号为分割点,如下所示:
```
0,0,73,0,0,0,0,1700.09,0,0...
0,0,58,0,0,0,0,1053.55,1,0...
```
前两个数字为label,具体意义为完播率和点赞率。后面的数字为从该用户之前看过的视频中提取出的用户特征。
| label_1 | label_2 | 特征1 | 特征2 | 特征3 | 特征4 | 特征5 | 特征6 | 特征7 | 特征8 | 特征9 | ...... |
| :------| :------ | :------ | :------| :------ | :------| :------ | :------| :------ | :------| :------ | :------ |
| 完播 | 点赞 | 国家 | 地理 | 影视 | 旅游 |美食 | 游戏 | 跑车 | 美妆 | 科技 |
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Recommendation Algorithm大规模推荐算法库,包含推荐系统经典及最新算法LR、Wide&Deep、DSSM、TDM、MIND、Word2Vec、Bert4Rec、DeepWalk、SSR、AITM,DSIN,SIGN,IPREC、GRU4Rec、Yout….
资源推荐
资源详情
资源评论
收起资源包目录
Recommendation Algorithm大规模推荐算法库,包含推荐系统经典及最新算法LR (1369个子文件)
out_test.1 21.61MB
gradlew.bat 3KB
classAnalysis.bin 476KB
executionHistory.bin 27KB
sha1-checksums.bin 21KB
taskHistory.bin 20KB
md5-checksums.bin 19KB
fileHashes.bin 19KB
outputFiles.bin 18KB
last-build.bin 1B
beauty.candidate 163B
cube.pb.cc 73KB
miomf_result.pb.cc 24KB
control.pb.cc 22KB
data_feed.cc 622B
Main.class 8KB
ParserInputData.class 5KB
Config.class 4KB
Metric.class 4KB
Main$InferCallable.class 3KB
BatchSample.class 1KB
cube.conf 253B
gflags.conf 58B
cube_api.cpp 18KB
main.cpp 14KB
meta.cpp 8KB
inference.cpp 7KB
cube_cli.cpp 5KB
parser.cpp 2KB
xbox_pb_deconverter.cpp 2KB
infer.cpp 2KB
utils.cpp 1KB
debug.cpp 709B
single.cpp 623B
style.css 41B
small_train.csv 134KB
small_test.csv 128KB
train.csv 3KB
test.csv 3KB
test.csv 3KB
train.csv 3KB
cube-builder 2.19MB
ml-tag-sample.data 17KB
demo_10 107KB
.DS_Store 6KB
user.flags 456B
.gitattributes 162B
.gitignore 215B
.gitignore 70B
.gitignore 34B
.gitignore 24B
benchmark.go 5KB
build.gradle 747B
settings.gradle 33B
gradlew 6KB
cube.pb.h 36KB
infer.h 13KB
debug.h 12KB
miomf_result.pb.h 12KB
control.pb.h 11KB
criteo_reader.h 5KB
data_feed.h 5KB
utils.h 5KB
cube_api.h 3KB
safe_queue.h 3KB
meta.h 3KB
xbox_pb_deconverter.h 1KB
cube_api_bvar.h 1KB
single.h 993B
cube_cli.h 942B
error.h 926B
train_sample.h5 33KB
test_sample.h5 18KB
copyright.hook 4KB
pylint_pre_commit.hook 629B
layout.html 153B
gradle-wrapper.jar 58KB
Main.java 7KB
ParserInputData.java 6KB
Config.java 5KB
Metric.java 4KB
BatchSample.java 1KB
4.jpg 170KB
11.jpg 162KB
demo_framework.jpg 138KB
tisas.jpg 137KB
ensfm.jpg 137KB
2.jpg 94KB
1.JPG 73KB
1.jpg 37KB
2.JPG 35KB
5.JPG 32KB
4.jpg 26KB
4.jpg 26KB
4.jpg 26KB
6.JPG 25KB
3.jpg 22KB
10.JPG 15KB
7.JPG 15KB
2.jpg 13KB
共 1369 条
- 1
- 2
- 3
- 4
- 5
- 6
- 14
资源评论
极致人生-010
- 粉丝: 3164
- 资源: 3077
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功