ICDE'22「字节」EMBSR:挖掘会话推荐中用户行为的【顺序关系】和【二元关系】

2022-09-19 10:37:47 浏览数 (2)

关注我们,一起学习~

title:Micro-Behavior Encoding for Session-based Recommendation link:https://arxiv.org/pdf/2204.02002.pdf code:https://github.com/SamHaoYuan/EMBSR from:ICDE 2022

1. 导读

本文是针对会话推荐提出的相关方法,主要关注会话序列中用户执行的各种活动,如点击,添加购物车等微行为。本文提出EMBSR关注两种不同的行为模式:“顺序模式”和“二元关系模式”。为了建立用户微行为的统一模型,

  • 首先设计了一个多重图,通过图神经网络聚合来自不同商品的序列模式,
  • 然后利用扩展的自注意力网络来利用微行为的成对关系模式。

方法特点

1. 构建有向图,结合边表征和节点表征进行GNN的消息传播

2. 注意力机制挖掘不同行为之间的成对关系,将这种关系与用户偏好相联系

3. 关注同一商品下的连续操作,利用时序模型挖掘同一商品下的序列才做表达的含义

2. 问题定义

商品集合表示为V,操作集合表示为O,微行为序列表示为

S_t={s_1,...s_t}

s_i=(v_i,o_i)

,因此商品序列可以表示为

S_t^v={v^i,...v^n}

,行为序列表示为

S_t^o={o^i,...,o^n}

,

n leq t

。对于每一个交互商品

v^i

可能存在k个交互行为

o^i={o_1^i,...,o^i_k}

。具体形式如下图,其中上半部分是集合S,下半部分对应的是商品和行为序列,方面理解一个商品对应多个操作。本文建模的目标是预测

v^{n 1}

3. 文中一些名词

为了方便大家理解,这里对一些名词先解释一下,

micro-behavior:微行为,指的是包含商品和操作元组(s, o),如上图的序列S是微行为序列;

但是文中主要用到的是将商品和行为两者分开的序列

micro-operator:微操作,笔者直接就这样翻译了。这个表示的是操作o,如上图中的S中的o和

S^o

中的o。

macro-item:宏商品,笔者直译。。这个是将原始的商品序列中连续相同的商品进行合并,如

S^v

集合中的都是宏商品,将原始S序列中连续相同的商品合并了,如v2。

对应的

S^o

S^v

的集合大小是一样的,只是

S^v

中的每个元素

o^i

是一个集合,每个里面包含一个或多个操作。

文中容易混淆的地方是,作者将

S^v

o^i

都叫做微操作序列,本文为了好区分,笔者分别称他们为操作序列和微操作序列。

4. 方法

如图所示为EMBSR的整理框架。

4.1 编码序列模式

4.1.1 图构建

这里采用有向图对会话序列建模,序列表示为

S_t^v={v^1,...,v^n}

,有向图表示为

mathcal{G_t=(V_t,E_t)}

,其中V中的节点是序列S中的去重后的商品,有向边表示顺序关系

(v^i,v^{i 1})

,该图为多重图(multigraph),即相同商品对之间可能存在多次交互,通过按交互时间排序,通过排名来区分相同节点对的不同边。具体形如下图的右边部分,对相同节点对的边采用时间排序编号。

Note:在构建图的时候,作者基于文献[1],构建星图(star graph),这里直译为星图。它将原始节点成为“卫星节点”,另外构建一个虚拟节点,叫做“星节点”。这就是个叫法,大家不用太过纠结或在意。卫星节点还是和之前一样消息传播,捕获结构和顺序信息;星节点的作用是从消息传播中发掘长期信息,后续将介绍如何构建虚拟节点的embedding。

4.1.2 节点embedding初始化

构建矩阵

M^Vin mathbb{R}^{|V|times d}

表示商品的embedding,令

S^u_t={u_1,...,u_c}

表示会话序列中去重后的商品集合,则他们的embedding可以表示为

h^0={e_{u_1},...,e_{u_c}}

,其中的e从M矩阵中查找。对于“星节点”,采用“卫星节点”的均值表示,如下

e_{u_s}=frac{1}{c}sum_{i=1}^c{e_{u_i}}

4.1.3 操作的序列信息

对于每个微操作

o_j^i

,同样构建embedding矩阵

M^O

。对于每个交互商品,可以得到其交互微操作序列的embedding

