最近在做一些ratio预估方面的工作,看了华为诺亚实验室和上交合作的一篇文章,正好借机把CTR模型中关于数值特征的embedding方法整理一下。
- No Embedding:数值拼接后作为特征直接输入到模型中;
- [Google Play] Wide & Deep
- [JD] DMT
- [YouTube] DNN: 原始值、乘方、开方三者拼接
- [Facebook] DLRM: 两层全连接
- Field Embedding:多用于学术界。每一个数值都对应一个向量,数值的embedding是值与向量的乘积;
- Discretization:离散化,多用于工业界。离散边界的选择有下面三种方式:
- 基于固定距离/固定频数;
- 取对数(Kaggle某比赛的冠军使用过)后向下取整;
- 基于模型的分桶方式,如GBDT
论文提出:离散化的方式存在三个比较关键的问题:
- 分桶指标的选择比较固定,往往需要一个独立的模块,没法做成端到端的方式;
- 桶的上边界和上一个桶的下边界,两者数值相差可能很小,但实际的embedding差异很大;
- 同一个桶的上边界和下边界,两者数值相差可能很大,但实际的embedding是相同的。
论文主要的思路是将每个数值域的桶都用可学习的矩阵形式表示(行数为桶,列数为每个桶的embedding),随后学习一个长度为桶数的权重,来将每一个数值转化为每一个桶的权重。