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% 显著

技术方案选型

核心经验(特征和权重)

  • 特征

    • 样本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

    # 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 枢轴法
  • 相信并依靠团队的力量
  • 多目标任务,目标融合是关键
posted @ 2023-08-02 17:19  苏轶然  阅读(155)  评论(0编辑  收藏  举报