曾几何时,我们炼的不是丹,是特征

对于炼丹师来说,特别是面对海量特征,还要从中挖掘出交叉特征"喂"给模型,是十分痛苦的。不得不说,人都是"懒惰"的,我们炼丹师当然希望有个厉害的深度学习模型,只需要对最原始的特征做预处理后,扔给模型,让它自己学习交叉特征。

希望模型像"奶牛"吃草,挤得是"牛奶",那么我们必须保证"喂"的是草。并不是所有的交叉特征与推荐系统的最终优化目标都是相关的,盲目的"喂"特征只会带来更多的噪声和系统准确率的下降。《Detecting Beneficial Feature Interactions for Recommender Systems》这篇论文就提出了用GNN去自动检测对推荐系统有利的交叉特征。

v2-61c2809d9f31ce41ed4a1ea91aff062f_b.jpg

首先一个数据集定义如下:

v2-8264f497d6bb8d4459a60f3c72b4caf5_b.jpg

v2-d62b9d9636b392a33ebad255b72c039d_b.jpg

其中ck表示类目特征,xk标志特征的值,J是所有特征的索引。

定义1: 有益的pairwise交互特征

这个定义其实比较简单,就是有一系列特征,所有特征两两组合,成一个大的集合,我们希望从中能找到一个交叉特征子集,它在验证集上的准确率优于其他子集。

定义2:pairwise statistical interaction

这个定义是这样,有x1~xk一共k个特征(特征是向量同理),F(X)能表示成两个分别不依赖xi和xj特征的函数之和,那么我们认为这两个特征间没有pairwise statistical interation,如下式:

v2-d244779ca7b1c589fda8644af10a7259_b.jpg

v2-10948446073410758430cc8c0c47b0be_b.jpg

L0-SIGN模型的输入是没有边信息的图,特征是nodes,特征交互是边,如果两个特征nodes之间存在边,代表这两个特征的交互特征对模型有益。

L0-SIGN有两个模块,第一个是L0边预估模块,就是预估边应不应该存在。然后是图分类SIGN模块,SIGN模块如下图所示:

v2-38c724fae0ef666b56ec7166786589de_b.jpg

首先有初始化embedding后的nodes,通过边进行交互,然后nodes的表达开始不断更新,最后更新完的所有nodes的表达产出最终预估。整体的预估函数如下:

v2-91ee37299ce5fd948ba40b6edcef99c2_b.jpg

L0 边预估模块:

这里我们使用基于矩阵分解的模型对边进行预估。矩阵分解通过对图的邻接矩阵进行分解,能够非常高效的对边进行建模,而且把所有node转成稠密向量。但在L0-SIGN中,我们并不知道该图的邻接矩阵真实应该是什么样,所以无法进行梯度更新。所以每条边的值,我们通过一个边预估函数:

v2-d6bc56d64cebab1e74be120bce780ad3_b.jpg

输入两个节点embedding,输出0/1,表示node间是否有边,我们知道无向图邻接矩阵是对称的,所有fep也是对称的:

v2-a083ae1705029515be82876cc54ce722_b.jpg

在这篇论文中,fep的输入是两个node向量的element-wise product,fep是多层感知器。在训练的时候,L0就像正则化一样最小化探测边的数量。

SIGN边预估模块:

如果两个节点之间边是1,那么这两个节点之间的交互特征用一个非加法的函数映射:

v2-6b2ab45dfe0fbf56a57356ce8114d60d_b.jpg

通过该函数映射后的embedding zij就是交互特征。和fep类似,h(ui, uj)函数同样要是对称的。接下来每个节点就可以开始更新过程,每个节点的更新用一个线性aggregation方程:

v2-18311457a6425c60842911c4cad9d7a6_b.jpg

最后所有节点的embedding都会通过一个线性方程g转变成标量,所有的标量再通过一个线性方程转变成SIGN的输出,如下所示:

v2-9d7245ef03f0272cb7ad50598e349771_b.jpg

v2-149f1fbff7a84f518f2ff253fcfa1b96_b.jpg

v2-d9d06f9ab13bedfee88f08eb2ced10cc_b.jpg

v2-5f39a6343d2637ea15c4a25e10713960_b.jpg

SIGN总体的预估函数如下:

v2-5bdb9972463b686d17ce5e4ca45186bc_b.jpg

总结完所有模块,L0-SIGN的预估方程就如下所示:

v2-8ff9b07e50ead1d10d730447ba2fc40a_b.jpg

v2-96505d0cbc8224e77caec49c2b4c02c1_b.jpg

为了确保模型能够成功的找到有益的交互特征,损失函数定义如下:

v2-350d0dc384004937234d9269f81b665a_b.jpg

一共3项,第一项就是正常预估偏差,第二项是所有边为1的概率和,第三项是l2正则项。

v2-a28f9a5bde5f948ea71e3ef4af962a2d_b.jpg

v2-1bdcd9e40791199e1d32b21dbeb213f2_b.jpg

v2-c88267f95e2dd760ea5a412e54ef07aa_b.jpg

从实验中,我们可以看到无论对比各种FM模型,还是图模型,L0-SIGN都表现最优。

v2-071e132c7353c2be34deb925be1bf617_b.jpg
更多干货,请关注:炼丹笔记
曾几何时,我们都是炼的不是丹,是特征!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值