推荐系统的rank阶段

简述

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

数据准备

静态部分

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

动态部分

  • 召回信息
    上阶段的召回信息
  • 环境信息
    如 时间, 季节什么的.
  • label
    label={0,只曝光无点击1,曝光且有点击label = \begin{cases} 0, & \text{只曝光无点击} \\ 1, & \text{曝光且有点击} \end{cases}

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

特征工程

详见参考[3].

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

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

特征生成

叫 feature generate.

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

LR 模型

公式

  • 预测
    ctr_pred(x)=11+e(wTx+b)ctr\_pred(x)=\frac 1 {1+e^{-(w^Tx+b)}}
  • 训练
    w^=argminwiloss(yi,ctr_pred(xi))+λw2\hat w=\arg \min_w \sum_i loss(y_i,ctr\_pred(x_i))+\lambda ||w||_2

工程落地算法

  • OWL_QN
    损失函数一般为交叉熵,平方损失, 优化方法为 OWL_QN, 一种拟牛顿法.
    特征高阶交叉后规模可达百亿, 使用 Parameter Server 训练, 比如 ali 只支持离散特征, 即 xi{0,1}x_i\in\{0,1\}, 损失函数为平方损失.
  • FTRL
    Follow the Regularized Leader(FTRL).
    见参考[8].
  • 二者对比
    ftrl对增量学习更友好. Owlqn容易让模型过于偏重到近期原本.

GBDT+LR

WDL

对应paper, 详见[2]
推荐系统的rank阶段
figure WDL图解

motivation

  • LR
    具有 memorization 特性. 从历史数据中学习并利用各个被交叉特征的共现关系, 推荐结果同历史行为高度相似并因此带来了局限性.
  • NN
    具有 generalization 特性. 从历史数据中学习到了特征的传递性, 因此具有了未见特征组合的探索能力, 推荐结果可提升多样性.

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

wide linear model

交叉特征与离散特征.

deep

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

实验评测

推荐系统的rank阶段
figure 评测结果

  • 数据集
    论文中没有提数据集, 直接在 GooglePlay 做三周的线上AB. 这样的论文我还是第一次见 .
  • baseline
    only Wide Component. 与 only Deep Component.
    可以看到后者的AUC较前者低, 但线上表现反而好.
  • WDL approach
    app 安装率(app acquisition)提升了+3.9%.

MF

FM

见[5].

FFM

见[7].

参考

  1. TF教程, TensorFlow Wide & Deep Learning Tutorial
  2. google的paper, Wide & Deep Learning for Recommender Systems
  3. 我的blog,特征工程
  4. 他人blog,FFM原理与实践简单理解
  5. paper, FM
  6. s.e.Difference between Factorization machines and Matrix Factorization?
  7. paper, FFM
  8. paper,FTRL
  9. paper,Listwise Collaborative Filtering