“ CTR预估任务中除了广泛使用的稀疏离散型特征外,还会用到稠密连续型以及一些序列类型的特征,本文为大家简要梳理几种特征的处理方式~”
稠密连续类型特征的处理
在点击率预估问题中,可以尝试的几种方法
归一化后直接输入dnn部分,不参与fm部分交叉
不归一化经过bn后输入dnn,不参与fm部分交叉
离散化后作为id feature, embedding后与其他sparse feature的embedding 一起参与fm的交叉
为每一个field下的dense value 维护一个embedding vector ,取 作为其最终的embedding表示,与其他sparse feature的embedding一起参与fm的交叉,如下图右侧的Feature field M
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以及偏好权重,或者是历史收藏加购过的商品或者对应店铺的次数等等。对于问题中的数据
一般情况有以下两种做法来使用这个信息:
不考虑上下文因素,直接将这个列表输入。
回归到最简单的情况,给定一个无权序列,我们一般可以通过sum/mean pooling 的方式将一个变长序列压缩到一个定长的向量,输入给我们的模型。
那么对于带权序列,其实可以看作是一个weighted sum/mean pooling的过程,其实有点类似引入一个attention机制,只不过attention score是预先计算好的。
这种方法完整保留了用户所有的偏好信息,更多的是作为一种用户侧表征。
对于上述数据,我们得到的表示向量为(不考虑score的归一化)
考虑上下文因素,根据当前预估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模型中对稠密连续型和序列特征的处理方法,欢迎关注公众号浅梦的学习笔记,回复“加群”一起参与讨论交流!
历史文章
喜欢的话点个在看吧????