观点 | FiBiNET: paper reading + 实践调优经验
admin
834
2024-10-18 15:40:44
编辑
《观点》栏目是由观远数据倾力打造的一档技术类干货分享专栏,所有内容均来源于观远数据内部员工,旨在为数据分析行业输出指导性的知识体系。
FiBiNET全称Feature Importance and Bilinear feature Interaction NETwork[1],是新浪微博提出的一种基于深度学习的广告推荐/点击率预测算法。不例外的,可以认为FiBiNET是在Google在2016提出的wide & deep learning算法[2](以下简称WDL,推荐系统中影响非常深远的一个base model)基础上对它的wide部分进行了一些创新的改进,或者直接视为FNN[3]的一个变体。主要的创新点在于:
- 在传统的embedding stage加入了一个SENET层对已经完成embedding的特征再做了embedding,得到了与特征重要性(Feature Importance)相关的信息。
- 再把这些信息连同原始的embedding feature一起结合起来生成新的特征向量后,不使用传统的inner product或Hadamard product方法,而是选择了结合二者的一种新的bilinear interaction方法来获得特征之间的联系。
总的来说是一篇非常清爽干净的工业界论文,读起来很快很利落实在,但同样存在此类论文常见的缺陷也就是符号定义很不规范,当然这不重要,为了表示对作者的尊重和出于讨论的一致性,我在本文还是会沿用原文的符号标记。我自己也按照论文的方法尝试了一些分类问题的并不干净整洁的工业界数据,取得了不错的效果。目前也有DeepCTR这样的库封装了它的实现,有兴趣可以自己去阅读源码,使用和改进。这里简单的介绍这篇文章提出的方法和我在它的实践上总结的一些经验。
当然这里的deep部分结构非常传统没什么可多解释的,比较有新意需要详细说明的是浅层网络里如何使用SENET得到特征的权重得分,以及如何用bilinear函数计算特征之间的关联。
我是在直接用DeepCTR中所有模型尝试业务数据时发现FiBiNET有非常稳定的高准确率表现所以开始找它的原理和实现,希望能总结一些经验和可以尝试的改进方法,也就是记录一下to do list。
虽然模型是针对点击率预测的场景提出的,但可以尝试的数据场景也不少,比较适合包含大量categorical feature且这些feature cardinality本身很高,或者因为encode method导致的某些feature维度很高且稀疏的情况。推荐系统的场景因为大量的user/item属性都是符合这些要求的,所以效果格外好,但我们也可以举一反三把它推广到其他相似场景。另外,文字描述类的特征(比如人工标注的主观评价,名字,地址信息……)可以用tokenizer处理成int sequence/matrix作为embedding feature喂进模型,丰富的interaction方法可以很好的学习到这些样本中这些特征的相似之处并挖掘出一些潜在的关系。
回归和分类问题都可以做,无非改一下DNN最后一层的activation函数和objective,没有太大的差别。
如果dense feature比较多而且是分布存在很多异常值的numeric feature,尽量就不要用FiBiNET了,相比大部分NN没有优势不说,SENET那里的一个最大池化极其容易把特征权重带偏,如果一定要上,可能需要修改一下池化的方法。
DeepCTR库中的相关实现源码的架构和原论文有一定的差异。原论文所做的工作约等于这个模块里面处理sparse feature部分的工作,除了原论文的工作,这里的实现还把指定的linear feature作为类似于WDL中的wide部分直接输入到DNN的最后一层,以及DNN部分也吸收了一部分指定的dnn feature中的dense feature直接作为输入。毫无疑问,DeepCTR作者在尽可能的保留更多的特征作为输入防止信息的丢失。
- 因为模型本身不够深也不算复杂(原文是3层hidden layer,DeepCTR默认2层),GPU对它几乎没有加速。
- 使用Field-Each方式能够达到最好的预测准确率,而且相比默认的Field-Interaction,参数也减少了不少,训练效率更高。当然,三种方式在准确率方面差异不是非常巨大。
- reduce ratio设置到8效果最好,这方面我的经验和不少人达成了共识,SENET用于其他学习任务也可以得到相似的结论,当然这里很玄学,我没有测试足够多的数据集,这部分可能需要根据个人任务在tuning过程中自己探索。
- 使用dropout方法扔掉hidden layer里的部分unit效果会更好,系数大约在0.3时最好,原文用的是0.5,请根据具体使用的网络结构和数据集特点自己调整。
[1] Huang, Tongwen, Zhiqi Zhang, and Junlin Zhang. "FiBiNET: Combining Feature Importance and Bilinear feature Interaction for Click-Through Rate Prediction." arXiv preprint arXiv:1905.09433 (2019).[2] Cheng, Heng-Tze, et al. "Wide & deep learning for recommender systems." Proceedings of the 1st workshop on deep learning for recommender systems. ACM, 2016.[3] Zhang, Weinan, Tianming Du, and Jun Wang. "Deep learning over multi-field categorical data." European conference on information retrieval. Springer, Cham, 2016.[4] Hu, Jie, Li Shen, and Gang Sun. "Squeeze-and-excitation networks." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.


观点 | FiBiNET: paper reading + 实践调优经验