11 深度推荐模型演化中的“范式替换“灵活组合

上一课时,我们介绍了 DIEN 模型添加了 RNN中 的 GRU,使模型获得了对序列数据的建模能力;而 DSIN 模型不仅使用了 RNN 中的 bi-LSTM,还使用了 Transformer 组件。

由此可见,在新的演化模型中,根据场景和数据的不同,替换和添加不同的范式组件已经成为一种趋势。

关于基础组件,“08|模型演化根本:深度学习推荐算法的五大范式组件”中我们提到了多层感知器(MLP)、自编码器(AE)、受限玻尔兹曼机(RBM)、卷积神经网络(CNN)、循环神经网络(RNN)等。

09 和 10 课时,我们总结了以 MLP 为基础组件的模型演化方法,其中 MLP 基础组件只是一种最常用的目标拟合范式。

因此这一讲,我们看一下其他基础组件在深度推荐算法中的组合方式。

基于自编码网络(AE)的方法

首先,我们看一下基于自编码网络(AE)的方法。在 08 讲中了解到,我们可以利用自编码器对已有的数据进行拟合,且具备良好的泛化能力,也就是说 AE 具备了预测数据的能力。

而 AutoRec 模型正是这种思想的延伸,接下来我们一起看一下。

1.基于自编码器的协同过滤(AutoRec)模型

基于自编码器的协同过滤(AutoRec)模型利用自编码器对协同过滤的共现矩阵进行重建,从而完成用户和物品的隐向量表征,然后再利用 AE 的结果对缺失评分进行预测。

关于 AutoRec 模型的框架图如下所示:

如图所示,这是基于物品的 AE 模型架构例子。对于每一个物品可以由每一位用户对该物品的评分组成,即为 r(i)。

同样,我们也可以构建基于用户的 AE 模型,即为 r(u)。

整个 AutoRec 模型通过利用两种 AE 将 r(i) 和 r(u) 映射到低维空间,并在输出中重新构建 r(i) 和 r(u),最后利用 AE 预测缺失的评分值。

与前述的 DMF 模型类比,可以看出二者的输入完全一样,用户向量通过用户对有过行为的物品评分进行表示,物品向量通过对其有过行为的用户的评分进行表示,二者均以输出用户和物品的隐向量表征为目标,二者均以进行表征向量“降维”为目标。

不同的是,DMF 模型采用的是 MLP 双塔结构,而 AutoRec 模型采用的是 AE 范式,MLP 双塔需要实现有监督学习,而 AE 需要实现无监督学习。

从以上可以看出,这里的 AE 范式相当于替代了 MLP 范式的作用,也就是说 AE 的本质与 MLP+MF 等同。

相较于前述 NCF 模型在用户和物品交互关系的基础上,再添加用户和物品画像特征等辅助信息从而提升模型效能的常规打法,这里我们同样可以“故技重施”,毕竟在机器学习领域利用更复杂的模型,参考更多维度的信息,加入更多的训练样本数据是提升模型准确率的不二法门。

另外在范式替换方式中,我们还有另外一条路可以走,那就是根据场景将简单范式替换为更加复杂更加强大的范式方法,通常情况下这就像战略导弹从普通弹头换上核弹头一样有效。

在 08 讲中我们介绍了自编码器(AE)有许多变体,如去噪自编码器(DAE)、边缘化去噪自编码器(mDAE)、稀疏自编码器(SAE)、收缩自编码器(CAE)和变分自编码器(VAE)等。

下面我们拿去噪自编码器(DAE)替换自编码器(AE)举例,能够集合这两种思想的模型就是 CDAE 模型。

2.协同去噪自编码器(CDAE)模型

协同去噪自编码器(Collaborative Denoising Auto-Encoders)模型针对 TopN 推荐问题,提出了一种新的 AE 模型来学习用户和物品的隐向量表征。

关于 CDAE 模型的框架图如下所示:

去噪自动编码器(DAE)是 AE 的变体,它通过让其部分损坏版本上重新构造每个数据点,强制使得其隐藏层变得更健壮,多数情况下采用添加高斯噪声等方式来完成。

如图所示,CDAE 采用用户对物品的评分作为输入,并加入了用户基本特征作为辅助信息。 比如 CDAE 在评分输入中加入了随机噪声以此提高模型的鲁棒性(健壮的意思)。

