[深度学习]CTR模型如何加入稠密连续型|多值类别特征
一 稠密连续类型特征的处理
在点击率预估问题中,可以尝试的几种方法
1.归一化后直接拼接到embedding向量侧dnn部分,不参与fm部分交叉
- 归一化的方式可以包括:直接对原始特征做归一化;通过bn层来做归一化。
- 因为FM里要求不同field之间有相同的embedding dimension, 所以数值型特征这么加的话是不参与FM的
- 归一化总是有好处的。未归一化的数据会导致nn反向传播过程中grads的均值和方差过大,不利于网络的学习和收敛。
2.离散化后作为id feature 类别特征, embedding后与其他sparse feature的embedding 一起参与fm的交叉
离散化有两个好处:一是引入非线性。当label与该dense feature不是线性关系时,一个w * dense feature是不能很好刻划模型的,所有的dense feature共用一个w表达能力是比较差的。但是离散化之后就变成了对不同的离散化值学习不同的系数,这样就能很好的提升非线性能力;二是可以过滤一些异常值。异常值会跟其它值分到一个桶里,对模型的影响就会很少。
3.对每个原始稠密特征X维护一个词嵌入向量embedding vector V,然后把原始稠密特征和权重向量相乘 X*V 得到最终的特征向量.
相当于一个稠密特征映射成一个特征向量,之后和类别映射的词嵌入矩阵进行拼接参与fm的交叉。此时仍然可以发现,这样相当于原始稠密特征也可以和类别特征进行交叉特征提取
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 方式对多值类别特征中的每一项进行稠密特征的转换,最后对转换后的稠密特征向量进行拼接,然后按项求均值或最大值或最小值等,整个过程可以用如图表示:
可以看出,这样对多值类别特征进行处理之后,可以把每个多值类别特征转换在同一维度空间中,这样输入到神经网络中不用为了保持输入维度一致而进行padding,使输入变稀疏,也方便和其他特征做交叉特征。
加权法
如果对多值类型特征直接求均值似乎不是很符合常理,毕竟用户对每个感兴趣话题的喜爱程度不一样,这就有了权重的引入,而不是简单粗暴的求均值了,具体引入权重的做法如图:
参考:
总结
以上是生活随笔为你收集整理的[深度学习]CTR模型如何加入稠密连续型|多值类别特征的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Mrtg的配置以及具体安装方法
- 下一篇: [深度学习] 自然语言处理 --- Se