文章标题:How we use AutoML, Multi-task learning and Multi-tower models for Pinterest Ads
解读人:爱晒太阳的小白猫
简介:本文来自于pinterest广告组,主要讲解在工作中是如何使用auto ml技术、multi-task learning和multi-tower模型。既有宏观介绍,又覆盖了一些模型训练的小技巧,比如在实战中如何calibrate multi-task model的预测结果。
阅读难易程度:简单
AutoML
Pinterest主要在特征工程和建模两方面使用了auto ml的技术。
特征工程
Pinterest使用AutoML技术来做很多feature engineering(特征工程)的工作。
第一步是把特征分类:
- continuous:可以直接用的连续浮点数
- one hot:single-valued categorical data,比如国家和语言
- indexed: multi-hot categorical features
- hash_onehot
- hash_indexed
- dense
第二步:特征转换层会根据特征的形式和统计数据来进行下一步处理
- Continuous和dense features会被压缩或者normalization(标准化/归一化)
- One-hot或者multi-hot的特征会被embedding化或者映射
- 无限vocabulary的分类特征会被hash以及转换成one-hot或者multi-hot的特征
通过这两步自动转换,工程师可以更专注于特征质量和建模。
解读人comment:这种做法在大公司里似乎很常见?
建模
Pinterest也使用AutoML技术来寻找更好的deep learning模型结构。
Pinterest把自己的模型标准化成几层:representation layer -> summarization layer -> latent cross layer -> fully connected layer -> output。具体介绍如下。
representation layer:特征表示层,就是前文说的特征转化自动化部分。
summarization layer:同一类型的特征group together;换句话说,就是全部变成embedding。
latent cross layer: 将embedding进行一定变换交叉的layer。
The fully connected layer:传统深度学习feed forward神经网络。
关键发现
一些因素会影响auto ml模型的质量。
- 特征重要性:有一些在gbdt模型中重要的特征,在DNN模型中不再重要。不好的特征会产生noise,所以把特征按照重要性排序很重要(可以帮助选出不好的feature)。
- 特征中的“outlier”需要被仔细处理(稀疏分布一侧的数据)
- “minmax normalization“是一种对待outlier的好方法,简单有效(比如大于x,都算成x;小于y,都算成y)
Multi-task and multi-tower
使用multi-task learning有诸多好处,比如简化网络,减少serving cost,各个task之间相互学习转移知识。
对于pinterest ads而言,挑战在于train模型时有不同的数据来源:购物数据和正常推荐模型的数据。使用一个模型在两个数据上训练的时候,这个模型的预测效果并不如分开训练的模型要好。
为了解决这个问题,pinterest采用了shared-bottom, multi-tower的模型:用multi-tower来处理不同来源的训练数据,用shared-bottom来学习共同的知识。这个joint训练的模型效果比单独在一个数据集上单独train出的模型都要好。
calibration
算出来的prediction score要被calibrate一下(小白猫comment:这也是工业界的常见操作。)
对于每一个head,都创建了一个calibration layer,pinterest团队能做到hourly update。新calibration layer能减少80%由calibration产生的误差。
Negative downsampling
downsample一些负样本能保持label balance。对于multi-task model,pinterest的做法是,设置一个基础的downsampling rate对于某一个task(比如ctr预测),在training的时候,每个batch自动计算要downsample其它task多少negative examples(根据其它task发生的比例与ctr发生的比例相比较)。
selection bias
因为模型是在旧数据上训练的,所以刚跑实验的时候新模型往往mis-calibrated。这个问题往往会在模型ramp up的过程中修复,因为模型渐渐得到了来自本模型的训练数据。这个问题无法完全解决,但有一个小trick:只用来自本模型的训练数据train calibration layer,dnn还是用正常的模型来训练。这是因为calibration layer通常很容易converge,而dnn模型需要大量的数据。