上面我们介绍了两者基于 AE 范式的深度方法——AutoRec 模型和 CDAE 模型,它们貌似凭借 AE 范式及其变体范式的一己之力,替代了原来基于 MLP 双塔结构的功能,难道基于 AE 范式的方法不再存在双塔结构了?这倒是不见得,这里就有一个基于 AE 范式的双塔模型,它就是 DCF 模型。

3.基于边缘化去噪自动编码器的深度协同过滤(DCF)模型

基于边缘化去噪自动编码器的深度协同过滤(Deep Collaborative Filtering,DCF)模型是一种将基于矩阵分解的协同过滤与边缘化去噪自动编码器(mDAE)紧密结合,以解决样本中评分甚至辅助信息过于稀疏而导致的隐向量表征学习不充分的问题的模型。

有关 DCF 模型的框架图如下所示:

如图所示,与前述 AutoRec 模型和 CDAE 模型不同的是,DCF 模型的用户特征和物品特征各自通过一个 AE 进行学习,同时加入了用户和物品的辅助信息,如用户的年龄、性别以及物品的类目、标题等,用户和物品的交互信息仍然做矩阵分解输出用户表征 U 和物品表征 V。

DCF 模型既需要保证 AE 对于用户和物品隐向量表征的提取准确,又需要保证矩阵分解结果 U 和 V 的有效性,故 DCF 可以看成是一个横过来的双塔结构。另外,DCF 模型选择 mDAE 作为特征提取器,主要是由于 mDAE 本身的高扩展性和低计算成本。

以上我们介绍了基于 AE 范式的方法,利用 AE 的强拟合能力可以对用户和物品进行表征。

一般来说,用户和物品要么由其本身的 ID 特征来表达,要么由其历史交互行为来表达,AutoRec 是相对简单的模型,CDAE 在 ID 特征基础上加入了用户历史行为作为表达。用历史交互过的行为来作为用户或者物品的表达,比用 ID 本身表达效果更好,但模型也变得更复杂。

DCF 模型在 AutoRec 和 CDAE 模型的基础上使用了辅助信息,如物品侧特征除了物品 ID 本身之外,还有文本特征、图文特征、视频帧特征等其他信息,从而提高了模型的拟合能力。

那么除了 AE 范式之外,还有哪些范式能够为我们所用?下面我们一起看看与 AE 类似的受限玻尔兹曼机(RBM)在推荐领域的作用及其推荐模型。

基于受限玻尔兹曼机(RBM)的方法

基于受限玻尔兹曼机的协同过滤(RBM-CF)模型

基于受限玻尔兹曼机的协同过滤(RBM-CF)模型在业内首次将深度学习应用于推荐领域,使用 RBM 进行类 CF 操作,关于 RBM-CF 模型的框架图如下所示:

如图所示,RBM-CF 模型对传统 RBM 进行了改进。在可见层,它将评分数据以固定长度 0-1 向量进行表示,考虑评分的稀疏性,缺失的评分使用 Missing 单元进行填充,并使用 0-1 向量 r 记录当前物品是否被评分的情况,再针对每一个不同的用户训练一个 RBM。模型的输出为用户的隐向量表征,后续我们可以依照 UserCF 的操作方式使用用户隐向量表征计算用户之间的相似度。

RBM 是在推荐领域中最早被应用的神经网络模型,它的作用与 AE 相同,都是利用用户与物品的交互评分数据重构用户和物品的隐向量表征,从而实现对缺失评分的预测。因 RBM-CF 算法年代过于久远,目前已经不具备实操性。

近年来,随着非结构化多媒体数据(比如图像、文本、音频、视频等)日益增多,在处理非结构化多媒体数据方面,CNN 范式的卷积和池化操作具备天生的优势。下面我们一起看一下 CNN 范式在非结构化编码中的作用。

基于卷积神经网络(CNN)的方法

推荐领域利用 CNN 范式的这一优势对非结构化信息进行特征提取,并学习非结构化信息的隐向量表征。

1.卷积矩阵分解(ConvMF)模型

卷积矩阵分解(Convolutional Matrix Factorization,ConvMF)模型采用 CNN 范式提取物品文本信息的隐向量表征,然后将其作为辅助信息融合到推荐算法模型中,用以解决交互数据稀疏和冷启动等问题,进而提高模型评分预测精度。

关于 ConvMF 模型的框架图如下所示:

