GC-SAN,GLRS常见baseline

2023-11-06 14:30
文章标签 常见 gc baseline san glrs

本文主要是介绍GC-SAN,GLRS常见baseline,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Info
  • 1 Motivation
  • 2 Contribution
  • 3 Solution
    • 具体步骤
    • 3.1 构造 session graph
    • 3.2 生成 node embedding
    • 3.3 获取 global interests embedding
    • 3.4 获取 local interests embedding
    • 3.5 生成 session embedding
    • 3.6 预测
  • 4 Evaluation
  • 5 Summarization

本文首发于公众号:code路漫漫,欢迎关注

第三方code:https://github.com/johnny12150/GC-SAN
思维导图地址:https://github.com/hhmy27/MyNotes

Info

IJCAI 19 的文章,对 SR-GNN 做了一点改进,但是 margin 提升很大,和 SR-GNN 一样是图推荐里面常见的 baseline
简单来说,就是把当时很火的 self-attention 拿过来生成 global interests embedding, current interests embedding 的生成仍然是选取 session 最后一个 item 的 embedding,最后把两个 interests 结合起来,做推荐

模型图
在这里插入图片描述

实验结果
在这里插入图片描述
加了一个 self-attention 居然有这么大的提升。。

1 Motivation

对于当前的 session based recsys,没有很好的捕捉上下文信息,达不到最优的效果
为此我们提出 GC-SAN(graph contextual self-attention network)框架,用来捕捉上下文信息

2 Contribution

  1. 提出GC-SAN框架,提高了推荐效果
  2. GNN用来建模 local dependencies,SAN用来建模 non-local representations
  3. GC-SAN达到了SOTA

3 Solution

具体步骤

具体步骤:

  1. 对于每个 session,构造 session graph 和邻接矩阵
  2. 对于 session graph 上的每个 node,生成它们的 embedding
  3. 对于 node embedding,分别获取 global interests embedding 和 local interests embedding
  4. 将 global and local interests 结合起来生成 session embedding
  5. 最后通过 session embedding 进行预测

每个步骤对应的操作下面将一一叙述

3.1 构造 session graph

在这里插入图片描述出入度矩阵经过归一化

3.2 生成 node embedding

在这里插入图片描述
这里是通过一个GNN,生成 graph 中每个 node 的embedding

我们先拼接一下出入度矩阵
在这里插入图片描述
t 是矩阵中的每一行下标

然后传给 GNN 获取最终的 node 表示 h
在这里插入图片描述

3.3 获取 global interests embedding

在这里插入图片描述
这里的 self-attention layers 是一个用于生成 global interests embedding 的模块,它由三个部分组成

  1. single attention
  2. point-wise feed forward
  3. residual connection

下面是具体做法

这里把 session 中物品的表示拼接起来 H = [ h 1 , h 2 , . . . , h n ] H = [h_1,h_2,...,h_n] H=[h1,h2,...,hn]
传给公式3计算
在这里插入图片描述
然后再按照公式 4 计算,这里采用了残差链接提高效果
在这里插入图片描述
最后为了简便写成公式5的形式
在这里插入图片描述
由于我们堆叠了 k 层,所以最终结果是 E ( k ) E^{(k)} E(k)
在这里插入图片描述

3.4 获取 local interests embedding

local interests embedding 就是 h n h_n hn,即 session 中最后一个 item 的 embedding,这是常用的做法

3.5 生成 session embedding

在这里插入图片描述

通过公式 7 得到最终的 session 表示
在这里插入图片描述

3.6 预测

通过公式 8 计算候选物品的得分
在这里插入图片描述

以及目标函数
在这里插入图片描述

4 Evaluation

在这里插入图片描述
消融实验,带不带 GNN
在这里插入图片描述

超参的影响
在这里插入图片描述

5 Summarization

和 SR-GNN 思路基本一样,不过 global interests embedding 这里使用 self-attention 生成。SR-GNN 使用软注意力机制去生成。

这篇关于GC-SAN,GLRS常见baseline的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/357156

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解

MySQL查看表的最后一个ID的常见方法

《MySQL查看表的最后一个ID的常见方法》在使用MySQL数据库时,我们经常会遇到需要查看表中最后一个id值的场景,无论是为了调试、数据分析还是其他用途,了解如何快速获取最后一个id都是非常实用的技... 目录背景介绍方法一:使用MAX()函数示例代码解释适用场景方法二:按id降序排序并取第一条示例代码解

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序