[深度学习]CTR模型如何加入稠密连续型|多值类别特征

CTR预估任务中除了广泛使用的稀疏离散型特征外,还会用到稠密连续型以及一些序列类型的特征,本文为大家简要梳理几种特征的处理方式

一 稠密连续类型特征的处理

在点击率预估问题中,可以尝试的几种方法

1.归一化后直接拼接到embedding向量侧dnn部分,不参与fm部分交叉

  • 归一化的方式可以包括:直接对原始特征做归一化;通过bn层来做归一化。
  • 因为FM里要求不同field之间有相同的embedding dimension, 所以数值型特征这么加的话是不参与FM的
  • 归一化总是有好处的。未归一化的数据会导致nn反向传播过程中grads的均值和方差过大,不利于网络的学习和收敛。

[深度学习]CTR模型如何加入稠密连续型|多值类别特征

2.离散化后作为id feature 类别特征, embedding后与其他sparse feature的embedding 一起参与fm的交叉

离散化有两个好处:一是引入非线性。当label与该dense feature不是线性关系时,一个w * dense feature是不能很好刻划模型的,所有的dense feature共用一个w表达能力是比较差的。但是离散化之后就变成了对不同的离散化值学习不同的系数,这样就能很好的提升非线性能力;二是可以过滤一些异常值。异常值会跟其它值分到一个桶里,对模型的影响就会很少。

[深度学习]CTR模型如何加入稠密连续型|多值类别特征

3.对每个原始稠密特征X维护一个词嵌入向量embedding vector V,然后把原始稠密特征和权重向量相乘 X*V 得到最终的特征向量,相当于一个稠密特征映射成一个特征向量,之后和类别映射的词嵌入矩阵进行拼接参与fm的交叉。此时仍然可以发现,这样相当于原始稠密特征也可以和类别特征进行交叉特征提取

[深度学习]CTR模型如何加入稠密连续型|多值类别特征

2和3的区别在于2中根据dense value的取值会分配到不同的embedding vector,而3中的不同的dense value只有一个embedding vector.

一般来说,2应该是最好的。3的*度有点低,所有的dense feature共用一个embedding, 只是通过feature本身的数值去区分生效。

从上面几种方法可以发现,稠密特征要和词嵌入后的类别特征做交叉需要在同一个维度空间,也就是要把一维的稠密特征转化成和词嵌入维度相同的特征空间中,同时上面方法中的词嵌入矩阵相当于权重矩阵都可以进行优化学习。

二 多值类别特征

一般单值类别特征加入到CTR预估模型的方法是先对单值类别特征进行one-hot,然后和embedding 矩阵相乘转换成多维稠密特征,如下图所示:

[深度学习]CTR模型如何加入稠密连续型|多值类别特征

最常规的也最简单的是先对所有‘话题’集合进行one hot编码,然后按照图 1 方式对多值类别特征中的每一项进行稠密特征的转换,最后对转换后的稠密特征向量进行拼接,然后按项求均值或最大值或最小值等,整个过程可以用如图表示:

 

[深度学习]CTR模型如何加入稠密连续型|多值类别特征

可以看出,这样对多值类别特征进行处理之后,可以把每个多值类别特征转换在同一维度空间中,这样输入到神经网络中不用为了保持输入维度一致而进行padding,使输入变稀疏,也方便和其他特征做交叉特征。

 

 

 

参考:

  1. https://mp.weixin.qq.com/s/BLPXaVuDKHxh6B9NoGGerg
  2. https://www.zhihu.com/question/364975182/answer/964728195