如图所示,上图中的蓝色框内为概率矩阵分解(PMF)部分,红色框内为 CNN 部分;下图为上图红色框内 CNN 部分的详细架构,它由嵌入层、卷积层、池化层、输出层四部分组成。

  • 嵌入层将文档单词隐向量表征连接起来作为文档的隐向量表征;

  • 输入卷积层提取上下文特征;

  • 池化层从卷积层提取具有代表性的特征,并固定隐向量表征长度;

  • 输出层根据特定任务将隐向量表征进行降维输出。

最后,CNN 网络的输出结果与 PMF 模块进行桥接,并将文档的隐向量表征作为物品 V 的高斯分布的均值,以此提升 PMF 的整体效能。

这里,我们可以把 ConvMF 看成是 CNN+PMF 串联而成的模型,它能有效捕获文档的局部特征。另外,如果 CNN 嵌入层使用预训练好的词向量,可以进一步提高系统的推荐性能。

09 讲我们介绍过基于 MLP 的双塔结构,使用两个“塔”各自构建两种类型的隐向量表征,例如用户和物品的隐向量表征,那么是否存在基于 CNN 的双塔结构呢?答案是肯定的,这就跟有人使双枪、双刀、双棍等双器械一样,虽然器械不同,但是武术要义有相通之处。

在目前的深度推荐算法中,一类思路是把各类模型范式(如 CNN 等)作为特征提取器,再从文本、图像、视频、音频等辅助信息中提取特征向量,再融合到推荐模型中提升效能,比如上述的 ConvMF 模型就是其中一种实现,再比如前面的基于 MLP 范式算法中我们也介绍了多种实现。

另外一类思路就是前述的双塔结构,使用两个并行的模型范式分别针对用户和物品提取特征,然后在两个范式输出之上搭建一个共享层,用来建模用户特征与商品特征之间的关联关系,从而将用户隐向量表征和物品隐向量表征映射到相同的特征空间。

对于 CNN 范式来说,这就是 DeepCoNN 模型需要做的事情。

2.深度合作神经网络(DeepCoNN)模型

深度合作神经网络(Deep Cooperative Neural Networks,DeepCoNN)模型采用两个并行的 CNN 范式模块分别提取用户侧和物品侧的评论信息特征,然后在最后一层进行融合,使得用户和商品之间的潜在因素可以进行交互。

关于 DeepCoNN 模型的框架图如下:

如图可知,DeepCoNN 模型由两个并行 CNN 范式再串联一个共享层组成。关于 CNN 网络中的卷积层、池化层、全连接层与通常的 CNN 构造相同,这里我们不再赘述。而这里的 Look-up 层则使用经过预训练的 Word2Vec 词向量,并按照原本的词序合并成用户或物品分别的词向量矩阵。

由于用户和物品的 CNN 范式的隐向量表征来自两个不同的特征空间不可比较,后接共享层就是为了把它们映射到同一个特征空间,这里共享层使用了 FM 作为评分器,对用户和物品的交互关系建模。

事实上,在前述基于 MLP 范式的模型介绍中,我们提到过因为最后需要通过相对简单的计算方式衡量两个向量之间的距离,两个塔输出的向量维度需要相同,而且因为双塔结构讲究两个塔之间的平衡性,通常两个塔的参数配置也要相同,而事实上作为反例,DeepCoNN 模型采用了共享层的方式,将用户和物品隐向量表征映射到了同一个特征空间,使得二者能够进行匹配计算。

前述 CNN 范式对非结构化信息进行特征提取方面具备优势,但是这种提取形式使得各个对象相互独立,无法建模对象之间的连续变化信息。而 RNN 范式非常适合序列数据处理,所以成为捕获交互的时间动态、用户行为以及具有顺序信号(如文本,音频等)的辅助信息的合适选择。

下面我们一起看一下 RNN 范式在序列化编码中的作用。

基于递归神经网络(RNN)的方法

基于门控循环单元的推荐(GRU4Rec)模型

基于门控循环单元的推荐(Gated Recurrent Unit for Recommendations,GRU4Rec)模型是首例将 RNN 范式应用于会话推荐场景的神经网络模型。我们可以利用 RNN 范式中的门控循环单元(GRU)来捕获用户行为之间的长期依赖性,以预测会话中的下一个行为。

基于门控循环单元的推荐(GRU4Rec)模型整体较为简单,但已基本上体现了 RNN 范式在深度模型中的作用,有关 GRU4Rec 模型的框架图如下所示:

