来看看 “基于卷积神经网络的推荐系统“是怎样的
上一篇字节李航书中的深度匹配模型演化图谱【详解】介绍了RNN-based 的基础方法,这篇文章讨论CNN 是如何处理用户有序行为序列的,具体涉及到 Caser 和 NextItNet 两个算法。
由于卷积单元的引入,卷积神经网络带来了局部感知和参数共享的效果。网络部分连通的思想,也是受启发于生物学里面的视觉系统结构,视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激)。CNN在处理 NLP 任务时通常卷积的宽度和embedding_map 的维度是相同的。
一. Caser
Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding是2018年发表在 WSDM 的会议论文,文章提出了 Caser 模型,通过卷积神经网络对短期 session 序列进行信息提取。
1.1 CNN 相比RNN的优势
虽然RNN有强大的序列建模能力,但是通常当包含很强的序列模式时才能表现较好。而在推荐系统中,用户历史相邻的行为之间并没有很强的关联关系,比如用户在看完 A 之后看了 B,只是因为用户喜欢 B,而 A 和 B 之间本身并没有关系。所以作者不采用 RNN 来建模相邻行为的序列模式(sequential pattern), 而是使用 CNN 来抽取point-level, union-level no skip 和 union-level skip once 的 pattern,建模这三种pattern 对于 target 的影响。
如上图,point-level 是指先前的每一个动作(蓝色矩形框) 都是单独地而不是集体地影响目标动作。而union-leve, no skip 是一种联合的序列模式,同时考虑三个蓝色行为对下一个行为的影响,比如当同时购买牛奶、黄油时比单独购买了牛奶或黄油,对接下来将要购买面粉的指示作用更强。
no skip vs skip once, 过去的行为可能并不会直接影响下一个邻接行为,而是对后面的某个行为有较强的指示作用。例如,游客依次去过了机场、酒店、餐厅、酒吧和景点,虽然机场、酒店并不是在景点之前邻接访问的,但有却很强的关联关系。
1.2 网络结构
作者将embedding 矩阵当做图片,使用卷积来抽取局部的序列模式。文章提出水平卷积 和 竖直卷积 两种结构来分别提取 union-level 和 point-level 的pattern。
- 水平卷积层
水平卷积的特点是 filter 的宽 和 embedding 矩阵的宽是相等的,在embedding 矩阵从上向下滑动的过程中是通过 filter 的高 来控制要关注几个行为。
如上面网络结构所示,水平卷积层中的卷积在 latent space 上滑动并卷积计算后通过激活函数得到的向量,再通过一个max-pooling ,取出向量中最大的一个值,最后若干卷积的结果 concat 到一起就是该层的输出。
举个例子,如下图,历史行为有4个,要预测的候选有长城和酒吧两个。这时可以设计有8个 filter,长为1、2、3、4的 filter 各有两个。下图中的F1、F2 就是长为 2 的两个 filter,用来挖掘序列中2个行为的 union-level pattern。
最后学出来的效果很可能就如下图所示,颜色越深的格子代表值越大。F1在 latent space 上从上到下滑动一遍做卷积得到的值中,最大的就是飞机和旅店 embedding 的加权和,对于预测 target 长城时起到了很大的作用;而F2,相当是提取快餐和饭店 embedding 的组合,对于预估 target 酒吧时起到了很大的作用。
实际上,水平卷积层得到的是 不同窗口长度, 窗口中不同关注度 的行为 加权和的最大值,以此进行union-level pattern 建模。
- 竖直卷积层
竖直卷积 filter 的特点是:长和 latent space 的长是相等的,宽为1。竖直卷积在 latent space 从左往右滑动一遍得到的向量 相当于序列中各个行为embedding的加权求和。使用多个filter,相当对序列行为用不同关注度的加权求和。该层并没有max-pooling操作,每个filter 得到的向量都concat 到一块作为该层的输出。
实际上, 这种方式保留了历史行为embedding 的所有维度,得到以不同关注度对历史所有行为 加权和的结果。可能第一个filter 关注的是第n个行为,第二个filter 关注的是第m个行为,以此进行point-level pattern 建模。
- 全连接层
两个卷积层的输出串联起来,并将它们输入到一个全连接的神经网络中,以获得更高层次和更抽象的特征。为了提取用户的一般喜好,作者还将用户embedding表示连接到全连接层的输出中。
1.3 损失函数
采用经典的二元交叉熵损失。为了捕捉跳跃行为(skip behaviour), 不仅预估邻接的下一个行为,还预估后面的 t 个行为。
二. NextItNet
A Simple Convolutional Generative Network for Next Item 是2019年发表在WSDM的会议论文。文章提出了 NextItNet 一个简单有效的生成模型,网络结构由多个卷积层堆叠而成,可以在不依赖于池化操作的情况下有效地增加感受野,具备在历史序列中进行长范围依赖的建模能力。
2.1 Caser 的局限性
- 1. max-pooling 操作
首先,max pooling运算有明显的缺点,无法区分重要特征在特征图中出现的次数,并且忽略了它发生的位置。max pooling运算符适合用于图像处理中的小型pooling filter(例如3×3),但是Caser 在长序列时 使用大型 pooling filter(例如1×20)可能有很大弊端。
- 2. 单层卷积
Caser中仅有一个隐层卷积层的浅层网络结构,可能不利于建模序列中复杂关系和长距离依赖。
- 3. 数据增强
Caser/GRURec 借助数据增强来分开优化每个sub-session,不能保证最优效果,而且增加了样本个数,浪费了计算资源。
举个例子,如下图,历史序列是 x0...x14 , Caser 以此来预估下一个item x15 的概率,而没有关注 x0...x14 之间的关系。
实际应用中,Caser 通过数据增强来解决这个问题,用一个滑动窗口在 x0...x14 序列中滑动来获得不同的子片段。(下图中的x-1只是为了padding 补齐长度)
Caser是建模 每个子片段的 ,而该文章提出的生成模型建模的是每一个后续行为的联合概率
。
2.2 网络结构
文章提出了带孔的堆叠扩张卷积层来增加视野,并且将图像领域中的残差网络引入到多个卷积层中。为了防止信息泄露,采用基于 mask 的 dropout技巧,防止网络见到当前时刻后面的 item。
- 扩张卷积层
如下图a, 标准滤波器中增加网络深度 是线性的增加感受视野,比如当到第二层conv:2 能见到input中5个item,当到第三层conv:3是能见到input中7个item。如下图b,本文提出了带孔的稀疏卷积层。孔代表虚拟的filter,b 所示的三个卷积层中卷积的间隔依次为1,2,4。依靠这种有间隔的卷积,随着堆叠的层数增加,上层的感受野是指数增加的,比如图b 中第二层conv:2 能见到7个item,第三层conv:3 能见到15个item。
- 维度转换
就像Caser一样,网络的input 是二维的 embedding 矩阵,但是上述的扩张卷积层都是基于一维的卷积操作,所以需要一种视角把 input 矩阵看待成一维的。
如下图的reshape 操作,将左边 [t,2k] 的输入矩阵 reshape 成 [1, t, 2k]的 3D tensor, 将2k 看成图像的“通道”channel , 而不是图像的宽。如同下图中的黑色箭头代表了 filter 的滑动方向,相当在[1, t] 维度上进行上述扩张卷积层的操作。实际上dilated Conv1D 的channel 也是2k, 每次滑动的结果是所有channel 对应的卷积结果相加。
- 卷积计算规律
在卷积网络中输入tensor 的维度是(K,W,D),则 filter的维度一定得是(?,?, D) 。filter 的个数为T,则输出的tensor的维度就是(?,?,T )。
1*1 filter 的作用:通过filter 的个数来控制输出 tensor 的第三个维度,通常为了降低 input tensor 的第三个维度,从而来减小后续参数量。
参考
1. Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding,2018 (https://arxiv.org/abs/1809.07426)
2. A Simple Convolutional Generative Network for Next Item Recommendation,2019( https://arxiv.org/pdf/1808.05163.pdf)
来看看 “基于卷积神经网络的推荐系统“是怎样的相关推荐
- 情感分析:基于卷积神经网络
情感分析:基于卷积神经网络 Sentiment Analysis: Using Convolutional Neural Networks 探讨了如何用二维卷积神经网络来处理二维图像数据.在以往的语言 ...
- 基于卷积神经网络的垃圾图像分类算法
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 垃圾分类作为资源回收利用的重要环节之一, 可以有效地提高资源回收利 ...
- Chemistry.AI | 基于卷积神经网络(CNN)预测分子特性
CNN :Convolutional Neural Networks (卷积神经网络 ) 环境准备 Python版本:Python 3.6.8 PyTorch版本:PyTorch1.1.0 RDKit ...
- 全图表征学习算法之无监督学习和基于卷积神经网络的监督学习
https://www.toutiao.com/a6640000238176174600/ 2018-12-28 19:12:09 已有的全图表征学习算法包括无监督和有监督两类,其中有监督算法又可以分 ...
- 卷积神经网络matlab_基于卷积神经网络的遥感图像养殖区自动划分
基于卷积神经网络的遥感图像养殖区自动划分 摘要:卷积神经网络是目前计算机视觉领域广泛应用的模型.我们在传统卷积神经网络的基础上,替换了全连接层,借助高分辨率图像,对海水养殖区进行识别和标记,最终实现了 ...
- 一维卷积神经网络_序列特征的处理方法之二:基于卷积神经网络方法
前言 上一篇文章介绍了基本的基于注意力机制方法对序列特征的处理,这篇主要介绍一下基本的基于卷积神经网络方法对序列特征的处理,也就是TextCNN方法.序列特征的介绍,背景以及应用可以参考上一篇的详细介 ...
- 【华为云技术分享】序列特征的处理方法之二:基于卷积神经网络方法
[摘要] 本文介绍了针对序列特征采用的处理方法之二:基于卷积神经网络方法,并分析了为何卷积神经网络擅长对于局部特征的提取. 前言 上一篇文章介绍了基本的基于注意力机制方法对序列特征的处理,这篇主要介绍 ...
- 基于卷积神经网络的温室黄瓜病害识别系统
基于卷积神经网络的温室黄瓜病害识别系统 1.研究思路 针对温室现场采集的黄瓜病害图像中含有较多光照不均匀和复杂背景等噪声的情况,采用了一种复合颜色特征(combinations of color fe ...
- 基于卷积神经网络与迁移学习的油茶病害图像识别
基于卷积神经网络与迁移学习的油茶病害图像识别 1.研究思路 利用深度卷积神经网络强大的特征学习和特征表达能力来自动学习油茶病害特征,并借助迁移学习方法将AlexNet模型在ImageNet图像数据集上 ...
最新文章
- Java Character 类
- Python time strptime()方法 时间操作
- 【152】C# 操作 Excel 杂记
- ps制作20种特效文字_用PS制作裂、火、电特效——电
- 三种刷写LEDE等软路由固件的方法
- 矢量网络分析仪--测天线时使用技巧
- echarts模仿excel复合饼图(饼-饼)
- 面向对象编程中的 诡异事件
- NoSQLBooster for MongoDB延长使用时间
- hadoop kerberos java_hadoop kerberos认证
- Taro开发微信小程序实现简单的登录退出功能
- 微信群满100人后无法扫码进群?你们要的解决方法来了!
- 河海大学计算机科学与技术考研,2021年河海大学计算机科学与技术(081200)考研专业目录_硕士研究生考试范围 - 学途吧...
- TCP/IP协议卷一(一)
- 神秘美丽的陨石:蜂窝黄金发光晶体
- Elasticsearch之自定义同义词开发实践
- 首个仿生机器人亮相 有人造器官与血液
- Docker物理机重启后,docker报错 error creating overlay mount to /var/lib/docker/overlay2
- 信息学奥赛一本通 1244:和为给定数 通过
- android 手机获取root权限(刷入magisk面具方式)_获取刷入模块_MIUI_android7/android12实践
热门文章
- 小工具———字符编码转换查看(MFC)
- HIDL学习笔记之HIDL C++(第二天)
- 什么是用户画像,用户画像的作用是什么?
- 最美的老歌(附歌词)!!!
- react ant design pro typescript springboot activiti权限、工作流框架
- 100道经典软件测试笔试题(附答案)一次性查缺补漏个够
- 合并邮件不能发送html,通过电子邮件发送给多个收件人与HTML邮件:不工作
- python 一百行代码将图片转成字符画
- [玩转Linux] [Docker] MySQL安装和配置
- [附源码]PHP计算机毕业设计幻星网站设计(程序+LW)