前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SIGIR'22「平安」会话推荐:需求感知的图神经网络

SIGIR'22「平安」会话推荐:需求感知的图神经网络

作者头像
秋枫学习笔记
发布2022-09-19 10:24:52
4980
发布2022-09-19 10:24:52
举报
文章被收录于专栏:秋枫学习笔记

关注我们,一起学习

title:DAGNN: Demand-aware Graph Neural Networks for Session-based Recommendation link:https://arxiv.org/pdf/2105.14428v1.pdf from:SIGIR 2022

预备知识:双线性函数:https://blog.csdn.net/xpy870663266/article/details/105465315

1. 导读

本文针对会话推荐session recommendation领域提出相关的方法。大多数现有的方法都是直观地提出来从匿名会话数据中发现潜在的兴趣或偏好,忽略了顺序行为通常反映会话用户的潜在需求,即语义级别因素。为了解决上述问题,本文提出了一种需求感知图神经网络DAGNN)。需求建模组件被设计为

  • 首先,提取会话需求,并且使用全局需求矩阵估计每个会话的潜在多个需求。
  • 然后,设计需求感知图神经网络来提取会话需求图,以学习需求感知商品embedding,以用于后续推荐。利用互信息损失提高学习embedding的质量。

本文特点在于根据用户交互序列中商品对应的类型挖掘潜在需求,通过交互序列和需求序列构建图,然后进行GNN消息传播,并且利用互信息使表征之间对齐。

2. 问题定义

V=\{v_1,...,v_{|s|}\}

表示长度为

|s|

的商品序列,对应的类型序列表示为

C=\{c_1,,...,c_{|s|}\}

假设有 M 个需求空间,每个会话可能包含一个或多个落入该空间的潜在需求

\mathcal{V,C}

分别表示商品集合和类型集合,

\mathcal{S}

表示会话集合。给定一个会话

s=\{(v_1,c_1),...,(v_{|s|},c_{|s|})\}

,预测下一个时刻可能交互的商品

P(v_t|s)

3. 方法

image.png

3.1 需求建模组件

该组件用于对每个输入会话中可能包含的潜在需求进行建模。给定商品序列V和类型序列C,首先将类型序列C映射到M个需求空间,表示为下式,其中

C\in R^{n_c \times |s|}

表示类型的embedding矩阵。

W \in R^{n_d\times n_c}

为可学习参数。

D^m=W^m_dC,m\in \{1,...,M\}

为了获取会话中包含的多个需求的表征,将生成的需求表征沿类别方向聚合成一个需求表征向量,表示为下式,

\boldsymbol{d}_i^m

为矩阵

D^m

中的第i个商品的类型的表征,

\boldsymbol{d}^m

表示当前会话对应的第m个需求空间的表征。

\boldsymbol{d}^{m}=\log \sum_{i=1}^{|s|} \exp \left(\boldsymbol{d}_{i}^{m}\right)

获取需求表征后,分别计算会话s的需求分数

z^m

和目标商品

v_t

的需求分数

z^m_t

。计算方式如下,

K\in R^{n_d\times |s|}

表示查询矩阵,σ为sigmoid函数,

z_i^m \in R^{|s|}

表示序列中第i个类型对第m个需求空间的贡献。

z_t^m

是一个实数,计算M个需求空间后可得

z_t=[z_t^1,...,z_t^M]^T
\begin{aligned} K &=W_{k} C \\ \boldsymbol{z}^{m} &=\sigma\left(\frac{\left(\boldsymbol{d}^{m}\right)^{T} K}{\sqrt{n_{d}}}\right) \end{aligned}
\begin{aligned} K_{t} &=W_{k} \boldsymbol{c}_{t} \\ z_{t}^{m} &=\sigma\left(\frac{\left(\boldsymbol{d}^{m}\right)^{T} K_{t}}{\sqrt{n_{d}}}\right) \end{aligned}

3.2 需求感知的商品embedding组件

3.2.1 构建需求图保持序列依赖

给定序列

s=\{(v_1,c_1),...,(v_{|s|},c_{|s|})\}

,构建有向图

G^m=(V,E^m)

来保持序列中商品的顺序关系,V表示节点,s中所有的商品;

E^m

表示在第m个需求空间中的边。

对于在图中的每个节点,他们的需求分数

z_i^m

已经由上面计算得到,为了生成边,首先根据商品在会话中出现的顺序构造有向实边。如果j=i+1,则在商品 vi 和项目 vj 之间将有一条实边 eij = 1。

为了进一步考虑需求的影响,需求图中商品之间的消息传递可能会有所不同。例如,在图 4 的左图中,物品 v5、v1、v3、v4 属于同一个需求,但在同一需求下,物品 v5 无法从其 2 阶邻居 v1、v4 中获取信息。原因是一阶邻居节点 v2 与节点 v5 不属于同一需求,导致

z_2^m