如图所示,模型输入层依次将同一会话的交互物品序列以 one-hot 形式输入到模型中,然后将物品高频稀疏特征转化为物品的降维隐向量表征。中间层为堆叠 GRU 单元,用于捕获和建模行为序列信息。最后为全连接层用于拟合目标函数,输出下一次物品被点击的概率。

基于门控循环单元的推荐(GRU4Rec)模型的优缺点呢?应用场景是什么?有什么注意事项?

在没有应用 RNN 范式之前,深度模型只能针对单个的用户或者物品进行建模,而 RNN 范式能够将交互序列数据整体进行建模,使得模型获得了对现实场景更全面的理解。

RNN 范式是近年来深度推荐模型演化中较为常用的方法,在前述阿里三部曲中我们也介绍过。

小结与预告

09、10、11 讲我们介绍了大部分基础范式在深度推荐模型演化当中所起的作用,以及模型结构演化过程。

最后结合本人目前的工作经验,关于深度推荐模型的演化我再分享两点。

  • 没有银弹:没有一种深度范式能够适配所有的推荐场景。业务领域千差万别,也不会演化出一种深度推荐模型在所有数据集上都表现最优。

  • 权衡利弊:既然没有银弹,那就意味着深度推荐模型的演化不会终止,也就是说我们需要永远在理想和现实当中做权衡。掌握所有模型演化规律之后,在工程领域的模型替换需要由简到繁,循序渐进。

道德经中“大道甚夷,而人好径”,说的就是大道平坦宽敞,人们往往都不愿意走,都喜好走捷径。这样做了之后往往不是“阴沟里翻船”,就是“欲速则不达”。所以 12 讲我们就将继续介绍深度推荐模型新的演化方向。

另外,如果你觉得本专栏有价值,欢迎分享给更多好友哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/48922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lua脚本简单理解

目录 1.安装 2.语法 2.1Lua数据类型 2.2变量 2.3lua循环 2.4流程控制 2.5函数 2.6运算符 2.7关系运算符 3.lua脚本在redis中的使用 3.1lua脚本再redis简单编写 3.2普通锁Lua脚本 3.3可重入锁lua脚本 1.安装 centos安装 安装指令: yum -y update yum i…

学习Servlet

什么是Servlet? Servlet是sun公司提供的一门用于开发动态web资源的技术,可以实现和客户端的交互,接收客户端请求和给客户端返回响应。 Servlet的实现类 Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet…

Python学习计划——4.3常见的异常类型和处理方法

在编写程序时,难免会遇到各种异常情况。Python 提供了一系列内置的异常类型,可以用于捕获和处理不同类型的错误。了解这些常见的异常类型有助于编写健壮的代码。 1. 常见的异常类型 IndexError 当尝试访问列表、元组或其他序列中不存在的索引时&#…

等保测评与供应链安全:确保整个生态链的安全无虞

在当今数字化时代,信息技术的飞速发展极大地推动了政府和企业单位的数字化转型。然而,这一进程也伴随着潜在的信息安全威胁,尤其是在供应链环节。等保测评(信息安全等级保护测评)与供应链安全管理的结合,成…

本地部署VMware ESXi服务实现无公网IP远程访问管理服务器

文章目录 前言1. 下载安装ESXi2. 安装Cpolar工具3. 配置ESXi公网地址4. 远程访问ESXi5. 固定ESXi公网地址 前言 在虚拟化技术日益成熟的今天,VMware ESXi以其卓越的性能和稳定性,成为了众多企业构建虚拟化环境的首选。然而,随着远程办公和跨…

CCS光源的高输出TH2系列平面光源

光源在机器视觉系统中起着重要作用,不同环境、场景及应用合适光源都不一样,今天我们来看看高输出TH2系列平面光源。它可以对应高速化的生产线,为提高生产效率做出贡献。 TH2系列光源的特点: 1、实现了更高一级的高亮度 实现了更…

谷粒商城实战笔记-56~57-商品服务-API-三级分类-修改-拖拽功能完成

文章目录 一,56-商品服务-API-三级分类-修改-拖拽功能完成二,57-商品服务-API-三级分类-修改-批量拖拽效果1,增加按钮2,多次拖拽一次保存完整代码 在构建商品服务API中的三级分类修改功能时,拖拽排序是一个直观且高效的…

Java | Leetcode Java题解之第260题只出现一次的数字III

