[ICDE‘20] Sequence-Aware Factorization Machines for Temporal Predictive Analytics (SeqFM)

在这里插入图片描述
原论文

Motivation

现有的基于矩阵分解的模型不能捕捉序列信息,于是作者提出了新颖的SeqFM模型,分别学习静态特征(如性别)、动态特征(如交互信息)以及二者之间的关系。

在这里插入图片描述

Introduction

为了避免特征工程中手工设计,FMs (factorization machines) 用来将原始的特征嵌入到隐向量空间,并且通过对emb内积学习特征之间的联系。

但是plain FM受限于线性表达能力,DNN-based FM,如Xiangnan He的NFM,学习高阶的联系。

FM有两种趋势:一种是加深网络,如使用残差网络的DeepCross;另一种是加“宽”网络,增加可以提取信息的特征联系,如利用用户日志和文本信息的CoFM,或者将低阶输出和高阶输出混合的Wide&Deep、DeepFM等。

FM-based模型并不能获取时序信息(temporal order),因此作者考虑时序上的因果关系,得到 full sequence-awareness for temporal
predictive analytics。

并且建立了一个多视角学习机制,static view for static features, dynamic view for dynamic features,
and cross view for both,每一个都是用self-attention机制代替RNN或CNN,以减少时空复杂度。对于dynamic和cross,进一步地使用masked self-attention(和transformer一样,来表示顺序方向)

Preliminaries

○、▷、⋆ 分别表示static view, dynamic view and cross view

特征 x \bold{x} x以one-hot表示,如
在这里插入图片描述
embedding以 v \bold{v} v表示

与传统的FMs相比
在这里插入图片描述
SeqFM公式中 f ( x ) f(\bold{x}) f(x)就是提出的特征部分。
在这里插入图片描述
事实上, x \bold{x} x也可以表示为 x = Σ i = 1 n g i \bold{x} = \Sigma_{i=1}^n \bold{g}_i x=Σi=1ngi g i = [ 0 , . . . , 0 , 1 , 0 , . . . , 0 ] \bold{g}_i = [0, ..., 0, 1, 0, ..., 0] gi=[0,...,0,1,0,...,0].

对于三个类型,剥离出来:

x ∘ = ∑ i = 1 n ∘ g i ∘ \mathbf{x}^{\circ}=\sum_{i=1}^{n^{\circ}} \mathbf{g}_{i}^{\circ} x=i=1ngi
x ▹ = ∑ i = 1 n ▹ g i ▹ \mathbf{x}^{\triangleright}=\sum_{i=1}^{n^{\triangleright}} \mathbf{g}_{i}^{\triangleright} x=i=1ngi

G ∘ ∈ { 0 , 1 } n ∘ × m ∘ \mathbf{G}^{\circ} \in\{0,1\}^{n^{\circ} \times m^{\circ}} G{0,1}n×m
G ▹ ∈ { 0 , 1 } n ▹ × m ▹ \mathbf{G}^{\triangleright} \in\{0,1\}^{n^{\triangleright} \times m^{\triangleright}} G{0,1}n×m

其中, G ▹ \mathbf{G}^{\triangleright} G是按时间顺序堆叠的,如图示
在这里插入图片描述
另外,为了避免动态特征过长,最多只取最近的 n ▹ n^\triangleright n个,少于则以 { 0 } 1 × m ▹ \{0\}^{1\times m^\triangleright} {0}1×m pad

在这里插入图片描述

Architecture

在这里插入图片描述

Embedding Layer

G \mathbf{G} G通过一层全连接得到embedding
在这里插入图片描述
说这么多one-hot,实际上代码实现的时候直接用embedding矩阵查表就可以,不需要全连接。

Self-Attention

Static View

hidden state和transformer采用的计算方式一样
在这里插入图片描述在这里插入图片描述
Q K \mathbf{Q}\mathbf{K} QK学习vector-wise的关系,得到attention weight,为 K \mathbf{K} K赋权,学习bit-wise(每个维度之间)的关系

Dynamic View

在这里插入图片描述
在这里插入图片描述
这样做的原因是为了让需要mask的行softmax之后的概率为0

Cross View

在这里插入图片描述
cross view的emb由堆叠得到
在这里插入图片描述
其他规定与dynamic一样

Intra-View Pooling Operation

在每个view中,对 H \mathbf{H} H所有行做一个平均池化,得到hidden state
在这里插入图片描述

Shared Residual Feed-Forward Network

在这里插入图片描述
将所有隐向量送入 l l l 层的残差前馈网络,注意是共享的残差层,不是分别输入不同的。

为了稳定并加快训练,采用Layer Normalization(与batch normalization不同的时,均值和方差只在单条数据上求)
在这里插入图片描述
ϵ \epsilon ϵ 需要加一个极小值防止分母为0

训练时,对于ResNet中的每一层,加上dropout作为模型的正则化约束;测试时,使用所有的神经元

View-Wise Aggregation

在这里插入图片描述
串联后得到最终的hidden state

Output Layer

在这里插入图片描述
p ∈ R 1 × 3 d \mathbf{p} \in \mathbb{R}^{1 \times 3 d} pR1×3d h a g g \mathbf{h}^{agg} hagg做向量点积,相当于加权和

在这里插入图片描述

时间复杂度分析

计算代价主要在于self-attention和FFN
在这里插入图片描述
因为 l l l 较小,主要集中在前者,而n和d都可以视作常数(超参),所以相对于数据量而言是线性的。

应用

主要有三类任务:ranking, classification, and regression tasks

Ranking

进行next-POI recommendation(应该和next-item recommendation一样)

输入:
在这里插入图片描述
和一般的RS架构不大一样,对于每个candidate item,item之外的static部分都要计算一遍

代价不会很大吗?可以想想改进办法

在这里插入图片描述
进行size=1的负采样,然后用BPR loss(实验中实际负采样1000个)

Classification

输入同ranking一样构造

为了获得概率(ranking可以只是获得score),使用sigmod激活
在这里插入图片描述
在这里插入图片描述
同样需要负采样,大小由groundtruth数决定(实验中为1),损失函数使用交叉熵

Regression

估计用户评分的任务
在这里插入图片描述
在这里插入图片描述
使用MSE方式约束

实验

数据集

在这里插入图片描述
剔除频数小于10的user和频数小于10的object(Beauty和Toys不需要)

指标

在这里插入图片描述

复现

我使用pytorch复现了一个版本 SeqFM

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值