快手精排模型迭代

https://ai.51cto.com/art/202102/644214.htm

问题1:CTR 模型缺乏个性化

问题:

快手认为,DNN, DeepFM这一类简单的全连接深度模型,在全局用户的共建语义模式下缺乏个性化。

目标:

在网络参数上为不同用户学习一个独有的个性化偏差。

借鉴:

LHUC,为每个说话人学习一个 hidden unit contribution。

快手的做法:

PPNET,parameter personalized net。一种 gating 机制,可以增加DNN网络参数个性化,并加速模型收敛。

快手的效果:

2019年全量上线,显著提升CTR 目标的预估能力。

具体做法:

1. gateNN:

  - 输入

    id 类特征,包括, user_id, photo_id, atyhor_id。

    原始输入给模型的所有特征的 embedding。

    这两类特征的 embedding 会拼接在一起,作为 gateNN 的输入

  - 结构

    2层神经网络

    第二层的激活函数是 2*sigmoid。目的是将约束控制在 【0, 2】,默认值是1。当默认值是1时,等价于原始的模型。

    

2. 每一层神经网络的输入,多增加了和  gatenn 的 element-wise product,以此作为个性化偏置。

3. gateNN 不对原始网络做梯度下降,以防防止收敛。

多目标模型

背景: 训练数据里面包含双列发现页和全屏精选页两种异构数据。

快手认为:单列交互行为都是基于 show 发生的 (很像我们的 feed),并没有像双列那样有非常重要的点击行为(很像我们的push)。

快手做的工作:

  - 模型层面,尝试拆解出单列的数据,单独优化。 

  - 特征层面,复用双列模型特征,只是针对单列的目标,需要额外添加个性化偏置特征和统计特征。

  - embedding 层面,前期单列的数据少,不能保证收敛。

    - 最初使用双列数据主导训练

    - 后面改用单列用户数据主导训练

  - 网络结构

    - 基于 shared-bottom,不相关的目标独占一个 tower。

  - 暴露的问题

    - 没有考虑到单双列的 embedding 分布差异,造成了 embedding 学习不充分。

快手的改进工作

  - 模型层面,将 shared-bottom 网络替换成 mmoe 的 expert 层

    - 特征层面,进行了语义统一,修正在单双列业务中语义不一致特征(click_history feed流里面用的是全部的点击历史,push只用了push的 show history 是不是要统一)

  - embeeding 层面,空间映射,设计了 embedding transform layer。帮助单双列 embedding映射到统一空间分布。

  - 特征重要性层面,slot-gating layer,为不同业务做特征重要性选择?

 这四个方面,总归是为了多任务,提取不同表征。


特征淘汰机制

背景: 每个ID 单独映射一个 embedding 会使得机器内存很快炸掉。传统的 lru, lfu 只考虑了频率信息,主要是为了最大化缓存的命中率。

方案:全局共享的嵌入表 gset, 每个特征定制 feature score进行淘汰。

思想:针对低频 ID,为防止这些特征无意义的进入和淘汰,设置准入门槛!

改进:

  - 新的存储器件, INTEL AEP。

  - 实现底层的 kv引擎

短期行为序列模型

背景:用户的行为特征丰富且多变。

常见解决方案:

  - 对于用户历史的行为进行 weighted sum

    快手 baseline 是所有用户行为简单的做 sum pooling。在单列场景下,show 是被动接受的,用户需要观看一段时间之后再做反馈。

  - 通过 RNN 之类的模型,进行时序建模

  - 改进!借鉴 transformer (encoder + decoder)

  

原文地址:https://www.cnblogs.com/toonice/p/14870203.html