新浪微博 FiBiNET:结合特征重要性和双线性特征交互进行 CTR 预估

阅读数:13 2019 年 11 月 29 日 13:23

新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估

背景及简单介绍

基于深度学习的 CTR 预估模型用处已经很广泛,模型也提出了很多,比如 wide&deep,DCN,DIN 等等。但是许多模型在计算特征交互时用的还是较简单的方法:比如 Hadamard 乘积或者内积,而很少去关注特征的重要性。本文提出了一种新的 CTR 预估被称为 FiBiNET,该模型名是 Feature Importance and Bilinear feature Interaction NETwork 的缩写。一方面,FiBiNET 可通过 Squeeze-Excitation network 动态学习不同特征的重要性权重,因为不同的特征其实对目标预测的重要性是不一样的,比如在一个人的收入时,职业的特征肯定比爱好的特征来的更加重要;另一方面,通过双线性变换函数从更加细粒度的角度高效学习特征的交互。通过结合 DNN,deep FiBiNET 模型在 realworld datasets 上取得了很好的性能。

相关工作

Squeeze-and-Excitation Network(SENet)模块
新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估

上图是 SENet 的 Block 单元,图中的 [公式] 是传统的卷积结构,X 和 U 是 [公式] 的输入(C’H’W’)和输出(CHW),这些都是以往结构中已存在的。SENet 增加的部分是 U 后的结构:对 U 先做一个 Global Average Pooling(图中的 [公式] ,作者称为 Squeeze 过程),输出的 11C 数据再经过两层的全连接(图中的 [公式] ,作者称为 Excitation 过程),最后用 sigmoid(论文中的 self-gating mechanism)限制到 [0,1] 的范围,把这个值作为 scale 系数乘到 U 的 C 个通道上, 作为下一级的输入数据。这种结构的原理是想通过控制 scale 的大小,把重要的特征增强,不重要的特征减弱,从而让提取的特征指向性更强。

模型结构

新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估
Sparse Input and Embedding layer
首先是输入层和 Embedding 层,和常规的 DeepFM,AFM 等模型没什么区别,输出是 [公式] ,其中 f 是特征 fields 的数目, [公式] , 表示第 i 个 field 的 embedding 向量,维度为 k。

  1. SENET Layer

新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估
输入是 embedding 层输出的 [公式] ,SENET Layer 输出一个权重向量 [公式] ,每个值都对应一个特征 field。然后将该权重向量与 embedding 层的输出相乘得到: [公式] 。

展开来说,SENET 一共三个步骤:

squeeze step:计算每个 field embedding 的概况统计(summary statistics)。使用 max 或者 mean pool 针对每个 field 得到一个统计向量: [公式] 。其中 mean pool 的效果要好于 max pool,这也很好理解,因为 embedding 提取出来的 k 维度的向量,如果只是取最大的一个值是会损失很多信息的。
Excitation:根据向量 Z 计算每个 field embedding 的权重,使用的是两层 FC:
新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估
Re-Weight:将原来的 field embedding 与 Excitation 步骤输出的 A 向量逐元素相乘:
新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估
3. Bilinear-Interaction
新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估

传统的特征交叉方式广泛采用了内积 (fm,ffm 等) 和哈达玛积 (AFM,NFM 等)。其中内积可被表示为:
新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估

哈达玛积可被表示为:[公式] 。而这两种方式在稀疏数据上很难有效对特征交叉进行建模。文章提出结合内积和哈达玛积并引入一个额外的参数矩阵 W 来学习特征交叉。如上图有半部分所示: [公式] 和 W 之间是内积,W 和 [公式] 之间是哈达玛积。

交叉向量 [公式] 可通过三种方式得到:

  • Field-All Type:这种情况下,所有特征组交叉时共享一个参数矩阵 W,额外参数量为 W 矩阵的大小 k×k。
  • Field-Each Type:每个特征组 field i 维护一个参数矩阵 Wi,额外参数量为 (f-1)kk。
  • Filed-Interaction Type:每对交互特征 [公式] 都有一个参数矩阵 [公式] 。额外参数量为 0.5*(f-1)kk。
    最终,交叉层由原始的特征组 embedding 向量 E 以及 SENET 层输出的 embedding 向量 V 分别得到交叉向量 p 和 q。
  1. Combination Layer

组合层将交叉向量 p 和 q 进行拼接操作:
新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估
若直接对 c 向量中的元素进行求和并使用一个 sigmoid 函数输出,则得到一个浅层的 CTR 预估模型,若将该向量输入深度神经网络,则得到一个深度 CTR 预估模型。

  1. Deep Network

输入是组合层的输出 c,通过几层的 MLP 转化,最后通过 sigmoid 函数输出 CTR 的预估值 [公式] 。

  1. Output Layer
    新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估

实验

浅层 FiBiNET
新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估

深层 FiBiNET

新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估
参考文献:

https://arxiv.org/pdf/1905.09433.pdf
https://blog.csdn.net/u012151283/article/details/95234555
https://zhuanlan.zhihu.com/p/32

本文转载自 Alex-zhai 知乎账号。

原文链接: https://zhuanlan.zhihu.com/p/76698689

评论

发布