【GCN-CTR】早期工作Fi-GNN (CIKM‘19)——懂了,要用Transformer~
早期工作Fi-GNN
《Fi-GNN: Modeling Feature Interactions via Graph Neural Networks for CTR Prediction》CIKM’19
类似session-base RS里的SR-GNN,是GNN最早用在CTR上的模型,所以成了经典baseline。
Motivation
CTR模型的输入由以下几部分组成:用户id、用户特征、用户历史行为、物品id、物品特征。由于模型输入有特征,因此简单的 LR 模型就可以实现CTR任务,但是LR只根据一阶特征进行预测,因此大量的CTR模型都在追求有效的“特征组合”方法,以利用到“高阶特征”。
FM、FFM、Wide&Deep、DCN、xDeepFM等模型都是为了学习高阶特征而设计的,然而作者认为这些特征组合方法是“unstructured combination”的! 为了利用特征之间的结构特性,作者利用GNN来建模特征交互。
因此在这篇文章中是把一个特征field当作一个节点(也可以理解为一个特征是一个节点,因为一个field最后只产出一个embedding),构成一个Feature Graph。比如一条样本:用户id、城市、性别、职业,那么Feature Graph就有这四个节点构成,图上的边表示特征交互。
Method

由Fi-GNN的模型图可以看出,需要重点理解的是红框内的模块,其余模块很好理解。
Feature Graph
Feature Graph是个全连通图,每个特征节点都和其他特征节点都有一条边相连(假设共 m 种,文章数据集种分别是23和39),边的权重是由Attention计算出来的。
w\left(n_{i}, n_{j}\right)=\frac{\exp \left(\operatorname{LeakyRelu}\left(\mathrm{W}_{w}\left[\mathrm{e}_{i} \| \mathrm{e}_{j}\right]\right)\right)}{\sum_{k} \exp \left(\operatorname{LeakyRelu}\left(\mathrm{W}_{w}\left[\mathrm{e}_{i} \| \mathrm{e}_{k}\right]\right)\right)}
\mathrm{A}\left[n_{i}, n_{j}\right]=\left\{\begin{array}{l} w\left(n_{i}, n_{j}\right), \text { if } i \neq j \\ 0, \text { else } \end{array}\right.
所以对于每个样本都有一个邻接矩阵,除了对角线上之外都是有值的。
GNN layer
在GNN模块上也和SR-GNN也很似曾相识:

\mathbf{h}_{i}^{t}=G R U\left(\mathbf{h}_{i}^{t-1}, \mathbf{a}_{i}^{t}\right)+\mathbf{h}_{i}^{1}
对于第 t 层,图上节点 i 的特征 \mathbf{h}_{i}^{t} 等于是GRU的输出加上节点的初始embedding \mathbf{h}_{i}^{1} ——> GRU的输入是上层节点的特征 \mathbf{h}_{i}^{t-1} ——> 和节点聚合的特征 a_i^t ——> a_i^t 是根据图结构 A 聚合了上层所有节点的特征得到的 ——> A 是
Prediction layer
用最后层输出作为预测层的输入,\mathbf{h}_{i}^{p} = \mathbf{h}_{i}^{t}
\begin{gathered} \left.\hat{y}_{i}=M L P_{1}\left(\mathbf{h}_{i}^{p}\right)\right) \\ \left.a_{i}=M L P_{2}\left(\mathbf{h}_{i}^{p}\right)\right) \\ \hat{y}=\sum_{i=1}^{m} a_{i} \hat{y}_{i} \end{gathered}
三点思考
从这篇文章有三点感想
Transformer适合用于CTR
这篇文章的Fi-GNN模型实际上可以看作把单头的Transform中的FeedForward模块换成了GRU:

虽然attention的计算方式不太一样,但模型结构上其实差不多,包装了一个GNN的故事
用Transformer的话还有 Multi-head Attention,岂不是还能实现“并行GNN”。
Transformer其实是个图模型
这篇文章搞了一个图结构是一个全1的邻接矩阵,虽然有些强行硬蹭的嫌疑,但是也给了我们启发,Transformer那不就是可以看作一个图模型了吗,query和key的计算结果是该节点与其余所有节点边的权重,再与value加权和就是在图上“卷积”。
end-to-end的GCN-based CTR模型不是很好办
不像LightGCN等模型,end-to-end的GCN CTR模型并不是很好设计,所以random walk、node2vec等预训练方法为CTR模型提供初始化用的更多一些。