得分较低。因此,如果 0 < j - i < k + 1 并且 k 是预先设置的滑动窗口的大小,则在商品 vi 和 vj 之间插入虚线。虚线边的权重由下式计算:

e_{ij}^m=log(z_i^mz_j^m+1)

3.2.2 需求感知表征学习

采用GNN对节点信息进行传播和聚合,其中

N_{v_i}

为实线连接的邻居节点,

\hat{N}_{v_i}

为虚线连接的邻居节点。

\begin{aligned} \boldsymbol{h}_{i}^{m, l} &=\operatorname{agg}\left(\left\{\boldsymbol{v}_{j}^{m, l-1}, j \in N_{v_{i}}\right\}\right) \\ \operatorname{agg}(.) &=\frac{1}{\left|N_{v_{i}}\right|} \sum_{j \in N_{v_{i}}} z_{j}^{m} e_{i j}^{m} \boldsymbol{v}_{j}^{m, l-1} \\ \hat{\boldsymbol{h}}_{i}^{m, l} &=a g g\left(\left\{\boldsymbol{v}_{j}^{m, l-1}, j \in \hat{N}_{v_{i}}\right\}\right) \\ a g g(.) &=\frac{1}{\left|\hat{N}_{v_{i}}\right|} \sum_{j \in \hat{N}_{v_{i}}} z_{j}^{m} \hat{e}_{i j}^{m} \boldsymbol{v}_{j}^{m, l-1}, \end{aligned}

然后通过下式更新节点embedding,

\boldsymbol{v}_{i}^{m, l}=\sigma\left(W^{m, l} \operatorname{concat}\left(\boldsymbol{v}_{i}^{m, l-1}, \boldsymbol{h}_{i}^{m, l}, \hat{\boldsymbol{h}}_{i}^{m, l}\right)+\boldsymbol{b}_{m}\right)

3.3 需求驱动的推荐组件

3.3.1 会话embedding

通过学习的需求感知商品embedding,通过图

G_m

的读出函数进一步学习需求感知会话表征

s^m_g

。应用注意机制来聚合所有节点embedding,公式如下,

|N_s|

为会话长度

\begin{aligned} \beta_{i}^{m} &=\boldsymbol{q}^{T} \sigma\left(W_{1} \boldsymbol{v}_{i}^{m}+W_{2} \boldsymbol{v}_{l a s t}^{m}+\boldsymbol{b}_{1}\right) \\ \boldsymbol{s}_{g}^{m} &=\sum_{i=1}^{\left|N_{s}\right|} \beta_{i}^{m} \boldsymbol{v}_{i}^{m} \end{aligned}

有了商品embedding和会话embedding后,将“局部”商品embedding和“全局”会话embedding之间的关系与商品类别和提取的会话需求之间的关系对齐。基于对比学习,设计互信息损失,以最小化全局表征

s_g^m

和局部商品表征之间的差异,公式为下式,其中D(,)是一个双线性函数,用于衡量一个商品是否属于当前会话。

z_i^m

表示第m个需求空间中商品 vi 的需求分数。

\begin{aligned} \mathcal{L}_{M I M}=\frac{1}{\left|N_{s}\right| M} \sum_{m=1}^{M} & \sum_{i=1}^{\left|N_{s}\right|} \mathbf{E}_{\left(V, E^{m}\right)}\left\{z_{i}^{m}\left[\log D\left(\boldsymbol{s}_{g}^{m}, \boldsymbol{v}_{i}^{m}\right)\right]\right.\\ &\left.+\left(1-z_{i}^{m}\right)\left[\log \left(1-D\left(\boldsymbol{s}_{g}^{m}, \boldsymbol{v}_{i}^{m}\right)\right)\right]\right\}, \end{aligned}

3.3.2 预测层

为了预测目标商品是否会被推荐,首先计算第m个需求下的会话embedding

s_g^m

和目标商品embedding

v_{last}^m

。然后,应用线性变换将这些embedding连接在一起,形成预测层的输入

s^m

,公式为下式

s^m=W^hconcat(s_g^m,v_{last}^m)
P\left(v_{t} \mid s\right)=\operatorname{Softmax}\left(\sum_{m=1}^{M} z_{t}^{m} \boldsymbol{s}^{m T} \boldsymbol{v}_{t}\right)
\mathcal{L}_{p}=\sum_{s \in S} y_{v_{t}} \log P\left(v_{t} \mid s\right)+\left(1-y_{v_{t}}\right) \log \left(1-P\left(v_{t} \mid s\right)\right)

总损失函数表示为:

\mathcal{L}=\mathcal{L}_{p}+\lambda_{1} \mathcal{L}_{M I M}+\lambda_{2}\|\Theta\|_{2}

4. 结果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秋枫学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.1 需求建模组件
  • 3.2 需求感知的商品embedding组件
    • 3.2.1 构建需求图保持序列依赖
      • 3.2.2 需求感知表征学习
      • 3.3 需求驱动的推荐组件
        • 3.3.1 会话embedding
          • 3.3.2 预测层
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档