作者:十方
说到点击率模型这个“古老”的话题,大家第一时间想到的是wide&deep,DeepFM,DCN等。但是说到GNN预估点击率,大家又能想到几个呢?《Explicit Semantic Cross Feature Learning via Pre-trained Graph Neural Networks for CTR Prediction》这篇论文告诉我们GNN搭配预训练和显式交叉特征,可以"吊打"现有的点击率模型,那接下来看看这模型有什么特别之处吧。
现存模型有哪些问题?
论文指出,现存模型都是"隐式"挖掘交叉特征的,就像一般的DNN,所有特征embedding后输入到全连接层,每一个bit的特征都会交叉,但是我们也不清楚最后到底哪些特征之间的交叉特征真正被被模型所利用。当然有种常用添加显式交叉特征的做法,就是通过统计两个特征出现的count等历史统计特征,添加到模型。这样存在的问题也很明显,主要有以下两个大问题:
- 泛化能力不强:比较容易理解,基于统计提取交叉特征,我们只能提取到历史出现过的pair对,对于没处出现过的pair,我们只能给予个默认值,这样就影响了模型的泛化能力。
- 极其占用资源:统计特征实际使用时,需要一张很大的此表,key是统计的pair,value是统计值,而且随着时间变化,这张巨大的此表也需要频繁更新,由此引起了很多计算和维护成本。
所以本文提出了Pre-trained Cross Feature Graph Neural Networks(PCF-GNN)把丰富的交互特征建模成图上的边,每个节点都是一个特征,采用自监督的预估任务的GNN模型能学到显式交互特征并推断出新的边信息。
PCF-GNN
既然是pretrain模型,第一步当然是做预训练,然后再进行下游任务也就是点击率预估。
关于图构建(如下图所示),首先用历史交互行为构建图,图中用户,item,Shop都是节点,边就是节点直接交互的概率。如u1和i1曝光过3次,点击过一次,所以边的值为1/3。
接下来就可以进行预训练了,我们知道边的值本质上就是显式的交互特征,我们通过自监督学习,预估边的值,预估任务被定义为mse(pu,v - au,v),pu,v是PCF-GNN的输出。
GNN非常重要的环节就是每个node理解邻居的信息,学到自己的embedding。这篇论文提出了一个基于multi-relation的聚合函数,如下图所示:
这个公式表达的非常清楚且简洁,k就是第几层(需要多次聚合),r是节点间是何种关系,不同关系会通过AGGREGATE函数聚合成|r|个向量,最后再通过COMBINATION函数把|r|个关系的向量聚合起来最后最终i节点的输出。AGGREGATE和COMBINATION可以参考GraphSAGE。当计算出hi后我们通过CrossNet求得最终预估值,如下式所示:
论文提到,损失函数不能简单的定义为mse,因为不同边,对预估ctr的权重是不一样的,为了预训练模型能够更好的区分交互特征的重要性论文提出了weghted square loss,定义如下所示,所以共现次数越高,重要性越强:
在完成预训练后,我们就可以进行下游任务了,如下图所示:
将不同node的embedding和p作为特征,再加上其他特征输入到最终的全连接网络,预估最终的点击率。
实验
pcf-gnn效果上均优于其他模型。
更多细节参考原文:
https://arxiv.org/pdf/2105.07752.pdf