{e_{o_1^i},...,e_{o_k^i}}

。为了捕获微操作的序列模式,这里采用GRU来编码微操作序列,公式如下,其中

tilde{h}_j^i

表示对应操作的隐状态,采用最后一个微操作的状态表示整个微操作序列的embedding

tilde{h}^i=tilde{h}_k^i

tilde{h}_{j}^{i}=G R Uleft(e_{o_{j}^{i}}, tilde{h}_{j-1}^{i} ; Phi_{G R U}right)

对于交互商品序列对应的操作序列的表征可以表示如下,

tilde{h}_o in mathbb{R}^{n times d}

tilde{h}_o={tilde{h}^1,...,tilde{h^n}}

4.1.4 聚合阶段

聚合状态包括两个过程。

  • 第一个过程是通过消息函数为每条边生成一条消息。
  • 另一个过程是通过聚合函数聚合沿其边的每个节点的邻居信息。

信息传播的主要是考虑微操作对用户对物品的偏好的影响。因此,同一个节点将根据其在该位置的微操作顺序沿不同的边传递不同的消息。因此每个卫星节点的整个过程可以表述为下式,其中

e_{u_j}^l

表示节点

u_j

在第

l

层的表征,Ein(),Eout()分别表示该节点对应的“入”和“出”两个方向的邻居节点,f表示“入”和“出”的编码函数,主要是结合边上的行为embedding和商品的节点embedding进行编码。这里不考虑与星节点相关的边,防止结构信息被破坏。

begin{array}{l} m_{i }^{l 1}=f_{m}^{ }left(left{e_{u_{j}}^{l}, tilde{h}_{j}:left(u_{j}, u_{i}right) in E_{i n}(i)right}right) \ m_{i-}^{l 1}=f_{m}^{-}left(left{e_{u_{j}}^{l}, tilde{h}_{j}:left(u_{i}, u_{j}right) in E_{text {out }}(i)right}right) end{array}
begin{array}{l} f_{m}^{ }left(e_{u_{j}}, tilde{h}_{j}right)=W_{m}^{ }left(left[e_{u_{j}} ; tilde{h}_{j}right]right) b_{m}^{ } \ f_{m}^{-}left(e_{u_{j}}, tilde{h}_{j}right)=W_{m}^{-}left(left[e_{u_{j}} ; tilde{h}_{j}right]right) b_{m}^{-} end{array}

得到这些embedding

m

后,进行聚合,公式如下,这里分别对“出”和“入”的embedding进行聚合后,再拼接得到最终的节点

u_i

的embedding

a_i^{l 1}

a_{i}^{l 1}=left[sum_{k=1}^{left|E_{text {in }}(i)right|} m_{i , k}^{l 1} ; sum_{k=1}^{left|E_{text {out }}(i)right|} m_{i-, k}^{l 1}right]

4.1.5 更新阶段

通过聚合信息更新每个节点,根据前一阶段聚合的embedding

a_i^{l 1}

和该层的embedding

e^l_i

得到节点

u_i

的下一层的节点embedding,公式如下,

begin{aligned} tilde{z}_{i}^{l 1} &=sigmaleft(W_{z} a_{i}^{l 1} U_{z} e_{u_{i}}^{l}right) \ r_{i}^{l 1} &=sigmaleft(W_{r} a_{i}^{l 1} U_{r} e_{u_{i}}^{l}right) \ tilde{e}_{u_{i}}^{l 1} &=tanh left(W_{u} a_{i}^{l 1} U_{u}left(r_{i}^{l 1} odot e_{u_{i}}^{l}right)right) \ hat{e}_{u_{i}}^{l 1} &=left(1-tilde{z}_{i}^{l 1}right) odot e_{u_{i}}^{l} tilde{z}_{i}^{l 1} odot tilde{e}_{u_{i}}^{l 1} end{aligned}

然后考虑星节点的连接,以显式捕获会话的整体信息。对于每个卫星节点,采用门控网络来决定应该从星节点传播多少信息到相邻节点,公式如下,

begin{aligned} alpha_{i}^{l 1} &=frac{left(W_{q 1} hat{e}_{u_{i}}^{l 1}right)^{T} W_{k 1} e_{u_{s}}^{l}}{sqrt{d}} \ e_{u_{i}}^{l 1} &=left(1-alpha_{i}^{l 1}right) hat{e}_{u_{i}}^{l 1} alpha_{i}^{l 1} e_{u_{s}}^{l} end{aligned}

