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

稠密连续类型特征的处理

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

  1. 归一化后直接输入dnn部分,不参与fm部分交叉
  2. 不归一化经过bn后输入dnn,不参与fm部分交叉
  3. 离散化后作为id feature, embedding后与其他sparse feature的embedding 一起参与fm的交叉
  4. 为每一个field下的dense value   维护一个embedding vector   ,取 

【CTR预估】CTR模型如何加入稠密连续型和序列型特征?_权重

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

整理自浅梦在【数值类型的特征怎么加入深度模型如nfm,deepfm?】的回答https://www.zhihu.com/question/348103064/answer/878224028

带权重序列类型特征的处理

这个问题抽象出来就是给定一个由若干个(item_id,weight)组成的列表,如何将这个信息用在模型里面。通常来说这种列表的含义可以是用户历史偏好的item_id以及偏好权重,或者是历史收藏加购过的商品或者对应店铺的次数等等。对于问题中的数据
 

一般情况有以下两种做法来使用这个信息:

  1. 不考虑上下文因素,直接将这个列表输入。
  • 回归到最简单的情况,给定一个无权序列,我们一般可以通过sum/mean pooling 的方式将一个变长序列压缩到一个定长的向量,输入给我们的模型。
  • 那么对于带权序列,其实可以看作是一个weighted sum/mean pooling的过程,其实有点类似引入一个attention机制,只不过attention score是预先计算好的。
  • 这种方法完整保留了用户所有的偏好信息,更多的是作为一种用户侧表征。

对于上述数据,我们得到的表示向量为(不考虑score的归一化) 

  1. 考虑上下文因素,根据当前预估item进行一个查表操作。
  • 比如我们当前打分item属于标签1,那么直接查表得到('标签1', 0.8),这个时候我们可以选择直接使用权重0.8作为输入,或者选择用0.8*emb(标签1)作为输入。
  • 这种方法表达的是用户对于当前item的偏好。

整理自浅梦在【CTR预估:(标签-权重)列表类特征怎么输入到模型?】的回答

​https://www.zhihu.com/question/352399723/answer/869939360​

普通序列类型特征的处理

这里就有比较多的方式了,最常用的mean/sum pooling,target attention,self attention以及一些时序建模的方法~ 关注公众号,未来会一一为大家介绍

参考资料

AutoInt: Automatic Feature Interaction Learning via Self-Attentive Neural Networks

​https://arxiv.org/abs/1810.11921​

以上就是常用的CTR模型中对稠密连续型和序列特征的处理方法,欢迎关注公众号浅梦的学习笔记,回复“加群”一起参与讨论交流!

【CTR预估】CTR模型如何加入稠密连续型和序列型特征?_归一化_02