导读:全文约3300字,分为以下5个部分,请按需阅读。
I. 研究背景:特征交互与笛卡尔积
II. CAN的实现:模型结构,实现细节,多阶优化以及各模块间的独立性
III. 实验结论:与各类state-of-the-art模型的比较
IV. 模型线上部署:serving时遇到的问题和解决方案
V. 总结
文中图片均来自于论文原文。
本篇文章介绍了阿里妈妈定向广告团队的最新作品:Co-Action Net(以下简称CAN)。CAN提出了一种全新的特征交互思路,将待交互的特征(用户侧和商品侧特征)分别作为DNN的输入和权重,用DNN的输出作为特征交互的结果。CAN在提升了特征交互的表达能力同时,降低了传统的笛卡尔积交叉所需要的计算复杂度。
论文地址:https://arxiv.org/abs/2011.05625.
作者的知乎专栏:https://zhuanlan.zhihu.com/p/287898562
I. 研究背景
在CTR预估任务中,特征间的交互一直是业界研究的热点。由于DNN以一个隐式的方式来学习输入特征,很难单纯依靠DNN来从庞大的稀疏特征集中学习到有效的特征交互,因此许多工作都在特征工程中采用了了手动特征交互,FM, FNN, PNN, DCN和DeepFM等都从不同的方面阐述了这一点,感兴趣的同学可以参考笔者之前的文章: 《从FM到DeepFM:浅谈推荐系统中的模型演化》。
在推荐系统模型的构建中,特征工程占有十分重要的地位。在海量的输入特征中,用户行为(user behaviors)和推荐商品(recommended item)两者的交互可以准确地建模用户兴趣,论文作者将这种交互特征统一命名为co-action. 如图1所示:A和B代表模型的输入,Target可以为ctr的预估值。一般来说,可以由DNN来学习A和B之间的关系。但如果我们在输入端就手动将A、B进行交互,学习的难度会大大降低。
对于特征交互,最基本的方式就是做笛卡尔积(Cartesian Product)。在tensorflow中,这个操作就是cross column[1]. 对于特征A和B,笛卡尔积将两者组合成一个新特征(A, B);改变A或B的值,就会得到一个全新的特征。这种方式可以刻画出A、B间的所有组合。在训练样本充足,不考虑性能的情况下,笛卡尔积是最好的特征交互方式。但笛卡尔积有两个缺点:
- 样本不足:推荐模型处理的大多都是稀疏的高维特征,样本空间可以到十亿甚至级别,特定样本组合的出现频率很低,会导致笛卡尔积的学习变得困难;
- 存储空间太大:假设A和B特征空间的大小是M, N,笛卡尔积所需要的存储空间就是M * N,需要存储一个庞大的参数矩阵。实际应用中会采用hash的方式来降低参数空间,但这样又牺牲了笛卡尔积的精确度。
II. Co-Action Network
顾名思义,CAN的目的在于建模不同特征之间的Co-Action,可以理解为一种新的特征交互方式。简单来说,该论文实现了一个pluggable的CAN网络单元,将待交互的两类特征分别作为CAN网络的输入和权重,网络的输出作为特征交互的结果。
2.1 Co-Action Net的结构
图2展示了CAN的基本结构。输入特征可以分为用户行为序列(user behavior sequence),候选商品(target item),用户画像特征(user age 等)和其他特征。其中user sequence、target item和other feature通过embedding层后输入到DIEN网络结构。对于CAN部分,user sequence和target item的embedding被用作CAN的输入和权重参数,最后输出的结果sum pooling起来,与DIEN的输出concat在一起过后面的DNN部分。下面重点介绍一下整个网络结构中的关键:Co-Action Unit.
CAN的整体实现逻辑还是比较简单的。将CAN中的全连接网络记为,候选商品特征作为网络的weight和bias,而用户行为序列特征 则是网络的输入。这里是所有unique ID的个数,即item ID的参数空间;和是embedding size,且<. 在广告系统中,与用户点击过的商品相比,target item的个数较少,因此用来作为的参数。 由于包含了多层的参数,因此其维度需要大于,即<. 通过split和reshape操作转化为weight和bias参数,这一过程可以表述如下:
其中和表示第层的参数。至此,整个CAN的计算过程可以表示为:
对于序列特征,论文中是将CAN作用于序列中的每一个item, 再进行sum pooling操作。
与其他特征交互方式相比,CAN有以下几个优点:
- 相比于笛卡尔积,CAN结构显著减小了参数量。
考虑两个维度均为[N, D]的特征,其中N为unique IDs的数目,D是embedding 维度。使用笛卡尔积的参数量为,而CAN的参数量则为,T为的参数量,通常远小于N. - 对于未出现的新特征组合,CAN有更好的泛化性,而笛卡尔积由于是一种硬编码,没有这种能力。
举个例子,现有笛卡尔积的组合特征(A, B);对于取值A=A1, B=B1和A=A1, B=B2,对应的笛卡尔积(A1, B1)和(A1, B2)之间是相互独立的,无法共享A=A1这一参数。而CAN中利用DNN权重和输入独立的结构,可以建模到上述的这种信息。 - 论文引入了一个multi-order enhancement机制来保证高阶的特征交互操作。
2.2 Multi-order Enhancement
前述的CAN结构只能显示地建模一阶特征交互。对于更高阶的情况,可以通过高阶输入来实现,即
其中c是特征交互的阶数。
2.3 Multi-level Independence
论文中引入了3种做法来保证CAN学习的独立性。
-
Parameters Independence:necessary
即CAN的参数(和的embedding)和主网络的embedding互相独立。 -
Combination Independence: recommended
我们知道,和是由不同的特征concat而来,如item id, category id, 等等。假设和分别包含和个特征。理想情况下,种的某个特征应该和种的所有特征进行交互(反之亦然),这样才能充分地对特征交互进行建模。但在公式(3)和(4)种可以看到,被split后分别作为不同层的参数,这样就会有信息的丢失(笛卡尔积就没有这个问题)。作者采用的方式是将和分别扩大和倍:
其中是的输入维度,这样就可以保证所有特征都能够显式地在中得到交互。 -
Orders Independence: optional
对应2.2节中的多阶CAN,即不同阶数之间的参数是不同的。要注意的是如果采用了orders independence,式(9)中的近似公式就不成立了。
III 实验结论
3.1 CAN对比其他特征交互模型
由Table 2可以看出,CAN在两个实验数据集上的AUC指标均优于PNN,NCF[2],DeepFM;除此之外,笛卡尔积(Cartesian)作为最基础的特征交互手段,其结果是优于PNN,NCF和DeepFM的。但CAN的实验结果甚至比笛卡尔积还要好,这里的原因我想有两点:
- 如2.1节末尾介绍,采用DNN的结构来对不同特征进行交互,其表达能力和泛化性比笛卡尔积更强;
- 如2.2节所述,CAN可以对高阶特征交互进行建模,弥补了笛卡尔积的短板。
3.2 对于新特征组合的泛化性
为了验证CAN的泛化性,作者将test数据集中的那些在训练集中出现过的特征组合都删除,构造了一个冷数据测试集,该测试集中所有的特征组合都是模型之前没有见过的。实验结果如Table 5 所示:
可以看出,NCF和DeepFM的结果要优于笛卡尔积。与Table 2中的结论相比,证明笛卡尔积的泛化性确实存在问题;同时,CAN的AUC最高,也证明了CAN结构的泛化性明显强于笛卡尔积以及其他的特征交互方式。
IV 模型部署上线
笔者认为这是本论文最精华的部分之一。作者在本节中详细论述了CAN模型在部署到阿里巴巴展示广告系统时遇到的一些困难和解决方案,对复杂ctr预估模型的落地有很大的指导意义。
特征交互,是在原始特征的基础上对特征对(feature pair)进行额外的组合,势必会引入额外的存储和计算开销。我们知道,CTR模型的大部分参数都集中在embedding部分,而笛卡尔积会让embedding大小线性增加。对于两个维度(此处维度指unique IDs的数目)为M和N的特征,笛卡尔积需要引入一个(M x N, embedding_size)大小的embedding矩阵;除此之外,新增的embedding也会引入更多的lookup操作,严重影响模型的响应时间,latency增大。作者提到即使采用了IDs frequency filtering(个人理解是根据ID出现的频率,过滤掉一部分低频ID来减小参数量,即低频过滤)也无法缓解。
对于CAN模型,虽然参数大大减小,但以上问题还是会影响到模型的部署。论文中使用了6个ad侧特征和15个用户侧特征进行交互,理论上这样会引入15 x 6 = 90个特征组合。而用户侧特征多为用户的行为序列,普遍长度都超过100,会带来更大的负担。
为了解决以上问题,论文中采用了以下方案:
-
序列截断
顾名思义,对用户侧的特征进行截断,只保留最近的用户行为,减轻模型压力。序列截断是解决此类性能问题的常规手段。这样做会带来20%的QPS提升,同时AUC下跌0.1%,在可接受范围内。同时也说明,CAN带来的特征交互收益,主要集中在用户最近的行为中;很久之前的行为对模型效果影响不大。 -
减小特征组合数
如前文所述,所有特征组合一共有90种,但这里面会包含一些重复的,或者没有实际意义的特征组合。一般来说,相同属性的特征交互建模效果最好。因此实验只保留了诸如[item_id, item_click_history]、[category_id, category_click_history]这类组合,删掉了很多无用或重复的特征。
这里将特征组合数从90减小到了48,提高了30%的QPS。可见再智能的神经网络,也离不开手动特征工程。 -
矩阵计算性能优化
论文中重新设计了部分matrix multiplication的计算方式,获得了QPS的进一步提升。具体细节没有介绍,期待开源代码中可以看到相关实现。
V. 总结
特征间的交互对ctr预估模型具有重要的意义。本论文阐述了笛卡尔积和一些常用模型结构(FM,PNN,DeepFM等)的不足,提出了一种新型网络CAN来建模Feature Co-Action。CAN用DNN的输入和权重来建模特征交互,既解决了笛卡尔积的空间复杂度和泛化性问题,又能够获得较好的特征交互效果(体现在模型auc的指标上)。同时,引入了多阶输入(multiorder enhancement )和模块间的独立性(multi-level independence)使CAN的功能更加完备。最后介绍了模型上线遇到的困难和解决方案,对大型ctr预估模型的部署有很大的借鉴意义。
参考资料
[1] https://tensorflow.google.cn/tutorials/structured_data/feature_columns?hl=en
[2] Xiangnan He, Lizi Liao, Hanwang Zhang, Liqiang Nie, Xia Hu, and Tat-Seng Chua. 2017. Neural collaborative filtering. In Proceedings of the 26th international conference on world wide web. 173–182.
[3] https://zhuanlan.zhihu.com/p/287898562
.