通过注意力机制,聚合周围的卫星节点的embedding信息到星节点,公式如下,

begin{array}{c} beta_{i}=operatorname{softmax}left(frac{left(W_{k 2} e_{u_{i}}^{l 1}right)^{T} W_{q 2} e_{u_{s}}^{l}}{sqrt{d}}right) \ e_{u_{s}}^{l 1}=sum_{i=1}^{l_{s}} beta_{i} e_{u_{i}}^{l 1} end{array}

最后结合初始embedding和最后一层的embedding得到最终的卫星节点embedding

h^f

,公式如下,同理可以得到星节点的embedding。

begin{aligned} g &=sigmaleft(W_{g}left[h^{0} ; h^{text {last }}right]right) \ h^{f} &=g odot h^{0} (1-g) odot h^{text {last }} end{aligned}

4.2 编码二元关系模式

为了编码微行为的二元关系模式并生成会话表征,在输入会话中聚合所有微行为的embedding。在上述 GNN 中,已经将微操作的顺序模式融入到商品的表征中,但微操作的关系模式仍然被忽略了。本节结合操作感知的自注意力机制对二元微操作进行编码。

4.2.1 二元微操作编码

为了建模成对操作之间的关系,构建矩阵

M^R in mathbb{R}^{|O|^2 times d}

,因此会话

S_t

的操作序列

O_t={o_1,...,o_t}

两两关系可以表示成一个矩阵,如下,可以从矩阵

M^R

中找到对应的embedding。

M_{S_{t}}=left[begin{array}{cccc} r_{11} & r_{12} & cdots & r_{1 t} \ r_{21} & r_{22} & cdots & r_{2 t} \ vdots & vdots & ddots & vdots \ r_{t 1} & r_{t 2} & cdots & r_{t t} end{array}right]

4.2.2 操作感知的自注意力

此处在自注意力机制中结合成对的操作embedding,从而捕获微行为中的二元信息。给定微行为序列

S_t

,其对应的embedding序列为

X_t={x_1,...,x_t}

,因为微行为是商品和操作的元组,因此

x_i=e_{v_i} e_{o_i}

。其中商品embedding

e_{v_i} in mathbb{R}^d

从最终的卫星节点embedding矩阵

h^f

中得到,

e_{o_i}

M^O

中得到。

因为星节点融合了整个会话的信息,将其作为目标商品的embedding,结合目标商品上的操作得到对应的embedding为

x_s=e_{u_s} e_{o_{t 1}}

,将其放入

X_t

的最后。

在自注意力机制中考虑不同商品在序列中的位置,本节加入位置编码,其矩阵为

M^P

这也是会话(序列)推荐中常用的方式。具体公式如下,其中

W^Q

为可学习参数。

z_{i}=sum_{j=1}^t{alpha_{ij}(x_{j} e_{ij} e_{p_j})}
alpha_{ij}=frac{exp(e_{ij})}{sum_{k=1}^t{exp(e_{ik})}}
e_{ij}=frac{x_iW^Q(x_j e_{r_{ij}} e_{p_j})}{sqrt{d}}

相比于传统的自注意力机制,此处加入了操作之间的关系embedding,从用户不同行为中反映偏好和意图。

然后和经典方法一样,在注意力机制之后,紧接FFN,公式如下,

FFN(z_i)=max(0,z_iW_1 b_1)W_2 b_2

4.3 预测

将短期兴趣(用最近的交互得到)和长期兴趣(星节点得到)融合,公式如下,其中z_s为星节点经过自注意力机制得到的embedding,x_t表示序列中的最后一个微行为embedding。

begin{aligned} beta &=sigmaleft(W_{m}left[z_{s} ; x_{t}right] b_{m}right) \ m &=beta odot z_{s} (1-beta) odot x_{t} end{aligned}

然后通过下式得到预测分数,损失函数采用交叉熵损失函数。

begin{gathered} hat{m}=w_{k} L_{2} operatorname{Norm}(m), hat{v}_{i}=L_{2} operatorname{Norm}left(v_{i}right) \ hat{y}_{i}=operatorname{softmax}left(hat{m}^{T} hat{v}_{i}right) end{gathered}

5. 结果

0 人点赞