作者:mobiledu2502876347 | 来源:互联网 | 2023-10-11 16:21
一、前言 现在推荐系统,网络搜索和在线广告的数据大多是分类的,并包含多个字段,有一个典型的方法将他们转化成高维稀疏二进制特征表示就是通过one-hot编码。对于这些高维稀疏的特征,传统模型可能会限制它们从数据中挖掘浅层模式的能力,即低阶组合特征,另一方面,像深度神经网络这样的深度模型由于巨大的特征空间而不能直接应用于高维输入。(浅层模型例如FM虽然可学习二阶特征交叉但是表达能力有限;而深层模型例如DNN虽然可以学习高阶信息,但是DNN本身并不具备学习特征交叉的能力(不同的field之间并无”且“的运算),而且过于稀疏的输入也不利于网络学习。)所以本文提出了PNN这个模型,其中的embedding层学习种类特征的分布式表示,product层捕获种类特征之间的交互特征(学习filed之间的交互特征),全连接层捕获高阶交互特征(PNN模型大致由三个部分组成:embedding层、product层、FC层。其中product为PNN的关键创新,它引入了不同的特征field之间的交叉信息并给予后续的FC层学习。)。
二、产生原因 信息检索领域(IR,Information Retrieval)包括:推荐系统、web search、线上广告。其核心是User Response Prediction,是指给出用户关于一个预先定义好的行为的概率。这些行为包括:clicks、purchases。预测的概率代表了用户对特定物品感兴趣的程度,物品包括:新闻、商品、广告。而这会影响商家对于展示文档的排序,广告投标等。IR问题最大的数据特点就是multi-field categorical,举例来说:对于[Weekday=Tuesday, Gender=Male, City=London],通过one-hot编码转化高纬度稀疏的数据: 在传统的机器学习模型中,例如像LR,GBDT依旧非常依赖人工特征工程,FM则缺少对高阶组合特征的建模,仅仅对特定阶的组合特征建模。
随着DNN在图像处理、语音识别、自然语言处理领域大放异彩,将DNN应用于CTR预估或者推荐系统的研究逐渐多了起来。DNN的输入往往是dense real vector 但是multi-field类别型特征起初是高维且稀疏的。常见的做法是通过加入Embedding Layer将输入映射到低维度的Embedding空间中。FNN使用FM初始化embedding vector,同时也受限于FM;CCPM利用CNN卷积来学习组合特征,但是只在相邻的特征间卷积,没有考虑到非相邻的特征的组合。
Embedding+MLP结构是DNN应用在CTR预估的标准模式。通常,NN层之间都使用“add operation” ,通过激活函数来引入非线性。作者认为,单纯的“add”也许不足以捕获不同的Filed特征间的相关性,原文表述为:"The ‘add’ operations of the perceptron layer might not be useful to explore the interactions of categorical data in multiple fields. ”
文中指出,一些相关研究表明“product”相比“add”能更好得捕捉特征间的dependence,因此作者希望在NN中显示地引入“product”操作,从而更好地学习不同Field特征间的相关性,在DNN结构中引入product layer即是这样的一个尝试。
三、模型介绍 首先说明一下符号:
3.1 Input层 一个类别型特征就是一个Field。比如用户信息包括:性别、职业等,这里的性别是一个Field,职业是另一个Field。上图中的Input是one-hot之后的,而且只给出了类别型特征。所以每个Field i都是一个向量,向量的大小就是类别型特征one-hot之后的维度。所以不同Field的维度是不同的。
3.2 FC层与embedding层
Embedding是Field-wisely Connected,就是每个Field只管自己的嵌入,Field之间网络的权重毫无关系,自己学习自己的。而且只有权重,没有bias。不同的Field之间没有关系。一个Field经过嵌入后,得到一个Feature,也就是对应的Embedding Vector嵌入向量。其维度一般是预先设定好的定值,论文中采用的是10。也就说是不同Feature的维度经过embedding后都是一样的。
Product Layer: product思想来源于,在ctr预估中,认为特征之间的关系更多是一种and“且”的关系,而非add"加”的关系。例如,性别为男且喜欢游戏的人群,比起性别男和喜欢游戏的人群,前者的组合比后者更能体现特征交叉的意义。
3.3 product layer层 可以分成两个部分,一部分是线性部分lz,一部分是非线性部分lp。二者的形式如下:
看上面的公式,我们首先需要知道z和p,这都是由我们的embedding层得到的,其中z是线性信号向量,因此我们直接用embedding层得到: 论文中使用的等号加一个三角形,其实就是相等的意思,你可以认为z就是embedding层的复制。
对于p来说,这里需要一个公式进行映射: 不同的g的选择使得我们有了两种PNN的计算方法,一种叫做Inner PNN,简称IPNN,一种叫做Outer PNN,简称OPNN。
后面,我会分别来具体介绍这两种形式的PNN模型,由于涉及到复杂度的分析,所以我们这里先定义Embedding的大小为M,field的大小为N,而lz和lp的长度为D1。
3.4 IPNN 这种做法本质上是利用参数共享降低了参数量,更一般地,为了减少信息丢失,可以按需要考虑K-阶分解,当然复杂度也会相应提升K倍,这是一个trade-off。
3.5 OPNN 注:降低复杂度的具体策略与具体的product函数选择有关,IPNN其实通过矩阵分解,“跳过”了显示的product层,通过代数转换直接从embedding层一步到位到 L1 隐层,而OPNN则是直接在product层入手进行优化。
四、实验 4.1 实验设置 数据集 论文使用2个真实世界的开源数据集,具体如下
Criteo 含1TB的点击日志,使用连续7天的数据训练,紧接着的下1天作测试。经过negative dawn-sampling和特征映射后,最终包含79.38 M 样本及 1.64M 维特征。 iPinyou 包含超过10天的点击日志,共 19.5M 样本,经过one-hot后特征共 937.67 K维。沿用该数据集原始的train/test划分,即每个advertiser的最后3天数据作test,其余作train。 对比方法 使用 logistic loss,论文对比了LR、FM、CCPM、FNN、IPNN、OPNN以及PNN*,PNN*表示同时加入内积和外积。
FM和NN模型的embedding维度设为10。 为防止拟合,LR和FM使用L2正则,NN类模型使用rate=0.5的Dropout。 CCPM——1嵌入层+2卷积层 (max pooling) +1隐层;FNN——1嵌入层+3隐层;PNN——1嵌入层+1 product层+3隐层。
4.2 实验结果 不同数据集和指标上的结实验果如下表所示,PNN类模型性能最优 论文也做了其他补充实验。在iPinYou数据集上,各模型在不同迭代轮数下的Auc曲线如下图所示,可见PNN模型的收敛速度在iPinYou上也优于其他算法。 使用不同的隐层depth和不同类型激活函数,实验结果分别下图所示。
五、总结 PNN的动机很直观,通过在NN的嵌入层和隐层之间引入product层,显示地引入基于field的“product”,从而加强单纯基于“add”的NN的特征相关性学习能力。 product函数的选择有不少想象空间;而引入product后的模型复杂度,将直接影响落地可行性。构造怎样的product函数以及如何降低复杂度是使用product layer的关键,例如文中对IPNN和OPNN的处理。一个实用的落地trick是基于先验知识,只在指定的Field间作product,从而降低复杂度,当然这也导致了需要human effort的坑。 六、代码实现(来自某位大佬) 代码连接:https://github.com/ZiyaoGeng/Recommender-System-with-TF2.0
数据集采用的是:Criteo,下载链接为:(https://pan.baidu.com/s/1sYsY88APFTNldcZ2n3sKlA):96f2
下面附上自己跑代码的截图,由于自己电脑显卡太拉跨,所以跑起来太慢(我只采用了这个数据集中的前1000000条数据,还不是完整的数据集,就估计得好久才能跑完,这里就不跑下去啦)