@推荐精排如何加特征?

链接 推荐精排如何加特征? - 知乎

关注问题#card

  • 第一、特征是重要的先验知识,但是有时我们自认为加入了一个非常重要的特征,但是模型效果却没有提升,这是特征无用呢?还是加的位置不对呢?

    • 第一个话题,就讨论如何将“先验重要”的特征加到合适的位置。
  • 第二、在多目标的场景下,如果某个目标比较稀疏,我们如何利用先验知识辅助它,使其能学得更好呢?

信心满满地设计了特征,感觉非常有业务sense,吭哧吭哧打通了上下游数据链路,模型预测一看,离线指标却稳如泰山。造成这种情况的原因有很多,其中一个可能就是,如果你的特征确实有用,但他没发挥作用的原因,很可能是特征的位置不对。#card

  • 第一,如果你先重要的特征加到DNN底部,层层向上传递,恐怕再重要的信息到达顶部时,也不剩下多少了。

  • 第二,DNN的底层往往是若干特征embedding的拼接,动辄五六千维,这时你新加入一个特征几十维的embedding,被“淹没”恐怕也不会太奇怪。那么,特征究竟要如何加才能发挥效用呢?这正是本文探讨的话题。

[[重要特征加得浅]]

  • [[Wide&Deep]]

    • wide侧就是一个LR,或者我们稍微扩展一下,就是一个一层的NN网络。#card
      • wide侧的特征离Loss近,避免了自DNN底部层层传递带来的信息损失,更有机会将我们的先验知识“一步到顶”。
  • 那么,哪些特征要进wide侧,哪些特征要进deep侧?:-> wide侧负责记忆,因此要将“强业务背景,显而易见的特征,喂入Wide侧”。

    • 在推荐领域加入wide侧#card

      • 特征及特征对上的统计数据,<女性,20~30岁,商品类别是‘裙子’>上的点击率、加购率等;

      • 或者,我们已经发现了非常明显的用户分层,比如登录用户 VS 未登录用户、高频VS低频,用户行为完全不同。为了提升模型对“用户是否登录”、“高频低频”这样强bias特征的敏感度,这些特征也。

    • 这里多提一个扩展性案例、与用户分层类似,淘宝的STAR《One Model to Serve All: Star Topology Adaptive Recommender for Multi-Domain CTR Prediction》也是将domain-id这样的强bias特征,喂入一个非常简单的dnn,得到的logits再叠加到主网络的logits上,算是wide&Deep的一个变种。#card

      • 论文最后坦言,“the auxiliary network is much simpler … The simple architecture makes the domain features directly influence the final prediction”,有兴趣或者相似场景的同学可以去试一下。

重要要特征当裁判

  • 对于一些强bias特征(eg:用户是否登录、来访天数),除了将它们加浅一些,离目标Loss更近,还有一种方法能够增强它们的作用,避免其信息在dnn中被损失掉,就是采用结构 :-> [[SENet]]或[[LHUC]]

  • SENET就相当于用户站在输入特征旁边,亲自下场辨认哪个特征有多重要,这其实也是一种变相的 self_attention 机制(如果SENET的输入是所有特征的话,可能就更接近self_attention的思想了)
    image.png

    • 强bias特征作为LHUC的输入,经过sigmiod激活函数后,输出是一个N维度向量。#card

      • N是所有fileld的个数N维向量就是各field的重要性,将其按位乘到各field的embedding上,起到增强或削弱的作用加权后的各field embedding再拼接起来。
    • 当然,如果SENET的输出维度N直接是input_layer的维度也可以,这就从vector_size变成 element_size

  • 喂入上层DNN这种结构,将一些先验认为重要的强bias的特征,放到裁判的位置,决定其他特征的重要性。#card

    • 比如,如果产品设计不允许未登录用户购买商品,那么显然“用户未登录”这个特征值,就“应该”将转化相关特征的权重置为0,因为它不能代表用户的真实意图。

    • 这样做,相比于将所有特征“一视同仁”、直接全部喂入DNN最底层,更能发挥重要特征的作用,将“先验知识”(比如这里的产品设计限制)深入贯彻。

一般都有哪些重要特征呢?

  • 表征用户本身bias的,#card

    • 比如用户的活跃程度、消费等级、性别、圈子等。
  • 表征上下文场景的bias的,#card

    • 比如用户几点来APP啊;

    • 用户当天有没有显著表露意图,比如淘宝上搜索了,加购了,购买了;

    • 商品位置信息等等。

  • 表征样本bias的,#card

    • 比如快手之前将快手APP、极速版上同一个场景的样本合并在一起训练,那么样本来自哪个APP也就是一个至关重要的特征了。

链路前节点信息帮后链路稀疏目标学习

  • 当前,多目标在推荐领域已经是屡见不鲜,以商品推荐为例,我们曝光透出的商品,不仅要让用户点击,用户点击代表着用户愿意花时间和APP一起玩,这直接代表着APP的生态;而点击之后还要尽可能地加购,当然最终目标是转化,转化直接关系公司营收。因此,我们从来不做选择,我们全都要!#card

    • 多目标之间往往存在前后依赖关系(比如先点击,才有可能转化),这样意味着,链路越靠后的环节,正样本就越稀疏,训练收敛也就越困难。因此,一个自然的想法就是多目标之间能否互助,或者一个稍微牺牲一点点去辅助另外一个而达到整体更优。
  • 信息从前往后迁移

    • 典型的案例有ESMM模型,pCTCVR=pCTR*pCVR。CTR任务的数据更多,预测精度更高,会给CTCVR的预测任务以提示。或者DBMIT模型。他们都是“拿链路前端环节的输出,作为链路后端环节的输入”,即“利用先验知识显式制订信息迁移规则”的典型手段,#card
      • 以商品推荐为例,点击环境的训练数据丰富、他的隐层输出,将极大帮助转化这个靠后环节的训练,当然这也符合一般认知,我们可以认为用户一旦点击了,他就朝着购买这个终极目标前进一步,用户加购了,则再进一步,

      • 因此,将点击、加购信息直接显示迁移到转化上,是符合产品设定下用户真实习惯的。

作者

Ryen Xiang

发布于

2025-04-21

更新于

2025-04-22

许可协议


网络回响

评论