热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

4.ProductbasedNeuralNetworksforUserResponsePrediction论文详细解读和代码实现

一、前言现在推荐系统,网络搜索和在线广告的数据大多是分类的,并包含多个字段,有一个典型的方法将他们转化成高维稀疏二进制特征表示就是通过o

一、前言

现在推荐系统,网络搜索和在线广告的数据大多是分类的,并包含多个字段,有一个典型的方法将他们转化成高维稀疏二进制特征表示就是通过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条数据,还不是完整的数据集,就估计得好久才能跑完,这里就不跑下去啦)
在这里插入图片描述


推荐阅读
  • 本文探讨了一种统一的语义数据模型,旨在支持物联网、建筑及企业环境下的数据转换。该模型强调简洁性和可扩展性,以促进不同行业间的插件化和互操作性。对于智能硬件开发者而言,这一模型提供了重要的参考价值。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文简要介绍了如何使用 Python Elasticsearch DSL 进行基本和高级查询,包括连接 Elasticsearch、执行简单和复杂查询、聚合、排序及分页等。 ... [详细]
  • Adversarial Personalized Ranking for Recommendation
    目录概主要内容基础对抗扰动对抗训练细节代码HeX.,HeZ.,DuX.andChuaT.Adversarialpersonalizedrankingforrecommendatio ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 深入理解云计算与大数据技术
    本文详细探讨了云计算与大数据技术的关键知识点,包括大数据处理平台、社会网络大数据、城市大数据、工业大数据、教育大数据、数据开放与共享的应用,以及搜索引擎与Web挖掘、推荐技术的研究及应用。文章还涵盖了云计算的基础概念、特点和服务类型分类。 ... [详细]
  • 本文详细介绍了 Java 中 org.w3c.dom.Node 类的 isEqualNode() 方法的功能、参数及返回值,并通过多个实际代码示例来展示其具体应用。此方法用于检测两个节点是否相等,而不仅仅是判断它们是否为同一个对象。 ... [详细]
  • 本文探讨了在UIScrollView上嵌入Webview时遇到的一个常见问题:点击图片放大并返回后,Webview无法立即滑动。我们将分析问题原因,并提供有效的解决方案。 ... [详细]
  • iOS 百度地图使用指南:基本定位与地理编码
    本文详细介绍如何在 iOS 应用中集成百度地图,实现基本的地图定位和地理编码功能。配置详情请参考官方文档:http://developer.baidu.com/map/index.php?title=iossdk ... [详细]
  • 最优化算法与matlab应用3:最速下降法
    最优化算法与matlab应用3:最速下降法最速下降法是一种沿着N维目标函数的负梯度方向搜索最小值的方法。(1)算法原理函数的负梯度表示如下:搜索步长可调整ak,通常记为(第k次迭代 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 菜鸟物流用户增长部现正大规模招聘P6及以上级别的JAVA工程师,提供年后入职选项。 ... [详细]
author-avatar
mobiledu2502876347
这个家伙很懒,什么也没留下!
RankList | 热门文章