PLE-实践小结-2308-cnblogs
某场景介绍
- 前状:三模型,权重融合
- 解决问题:融合目标行为,充分利用样本信息,节省资源开销。
当前效果
主场景人均真实曝光+0.26%,不显著;子场景人均真实曝光+0.35%,不显著
千曝互动+2.65%,显著;千曝互动uv+1.80%,显著;人均互动+0.87%,不显著
千曝点击+11.24%,显著;千曝点击uv+5.91%,显著;人均点击+5.08%,显著
去重千曝点击+6.37%,显著;去重千曝点击uv+5.62%,显著;人均去重有效点击+0.75%,显著
物料类型侧指标未见明显异常。实验符合预期,建议扩量。
粗估节省线上模型服务资源约40%。
场景二:
- 人均真实曝光-0.28%,不显著
- 千曝互动+5.35%,显著;人均互动+3.28%,显著; 互动uv+1.83%,显著性未知
- 千曝点击+3.79%,显著;人均点击+3.62%,显著;点击uv-0.25%,显著性未知
场景三:
ple模型:核心指标 +0.588% 显著,千曝点击 3.871% 显著
技术方案选型
- MMOE、SNR、PLE
- 整体思路一脉相承
- 选了最新的模型,能抄到的最全的作业 -》 PLE
- 参考:https://zhuanlan.zhihu.com/p/291406172

