《CAN: Revisiting Feature Co-Action for Click-Through Rate Prediction》论文阅读

背景

作者发现把预估商品信息(如item_id)和用户用户历史行为序列(如item_id sequence)做笛卡尔积,形成一个新的id suquence, 对其做embedding后pooling效果会在din/dien的基础上有明显的提升。DIN/DIEN等建模方式的特征交叉最终算出了一个weight,是个标量而没有方向,输出的只是对序列embedding的reweight结果,相比笛卡尔积的直接建模P(y|A&B) 能力会弱一些。但笛卡尔积有个严重的问题是这样参数量会急剧增加,并且同个特征和不同特征做交叉时没有任何共享信息,泛化性不强,对于没有出现过的特征组合预估不准。

论文中把和label关系密切的特征组合称为feature co-action,CAN这片论文提出了一种特征交叉方法,这种特征交叉方法不仅可以用与普通特征交叉,而且还可以用与序列特征处理

 

网络结构

 

这片论文的网络结构如上图所示,这个网络的右半部分就是一个用DIEN进行序列建模的传统DNN,我们重点关注左半部分,对于一个候选item id,这篇论文不仅用item id特征和use age这种非序列特征交叉,而且还用用于和用户历史行为的序列特征交叉,用于交叉的结构称为Co-Action Unit, Co-Action Unit如上图最左边所示

Co-Action Unit实现特征交叉的步骤可以总结为:

1. 从user侧选取部分特征构成Puser,从item侧选取部分特征构成Pitem

2. 把Pitem reshape层一个行向量,然后切分成3段,每段都是MLP中的w和b

3. 然后输入Puser到这个MLP中做运算

注意:这里选取item作为MLP参数的原因时因为候选item一般比user或user点击序列item数目少很多

 

理解:相当于FM -> FFM

 

实验

作者以DIEN模型为基线,对比了DIEN加CAN的结果,还通过消融实验分析了CAN输入user特征阶数、CAN MLP层数、CAN MLP激活函数对实验结果的影响

 

实践经验

非序列特征交叉

  1. 按特性重要性选取top k特征作为CAN MLP的参数(可以把这些特征的emb concat后过一个MLP得到想要的维度)
  2. 所有特征emb和这个CAN做运算后再进NN

 

序列特征交叉

采用CAN+profile weighted sumpooling建模序列特征
把用户行为序列特征拆为两个序列:
1. id 序列
2. profile 序列
CAN结构是一个[16, 16, 16]的NN,NN参数由target(候选item)向量reshape而来(item相关特征),CAN的输入是id序列中的每个id特征,通过CAN得到了序列中每个位置的weight,最后用CAN的输出与profile 序列embedding做element-wise乘积后sumpooling得到这个序列的最终计算结果

 

参考资料

想为特征交互走一条新的路

https://www.jianshu.com/p/5f6e938ae086

posted @ 2022-05-01 14:37  xd_xumaomao  阅读(101)  评论(0编辑  收藏  举报