题目: 题解: class Solution {public int[] singleNumber(int[] nums) {int xorsum 0;for (int num : nums) {xorsum ^ num;}// 防止溢出int lsb (xorsum Integer.MIN_VALUE ? xorsum : xorsum & (-xorsum));int type1 0, type2 0;for (int n…

Prometheus配置alertmanager告警

1、拉取镜像并运行 1、配置docker镜像源 [rootlocalhost ~]# vim /etc/docker/daemon.json {"registry-mirrors": ["https://dfaad.mirror.aliyuncs.com"] } [rootlocalhost ~]# systemctl daemon-reload [rootlocalhost ~]# systemctl restart docker2、…

刷题了: 151.翻转字符串里的单词 |卡码网:55.右旋转字符串

151.翻转字符串里的单词 题目链接:https://leetcode.cn/problems/reverse-words-in-a-string/description/ 文章讲解:https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html 视频讲解:https://www.bilibi…

vue2之jessibuca视频插件使用教程

vue2之jessibuca视频插件使用教程 jessibuca简介前期准备下载相关jsvue index.html文件引入 组件封装使用小知识 引入iconfont jessibuca简介 Jessibuca是一款开源的纯H5直播流播放器,通过Emscripten将音视频解码库编译成Js(ams.js/wasm)运行于浏览器之中…

PHP基础语法(五)

一、定义语法 1、索引数组 2、php5.4之后简化的语法 3、关联数组 4、多维数组 $colors array("Red", "Green", "Blue");$colors ["Red", "Green", "Blue"];$person array("name" > "Jo…

基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署

文章目录 摘要项目结构项目开发项目上线参考文章 摘要 本文介绍了如何在Windows 10系统上使用PyCharm专业版2024.1,通过Docker容器在阿里云CentOS 7.9服务器上进行Python项目的开发和生产部署。文章详细阐述了项目结构的搭建、PyCharm的使用技巧、以及如何将开发项…

Superset二次开发之Dashboard状态变更源码解读

接口PUTapi/v1/dashboard/<dashboard_ID>前端文件 superset-frontend\src\dashboard\components\PublishedStatus\index.jsx 69行 togglePublished() togglePublished() { this.props.savePublished(this.props.dashboardId, !this.props.isPublished); } …

基于深度学习的医学影像分类

基于深度学习的医学影像分类是利用深度学习模型对医学影像&#xff08;如X光片、CT、MRI等&#xff09;进行自动分类&#xff0c;以辅助医生进行疾病诊断和治疗决策。以下是对这一领域的系统介绍&#xff1a; 1. 任务和目标 医学影像分类的主要任务和目标包括&#xff1a; 疾…

12.Spring事务和事务传播机制

文章目录 1.为什么需要事务2.Spring 中事务的实现2.1 MySQL 中的事务使⽤2.2 Spring 编程式事务2.3 Spring 声明式事务&#xff08;自动&#xff09;2.3.1 Transactional 作⽤范围2.3.2 Transactional 参数说明2.3.3 注意事项2.3.4 Transactional ⼯作原理 3.事务隔离级别3.1 事…

vue+element的table合并单元格(竖着合并行)及合计行添加并计算

1 效果: 代码分析: 1 表格头配置: 2 懒得写的:自己复制吧 <el-table:data"tableData"style"width: 98%":height"height"v-loading"isLoading"stripe"false" :span-method"objectSpanMethod"show-summary:summ…

c++ 线程

在 C 中&#xff0c;std::thread 构造函数可以用于将参数传递给线程。这里是一个基本的示例&#xff0c;展示了如何使用 std::thread 来传递参数&#xff1a; #include <iostream> #include <thread>// 定义一个被线程调用的函数 void threadFunc(int arg1, doubl…

C++多线程编程中的锁详解

在现代软件开发中&#xff0c;多线程编程是提升应用程序性能和响应能力的重要手段。然而&#xff0c;多线程编程也带来了数据竞争和死锁等复杂问题。为了确保线程间的同步和共享数据的一致性&#xff0c;C标准库提供了多种锁机制。 1. std::mutex std::mutex是最基础的互斥锁…

视图、存储过程、触发器

一、视图 视图是从一个或者几个基本表&#xff08;或视图&#xff09;导出的表。它与基 本表不同&#xff0c;是一个虚表&#xff0c;视图只能用来从查询&#xff0c;不能做增删改(虚拟的表) 1.创建视图 创建视图的语法&#xff1a; create view 视图名【view_xxx / v_xxx】 a…