核心经验(特征和权重)
特征
- 样本label
- 特征准确度、特征覆盖度、特征相关性
目标权重、目标间相互影响程度、模型会不会被带偏
- 样本策略:六组策略,三个目标;交叉验证,20余组离线实验
- loss不同,反向传播差异极大
- 样本label调权
- 打分分布、归一化保证模型真正在work
- 离线物料打分分布、分位点;模型打分分布、分位点;
- 策略调权
底表、实时、无行为过滤样本、点击样本、点正文样本
- 反向归因:全量样本,即便未真实曝光,因策略、模型打分排出去,也认为是负样本
过滤策略:全量样本、真实阅读样本、真是阅读+位置样本
- 真实阅读平均位置,为5.0x;
- BEC、focalloss分别对比
- 三目标分别对比
- T+1验证,1、5、7、14、21天样本训练;观察auc diff。
特征
- 特征重筛(有效性、监控、误配置引入bug反查)
- 手动刷流,结合case系统,查样本数据;
- 样本特征覆盖度监控
- 相关性分析(pickup)
- 有正相关,有负相关;认为具有相关性即可,不论正负,具体作用交由模型学习
- 特征验证(推理性能、模型表现性能)
- 序列特征、ID类特征
- 剧烈影响模型推理性能,在模型表现影响不大情况下,适度删减
- 分桶优化(调整分桶、大维度hash)
- 全特征走hash,模型维度一度膨胀到100w亿。
- 反向归因:因为样本不足,id类embeding学习不充分,21天样本依然效果较差。
- 交叉特征(concathash、pickup)
- 全流程一致性梳理
label
- 点击指标爆炸、目标优化
- 用了label_click。auc能学到0.9+,但上线效果极差
- 用了label_click_valid,模型不收敛,bug修复后,恢复正常
- 模型不收敛
- 训练、评估使用label不匹配(点正文、混合label)
- label 歧义
- 物料类型分析、指标异常分析
- 极有效的辅助观测指标,各label交叉对比,能发现80%以上的问题
- 损失置0 (评估相关性)
- 部分loss不进入总loss
- loss置0
- 梯度置0、梯度丢弃
- stop_gradient
- 梯度裁剪
模型结构
- Dense层对比实验(128+32、128+64+32、256+128+64、256+128+64+32)
- 一定程度下,模型越复杂,效果越好(离线auc,线上指标变动不显著)
- 专家塔实验(40、64、32、20)
- 专家塔对单目标影响不大。多目标场景下效果较为显著,但没有显著的对应关系,得试。
- input_layer调整pooling操作,离线无显著收益。
- 模型跳连(skip-conn)
- 参考ResNet
- 特征交叉(concat、pooling)
- 参考DeepFM,最后一层与第一层进行操作
- gradient-stop (评估梯度)
- 在用,但效果未做对比。
- 多共享塔
- 同专家塔,比较玄学。个人未有显著结论。
- 基于tensorboard,trace graph,排查代码异常
- 极其有效的评估手段
- graph、projector、histograms、distributions
- 分别排查代码bug、embeding异常、训练过程异常、参数分布异常
- savedmodel 转文本,根据op回溯图,排查异常
- 极重要的一致性校验手段
- 参考代码,基本能回溯全图,并且部分了解tf、framework运行机制。
- predict score reshape导致协议不兼容
- 上线预览时发现的问题。上线前一定要预览,必要时加白名单刷case。
优化器(差异不大,均能收敛)
- adam
- adagrad
- sgd
loss
- 交叉熵(tf 实现有trick,建议深挖代码)
# Note that these two expressions can be combined into the following:
# max(x, 0) - x * z + log(1 + exp(-abs(x)))
# To allow computing gradients at zero, we define custom versions of max and
# abs functions.
- 加权交叉熵
- tf实现,支持自定义权重
reweight_value = 1.0
if("by_positive" == self.params['model_reweight_type'][0]):
reweight_value = float(params['model_reweight_type'][1])
tf.logging.info("suanec : real reweight value is : %d" % reweight_value)
print("suanec : real reweight value is : %d" % reweight_value)
weights = tf.where(tf.equal(labels, 1.0), tf.tile([reweight_value], tf.shape(labels)), tf.tile([1.], tf.shape(labels)))
tf.logging.info("suanec : model_func_remainder. done parse reweight_value .")
········
········
········
elif params['sample_label_column'] == "is_click":
print("params['sample_label_column'] == is_click | use click_label")
click_labels = self.click_label_cast(features=features)
labels = click_labels
loss = tf.losses.sigmoid_cross_entropy(labels, logits, weights=weights)
- focalloss
- 本质是加权 + 减权
- 整体loss 值会较小,适当缩放、调大学习率、调整权重等手段规避
- alpha-focalloss
- 自定义,删减了难样本学习功能,减少pow操作。减少变量、降低开销(理论上)
- loss 分析 [https://note.youdao.com/s/C5kbN5K9]
- 根据loss值、learning_rate,评估模型收敛情况,玄学凭感觉。
- L1、L2默认都加
- 具体加不加,怎么加,要先说服自己
打分融合策略
- 调和平均数(F1)
- 参考recall/precision 评估
- 均值
- 多目标共现,同贡献先验
- 乘积
- 参考CTCVR,概率角度考虑,后续粗排可以尝试(单理论分析)
- 固定权重
- 引入业务先验
- UWL
- Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics
- 简而言之就是:一个基于高斯分布先验的 log likelihood。
- 策略归一化
- 模型打分跟策略打分应该在一个维度,至少是一个量纲
- 打分一致性校验
- 一致性校验工具
- tf savedmodel_cli 工具
- 打分分位点评估
实时化
- 特征校验、schema有略微差异
- 评估shape不对
- 多目标评估打分是多个tensor,stream_evaluator配置有trick
- 模型不收敛
- 学习率问题
- 样本不够
- label不对
- loss函数 差异
- 实施评估数据错位导致auc异常
- 第二个目标评估数据错位,各项指标均异常。后对比离线发现,因数据错位导致。
- 新镜像已修复
case观感
- 视频贼少、视频贼多
- 召回层级分析
- 兴趣层减少
- 图文较多但热度低
- 互动指标加权大,导致影响较大
- 热度较高但兴趣差
- 筛选了行为样本,热度高物料学习充分
- 关注策略加权较重
- 分发控制、过已读等其他case
- 打点case
- 过已读case
- 模型超时 非合理推荐case
- 跨场景行为
- 互动过物料曝光case
- 样本和指标 向专业人士寻求帮助
监控数据
- 模型服务指标
- qps、rt、p99、参数服务p99、版本号、特征空值率
- titan引擎指标
- p99、错误率等
- 基于物料类型的分析
- 物料类型变化,及各项行为指标对比
- 基于位置的分析
- 同位置物料均值对比
- 模型打分监测:均值 + 分位点
- 一致性确认
- 造数据离线评估打分
遗留问题
- MTL+MDL todo
- 模型迁移实时 doing
- 参数预加载 doing
- 融合权重预置方式 (纯引擎,改为模型 + 策略 + 引擎) todo
后续规划
- pepnet + ple
- 参考DMT,+ attention
- UWL推理引入,配合实时训练,初版强化学习
小结
- 不浪费每一次错误,错误要改,还要尽量多的得出新结论;pivot 枢轴法
- 相信并依靠团队的力量
- 多目标任务,目标融合是关键
PLE-实践小结-2308-cnblogs的更多相关文章
- TCP编程实践小结1
说起TCP/IP协议,大家估计都能说出个一二,但是估计很少有人能够深入的理解这个协议,原因有这么几个: 协议本身确实复杂 入门教材没选对,太抽象了,导致大家浅尝辄止 学习过程中如果没有配合实践理解,过 ...
- python多线程实践小结
参考:http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html #!/usr/bin/env python import sys ...
- 使用puppeteer爬取网页数据实践小结
简单介绍Puppeteer Puppeteer是一个Node库,它通过DevTools协议提供高级API来控制Chrome或Chromium.Puppeteer默认以无头方式运行,但可以配置为有头方式 ...
- Python原生调试工具pdb实践小结
使用python -m pdb xxx.py进入单步调试模式,默认会在脚本的第一行可执行命令处停止.此时,通过 b function设置之后的函数断点会提示出错,从出错异常栈中可以看出,pdb是将fu ...
- SixLabors.ImageSharp 实践小结
前言 之前写过一篇 Linux/Docker 中使用 System.Drawing.Common 踩坑小计, 当时主要是有一块图像处理的需要从 .net framework 迁移到 .net core ...
- TCP KeepAlive机制理解与实践小结
0 前言 本文将主要通过抓包并查看报文的方式学习TCP KeepAlive机制,以此加深理解. 1 TCP KeepAlive机制简介 TCP长连接下,客户端和服务器若长时间无数据交互情况下,若一方出 ...
- Android MVP+Retrofit+RxJava实践小结
关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...
- 82.Android之MVP+Retrofit+RxJava实践小结
转载:http://wuxiaolong.me/2016/06/12/mvpRetrofitRxjava/ 关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛 ...
- 使用U盘安装Ubuntu系统的实践小结
参考教程:http://diybbs.zol.com.cn/1/33925_1942.html 遇到的问题:安装ubuntu 12.04 64位,提示缺少“/casper/vmlinuz.efi ...
- Mysql表分区的选择与实践小结
在一些系统中有时某张表会出现百万或者千万的数据量,尽管其中使用了索引,查询速度也不一定会很快.这时候可能就需要通过分库,分表,分区来解决这些性能瓶颈. 一. 选择合适的解决方法 1. 分库分表. 分库 ...
随机推荐
- Docker compose单机编排工具
Docker compose单机编排工具 目录 Docker compose单机编排工具 docker-compose介绍 Docker Compose使用的三步: docker-compose安装部 ...
- 2023-04-27:用go语言重写ffmpeg的remuxing.c示例。
2023-04-27:用go语言重写ffmpeg的remuxing.c示例. 答案2023-04-27: ffmpeg的remuxing.c是一个用于将多媒体文件从一种容器格式转换为另一种容器格式的命 ...
- 2023-03-27:avio_list_dir.c 是 FFmpeg 库自带的一个示例程序,它提供了列出目录中所有文件和子目录的功能,请用go语言改写。
2023-03-27:avio_list_dir.c 是 FFmpeg 库自带的一个示例程序,它提供了列出目录中所有文件和子目录的功能,请用go语言改写. 答案2023-03-27: 这段代码实现了通 ...
- 2021-08-06:天际线问题。城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度,请返回由这些建筑物形成的 天际线 。每个建筑物的几何信息由数组 build
2021-08-06:天际线问题.城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓.给你所有建筑物的位置和高度,请返回由这些建筑物形成的 天际线 .每个建筑物的几何信息由数组 build ...
- How to use the shell command to get the version of Linux Distributions All In One
How to use the shell command to get the version of Linux Distributions All In One 如何使用 shell 命令获取 Li ...
- 二维数组初始化vector, 以及类型转换问题
//二维数组的初始化1 vector<vector<float>> _box_parm(class_row_num, vector<float>(class_col ...
- 曲线艺术编程 coding curves 第十章 螺旋曲线(SPIRALS)
原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) 源码:github: ht ...
- 一文掌握Python多线程与多进程
Python的多线程和多进程 一.简介 并发是今天计算机编程中的一项重要能力,尤其是在面对需要大量计算或I/O操作的任务时.Python 提供了多种并发的处理方式,本篇文章将深入探讨其中的两种:多线程 ...
- 2023-06-21:redis中什么是BigKey?该如何解决?
2023-06-21:redis中什么是BigKey?该如何解决? 答案2023-06-21: 什么是bigkey bigkey是指存储在Key-Value数据库中的键对应的值所占用的内存空间较大.举 ...
- 1. SpringMVC 简介
1. 什么是 MVC MVC是一种软件架构的思想,将软件按照模型.视图.控制器来划分 M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为实 ...