会话/序列推荐:Caser、SASRec、BERT4Rec [Session based / Sequential Recommendation]
目录
- Caser
- 3 模型
- 3.1 嵌入层
- 3.2 卷积层
- 3.3 全连接层
- 3.4 训练
- 3.6 与一些模型的关系
- SASRec
- 2 RELATED WORK
- 3 METHODOLOGY
- 3.1 嵌入层
- 3.2 自注意力block
- 3.3 堆叠自注意力层
- 3.4 预测层
- 3.5 网络训练
- 3.7 讨论
- 4 实验
- 4.1 数据集
- 4.2 对比模型
- 4.3 实验细节
- 4.4 评价指标
- 4.5 推荐表现
- 4.6 消融实验
- 4.8 注意力权重可视化
- BERT4Rec
- ABSTRACT
- 2 RELATED WORK
- 2.1 通常的RS
- 2.2 序列推荐
- 2.3 注意力机制
- 3 BERT4REC
- 3.1 问题定义
- 3.2 模型架构
- 3.3 Transformer 层
- 3.4 嵌入层
- 3.5 输出层
- 3.6 模型学习
- 3.7 讨论
Caser
2018-WSDM-Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding
卷积序列推荐模型Caser,使用CNN从近期items序列中以局部特征的方式提取序列模式。
3 模型
为了捕获
- 用户的整体偏好和序列模式
- 联合级别和单独级别的i2i
- skip行为连接
3.1 嵌入层
user和item都有嵌入,在t时刻user的items集合是L个:
3.2 卷积层
把 E 矩阵 L×d 看作"image",把序列模式看作 “image” 中的局部特征。
Horizontal 卷积
h×d,捕获联合级别的序列模式*(不会在嵌入维度之间进行卷积,就像textcnn一样)*
这个h就是 联合级别中联合的size行为序列(image): L×d
1个卷积核:h×d (如果num个filter h×d×num)
卷积操作:[L-h+1] ×1 (如果num个filter [L-h+1] ×1×num)
max pooling:1×1 (如果num个filter 1 ×1×num)
(总之每个filter最终提取的feature结果一定是1维的)
然后可以有不同h的卷积核,每个h的卷积核也可以有数量;最后得到的feature维度是 1× filter数量。k是filter的idx:
卷积操作
第k个filter卷积后得到的feature map (后续max池化就变成1维了)
n个filter池化后得到的feature
Vertical 卷积
L×1 卷积核,通过加权组合pre items得到特征向量,捕获单独级别的序列模式。行为序列(image): L×d
1个卷积核:L×1 (如果num个filter L×1×num)
卷积操作:1×d (如果num个filter 1 ×d×num)
(总之每个filter最终提取的feature结果一定是d维的)
其实这种卷积就相当于对items的加权组合,卷积核 L×1 对应的就是这L个物品的权重,最后得到 num×d 的聚合特征:
3.3 全连接层
将Horizontal 卷积和Vertical 卷积得到的特征concat+MLP,得到卷积序列嵌入:
将卷积序列嵌入和user嵌入concat+MLP+sigmoid得到预测输出概率:
3.4 训练
注意为了捕获skip行为,预测的是next,next+1,next+2,…next+T-1;即:
刚开始这个输出有点没看明白,以为要输出next item是所有候选item的概率(理论上应该要的),但一般都是softmax-每个正样本负采样-层次softmax-得到正样本+负样本的sigmoid loss,看这个意思就是:
- z是卷积序列嵌入,它是从t时刻前L个item的嵌入上整合出来的特征,或者说user的短期兴趣
- u是user嵌入,可以认为是user的长期兴趣
- 最后一层MLP的参数 W′W'W′ 可以看作item 作为target时的嵌入表,它的维度取决于 z维度+u维度 ;将target item 嵌入与 concat(z,uid) 做简单的MLP+sigmoid,得到在当前uid、t时刻items的情况下target item的概率(也可以认为就是target item 和cur sqe+uid 的表示做内积+sigmoid)
3.6 与一些模型的关系
很喜欢这一部分
- MF
- FPMC
- Fossil
SASRec
2018-ICDM-Self-Attentive Sequential Recommendation
序列动态,基于用户近期的行为,寻求捕获用户活动的上下文。两种方法:MC,认为next item和近几个item相关,适用于稀疏数据集;RNN,能捕获长距离的关系,适用于更密集的数据集。本文提出SASRec,能够捕获长距离语义,又能使用注意力机制让其预测基于相关的少量行为。
2 RELATED WORK
常规(通用)的推荐*(不知道咋翻译合适)*
- MF
- ISM,不学习用户的嵌入,只学习i2i相似度矩阵,衡量target item和user history items的相似度
- DL,(1)使用nn提取item特征;(2)替代MF中的内积,如NCF、AutoRec
时间的推荐
- 显式对用户活动的时间戳进行建模,TimeSVD++,适用于展现出时间漂移的数据集
- 注:时间的推荐和序列推荐(next item rs)是不同的,序列推荐只考虑行为的序关系,对序列模式(是独立于时间之外的)建模
序列推荐
- i2i转移矩阵,FPMC(一阶MC)、Caser(高阶MCs)
- RNN类,GRU4Rec
注意力机制
- 作为附加组件+原始模型
- Transfomer,完全依靠自注意力机制
3 METHODOLOGY
输入:
期望输出:
3.1 嵌入层
固定输入序列长度为n,不够的用pad填充,pad的嵌入为常数0向量
位置嵌入P,加上物品嵌入E,得初始嵌入:
3.2 自注意力block
自注意力层:在NLP中,通常K=V(RNN encoder-decoder翻译任务,encoder隐藏层做K和V,decoder隐藏层做Q)
本文的自注意力层以 E^\hat EE^ 为输入,通过三个投影矩阵进行线性映射做Q K V,
(这种投影让模型更灵活,比如 <qi,kj><q i, k j><qi,kj> 和<qj,ki><q j, k i><qj,ki> 可以是不同的)
因果关系:考虑 t+1 的item时,应该只考虑前t个items,所以禁止 j>ij>ij>i的 Qi,KjQ_i,K_jQi,Kj
Ponit-Wise 的FFN:虽然自注意力能够自适应的赋予previous items的权重,但它仍然是一个线性模型。为了赋予模型非线性并且考虑不同隐维度之间的交互作用,对于所有的S添加了两层FFN
3.3 堆叠自注意力层
堆叠多个自注意力层可能有助于学习更复杂的物品转移关系:
随着网络加深,带来一些问题:
- 过拟合
- 训练过程不稳定(梯度消失等)
- 更多的参数加大训练时间
解决方法:
对于 1)自注意力层和 2)FFN:
输入x——LN(x)——送入函数g()——dropout(输出)——残差add输入x
残差连接:核心思想是通过残差连接将低层的特征传播到更高的层
层归一化:normalize the inputs across features,有助于稳定和加速神经网络的训练
丢弃
3.4 预测层
预测某个序列 t+1 时刻的item时,我们基于 序列 t 时刻的模型输出和所有target item的嵌入 做内积
(注:提到了FPMC需要使用不同的item嵌入,应该是说 item 做序列中的 history一项 的嵌入和 item 做 target的嵌入不同,这是为了构造不对称的转移关系;而本文的F和M共享 Items嵌入,因为模型设计的 i j 输出 和 j i输出不对称)
显式用户建模,两种方式:
- 学显式的用户嵌入来表示用户偏好
- 考虑用户之前的history,从history items中产生一个隐式的用户嵌入
本文对于一个序列产生的 FnF_nFn 就可以看作是第2种方法,即将序列的最终表示作为用户表示;也可以用第1种方法,再加一个用户嵌入表 U,把 FnF_nFn 看作history 表示,U+F 联合表示用户+his序列 ;
本文使用的是方法2。
3.5 网络训练
给定输入序列s=s1,s2,s3,...,sns={s_1,s_2,s_3,...,s_n}s=s1,s2,s3,...,sn,t时刻的期望输出为:
注意输入和输出长度相同都为n,因为输入 s1,s2,…sn;label是s2,s3,…,sn+1。
(这才知道序列推荐是seq2seq,不知道是不是全是这样,还是可以只考虑预测 n+1时刻)
每个epoch,要为 st 随机采样负样本
3.7 讨论
可以看成这些模型的扩展版:
- Factorized Markov Chains—FMC
- Factorized Personalized Markov Chains—FPMC
- Factorized Item Similarity Models—FISM;移去FFN,自注意力层设为平均权重
4 实验
4.1 数据集
数据集划分成三部分,每个用户的行为序列中:
- 最后一个item做test
- 倒数第二个item做valid
- 0-倒数第三个 做train
- 注意:test的时候,train+valid做train
4.2 对比模型
4.3 实验细节
2层自注意层
4.4 评价指标
Hit Rate@10、NDCG@10
4.5 推荐表现
4.6 消融实验
4.8 注意力权重可视化
在不同time上,近15个item位置上的平均注意力得分
item之间的注意力得分,能够证明注意力机制能够识别出相似的(同一类)items,即attention score更高:
BERT4Rec
2019-CIKM-BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer
ABSTRACT
之前的研究使用序列神经网络,从左到右编码用户的交互记录,编码为隐藏表示。本文认为这种从左到右的单向模型是次优解,因为:
- 单向架构限制了用户行为序列中隐藏表示的能力;
- 它们通常假设有一个严格有序的顺序,而这并不总是实际的。
本文提出BERT4Rec,采用Cloze task的损失函数(为了避免信息泄露),联合使用左右上下文来预测随机mask的物品。
2 RELATED WORK
2.1 通常的RS
早期的CF:
- MF
- item-based neighborhood methods,衡量target item和user的历史交互Items的相似度 (根据预先计算好的i2i相似性)
Deep Learning:
- 整合从side info中学习到的item表示
- 代替传统的内积:NCF、AutoRec、CDAE
2.2 序列推荐
- MC马尔可夫链,一阶MCs、高阶MCs
- RNN,将用户之前的记录encode一个向量
- GRU4Rec、DREAM、NARM
- 其他DL网络
- Caser、记忆网络、STAMP
2.3 注意力机制
- 把注意力机制当作原始模型的一个附加组件
- Transformer、BERT完全建立在多头自注意力机制上, SASRec
3 BERT4REC
3.1 问题定义
用户的时间顺序交互序列:
任务,建模用户在下一时刻对所有物品的点击可能性:
3.2 模型架构
不同于RNN和SASRec的单向建模,本文的模型是双向建模
3.3 Transformer 层
多头自注意力
d维的表示,线性投影到h个子空间中,每个子空间中纬度 d/h;每层的投影矩阵有3个,并且不同层之间的投影矩阵不共享
按位置的前馈神经网络
W、b这些参数在不同的层与层之间是不同的
堆叠Transformer层
堆叠更多的Transformer层来学习更复杂的item转移模式;由于多层训练困难,增加了残差连接+dropout+LN:
总结:
3.4 嵌入层
在多层Trim的最底部加上位置嵌入p
3.5 输出层
其中E是物品的嵌入表,在输入和输出使用共享的物品嵌入表来缓解过拟合和减少参数
(Q:共享item嵌入表指的是,h的输入就是E吗?)
3.6 模型学习
传统的单向序列推荐,预测输入序列的下一个物品;即输入【v1,...,vtv_1,...,v_tv1,...,vt】,traget是【v2,...,vt+1v_2,...,v_{t+1}v2,...,vt+1】
本文训练目标使用Cloze task (Masked Language Model),在每个train step,随机mask掉输入序列 ρ比例的items,使用其左右来预测它:
这种task是预测随机mask处,为了适合序列推荐,在用户历史序列最后加入了一个特殊的token [mask],基于最终token的表示来预测next item;因此训练的时候也mask掉每个输入序列的最后一个item。
(Q:这为啥类似于 fine-tuning ?)
3.7 讨论
会话/序列推荐:Caser、SASRec、BERT4Rec [Session based / Sequential Recommendation]相关推荐
- SIGIR‘22 推荐系统论文之序列推荐(短文)篇
2022推荐系统论文梳理系列 推荐系统相关顶会整理 IJCAI'22 推荐系统论文梳理 ICML/ICLR'22 推荐系统论文梳理 WWW'22 推荐系统论文之序列推荐篇 WWW'22 推荐系统论文之 ...
- 如何评估序列推荐模型?
有很多论文探讨如何构建优秀的序列推荐模型,但是这篇论文<A Case Study on Sampling Strategies for Evaluating Neural Sequential ...
- 【ccf2021训练赛】图书推荐算法赛道(SASRec序列推荐模型 | 序列推荐模型分类)
内容总结 会话推荐是指,对于一个用户的点击序列(即session),预测下一个要点击的物品.即输入所有的物品V={v1,v2,-,vm} ,在给定某个session为s=[v1,v2,-,vn]的用户 ...
- WWW 2022 | 弯道超车:基于纯MLP架构的序列推荐模型
©作者 | 于辉,周昆 来源 | RUC AI Box 本文主要提出了一个基于纯 MLP 架构的序列化推荐模型,其通过可学习滤波器对用户序列进行编码,在 8 个序列化推荐数据集上超越了 Transfo ...
- 【推荐系统->论文阅读】Dynamic Graph Neural Networks for Sequential Recommendation(用于序列推荐的动态图神经网络)
Dynamic Graph Neural Networks for Sequential Recommendation(用于序列推荐的动态图神经网络) Mengqi Zhang, Shu Wu,Mem ...
- 【推荐算法】深度学习推荐算法综述 Deep Learning based Recommender System: A Survey and New Perspectives
一.MLP based Recommender System 1. Deep Crossing模型 Deep Crossing模型完整的解决了从特征工程.稀疏向量稠密化.多层神经网络进行优化目标拟合等 ...
- 【论文导读】ICDM2018|SASRec---基于自注意力机制的序列推荐(召回)
前言 本次分享2018年发表在ICDM上的论文----「Self-Attentive Sequential Recommendation」.主要是应用self-attention机制来做一个序列推荐, ...
- 性能超越最新序列推荐模型,华为诺亚方舟提出记忆增强的图神经网络
作者 | Chen Ma, Liheng Ma等 译者 | Rachel 出品 | AI科技大本营(ID:rgznai100) 用户-商品交互的时间顺序可以揭示出推荐系统中用户行为随时间演进的序列性特 ...
- #Reading Paper# 【序列推荐】ICKM 2022 RETR:Recommender Transformers with Behavior Pathways
#论文题目:[序列推荐]RETR:Recommender Transformers with Behavior Pathways(RETR:具有行为路径的推荐transformer) #论文地址:ht ...
最新文章
- Java--获取request中所有参数的方法
- VTK:填充孔用法实战
- flink sql的datastream与dataset初始化代码汇总
- 【转载保存】获取页面编码
- 第一个鸿蒙程序“hello world“
- oracle强大函数,oracle 函数排行
- 图说可视化,报表也能做得如此酷炫!
- python中线程里面多线程_Python中的线程和多线程是什么
- 道路计划猿练级(笔者:陈浩)
- ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec
- 基本系统设备_正规全体灭火系统承包资质品质更好_天霖工程
- 【Shiro第三篇】SpringBoot + Shiro实现用户认证(密码加密)
- python需不需要编译_python需要编译么
- NMOS和PMOS的DCIV仿真
- DBN深度信念网络详解
- 电脑只有飞行模式,不显示任何wifi信号
- 小萝莉说Crash(一):Unrecognized selector sent to instance xxxx
- 手机短信接收验证码的实现原理
- ASP木马Webshell安全解决办案
- vulnhub——Empire:LupinOne