推荐系统的rank阶段

简述

推荐系统一般分为 召回, 排序, 展示打散 等几个阶段. 排序阶段较为重要, 从召回的上千个相关结果中, 预测出用户的点击概率, 以此排序. 一般地, 一个推荐系统在使用排序模型前后, 效果可以提升20% 以上.

数据准备

静态部分

  • 用户画像
  • item特征
    1. 自身 item_id.
    2. 相关的id信息: 内容的话可以是创作者id creator_id, 商品的话可以是卖家id seller_id.
    3. item维度的近几天曝光点击数据等
    4. 其他离散及连续数值的特征.

动态部分

  • 召回信息
    上阶段的召回信息
  • 环境信息
    如 时间, 季节什么的.
  • label
    l a b e l = { 0 , 只曝光无点击 1 , 曝光且有点击

tips: 有些user下的样本只有曝光没有点击, 可以认为用户匆匆地进来又匆匆地离开, 并未认真查看推荐结果, 这部分样本可以剔除.

特征工程

详见参考[3].

  • 普通离散特征
    职业, 婚姻状态等, 同常枚举值不超过100个.
  • id类特征
    如淘宝上的活跃卖家, 可能就上千万了.
  • 连续特征正规化
    如 身高,体重, 点击数. 不一定要缩放到0-1, 对数平滑也是可以的, 如 l n ( 1 + x ) .

在工业界的特征工程中,大多数做法是构造大量离散特征,再根据经验对特征交叉构造高阶特征。这样的特征构造方式,在大样本的前提下,操作简单有效。简单体现在较少的人工设计。
那么离散特征是不是无所不能的?其实不然。首先,特征交叉不是无限度的,两个万级别的特征,交叉之后就是亿级别,所以一般交叉特征都是2、3阶;其次,特征依赖于数据,当我们的数据来源不能继续增加的时候,新特征的设计就很难做了。

特征生成

叫 feature generate.

一般LR的训练组件, 都只用一个kv格式的string字段来存储特征.
如对于 item_id=1,seller_id=2这样的特征, 一般会要求编码成item_id_1 seller_id_2这样以下划线分隔单个kv, 以空格分隔多个kv 的字符串.

LR 模型

  • 预测
    c t r _ p r e d ( x ) = 1 1 + e ( w T x + b )
  • 训练
    w ^ = arg min w i l o s s ( y i , c t r _ p r e d ( x i ) ) + λ | | w | | 2
  • 工程落地
    损失函数一般为交叉熵,平方损失, 优化方法为 OWL_QN, 一种拟牛顿法.
    特征高阶交叉后规模可达百亿, 使用 Parameter Server 训练, 比如 ali 只支持离散特征, 即 x i { 0 , 1 } , 损失函数为平方损失.

GBDT

WDL

LR是广义的线性模型, 除了工程师精心构造的交叉特征, 此外不具备任何非线性的表达能力.
GBDT都是浅层模型, 表征能力也有限.
基于此, 可以考虑 Wide & Deep Learning.

wide

交叉特征与离散特征.

deep

连续特征与高维稀疏离散特征.
where is the number of unique features in a feature column.

参考

  1. TF教程, TensorFlow Wide & Deep Learning Tutorial
  2. google的paper, Wide & Deep Learning for Recommender Systems
  3. 我的blog,特征工程

猜你喜欢

转载自blog.csdn.net/chuchus/article/details/80389980