Filter-enhanced MLP is All You Need for Sequential Recommendation论文阅读笔记

论文提出了一种名为FMLP-Rec的全MLP模型,用于顺序推荐任务,通过结合可学习的滤波器来衰减噪声信息。在多个真实世界数据集上,FMLP-Rec的表现优于基于RNN、CNN、GNN和Transformer的模型。滤波器组件模拟循环卷积,捕获周期性特征,同时降低了时间复杂度和过拟合风险。实验表明,适当过滤能提升简单MLP模型的性能,与复杂Transformer架构相比,具有轻量级和高效的优势。

Filter-enhanced MLP is All You Need for Sequential Recommendation

代码和数据:https://github.com/RUCAIBox/FMLP-Rec
论文下载地址:https://arxiv.org/pdf/2202.13556.pdf
论文作者:Kun Zhou, Hui Yu, Wayne Xin Zhao, Ji-Rong Wen
会议:WWW2022

摘要

  • 在在线平台中,记录的用户行为数据不可避免地包含噪声,深度推荐模型很容易在这些记录的数据上过拟合。
  • 为了解决这个问题,论文从信号处理中借鉴了滤波算法的思想,以衰减频域中的噪声。
  • 将简单的过滤算法(例如,带阻滤波器)与全 MLP 架构相结合
  • FMLP-Rec,一种具有可学习过滤器的全 MLP 模型,用于顺序推荐任务。
  • 全 MLP 架构使我们的模型具有较低的时间复杂度,并且可学习的滤波器可以自适应地衰减频域中的噪声信息。
  • 在八个真实世界数据集上进行的大量实验证明了我们提出的方法优于竞争性 RNN、CNN、GNN 和基于 Transformer 的方法。

结论

  • 记录的用户行为数据通常包含噪声交互,数字信号处理领域的过滤算法有助于减轻深度序列推荐模型中噪声的影响
  • 提出了 FMLP-Rec,这是一种用于顺序推荐任务的具有可学习过滤器的全 MLP 模型
  • 全 MLP 架构使我们的模型具有较低的时间复杂度,并且可学习的滤波器可以通过 SGD(随机梯度下降) 进行优化,以自适应地衰减频域中的噪声信息
  • 可学习滤波器相当于时域中的循环卷积,具有更大的感受野,可以更好地捕捉周期性特征

1.导言

  • 用户的行为是动态的,并且会随着时间而变化。因此,捕捉用户行为的顺序特征以做出适当的推荐至关重要
  • 记忆网络 [9, 20] 和自注意机制 [26, 27]来增强建模能力,以有效捕捉动态用户偏好
  • 基于 Transformer 的方法 [22, 50, 70] 通过堆叠多头自注意力层在这项任务中显示出显着的性能
    • 堆叠的自注意力层涉及大量参数,这可能导致基于 Transformer 的方法的过度参数化架构
  • 这些方法主要根据记录的用户行为数据拟合模型参数,这些数据本质上是嘈杂的,甚至包含恶意伪造
    • 当记录的序列数据包含噪声时,基于自我注意的推荐器的情况变得更加严重,因为它会关注所有用于序列建模的项目
  • 提出了一种用于顺序推荐的新型过滤增强 MLP 方法,从 Transformers 中移除 self-attention 组件,FMLP-Rec 完全基于 MLP 结构来堆叠块,在每个堆叠块中加入了一个滤波器组件,我们执行快速傅立叶变换 (FFT) [45] 以将输入表示转换为频域,并且逆 FFT 过程恢复去噪表示
    • 为了实现过滤器组件,论文结合了可学习的过滤器来对频域中的输入项目序列进行编码,这可以在没有人类先验的情况下从原始数据中进行优化
    • FMLP有效地衰减噪声信息并从所有频率中提取有意义的特征(例如,长期/短期项目交互)。
    • 可学习滤波器相当于时域的循环卷积,在整个序列上具有更大的感受野,能够更好地捕捉用户行为的周期性特征
    • 它需要更少的时间成本而不考虑成对的项目相关性

2.预备知识

  • 问题陈述

    • 假设有一组用户和项目,分别用 U 和 I 表示,其中 u ∈ U 表示用户,i ∈ I 表示项目,用户和项目的数量表示为 |U|和|I|
    • 对于带有隐式反馈的顺序推荐
      • 用户 u 有一个上下文 c,一个按时间顺序排列的包含项目的交互序列:c = { i 1 , . . . , i n i_1,...,i_n i1,...,in },
        • n 表示交互次数, i t i_t it 表示与用户 u 交互的第 t 个项目
      • 使用 i j : k \large i_{j:k} ij:k 表示子序列, i j : k \large i_{j:k} ij:k = { i j , . . . , i k i_j,...,i_k ij,...,ik }, 1 ≤ j < k ≤ n
    • 形式上,给定用户的上下文项目序列 c = { i 1 , . . . , i n i_1,...,i_n i1,...,in },,顺序推荐的任务是预测用户可能在第 (𝑛 + 1) 次交互的下一个项目步骤,记为𝑝( 𝑖 𝑛 + 1 ∣ 𝑖 1 : 𝑛 \large 𝑖_{𝑛+1} |𝑖_{1:𝑛} in+1i1:n )。
  • 傅里叶变换

    • 离散傅里叶变换(DFT)
      • 文中考虑一维 DFT。给定具有 𝑛 ∈ [0, 𝑁 − 1] 的数字序列 { 𝑥 𝑛 𝑥_𝑛 xn },1D DFT 通过以下方式将序列转换为频域:
        • X k = ∑ n = 0 N − 1 x n e − 2 π i N n k \large X_k = \sum_{n=0}^{N-1} x_n e^{-\frac {2πi}{N}}nk Xk=n=0N1xneN2πink ,0 ≤ k ≤ N-1
          • 𝑖是虚数单位。对于每个𝑘,DFT 生成一个新的表示 𝑋 𝑘 𝑋_𝑘 Xk ,作为所有原始输入标记 𝑥 𝑛 𝑥_𝑛 xn 与所谓的“旋转因子”的总和
          • 𝑋 𝑘 𝑋_𝑘 Xk 代表序列{ 𝑥 𝑛 𝑥_𝑛 xn }在频率 Font metrics not found for font: .处的频谱
        • DFT 是一对一的转换。给定 DFT 𝑋 𝑘 𝑋_𝑘 Xk ,我们可以通过逆 DFT (IDFT) 恢复原始序列 { 𝑥 𝑛 𝑥_𝑛 xn}:
        • x n = ∑ n = 0 N − 1 X k e 2 π i N n k \large x_n = \sum_{n=0}^{N-1} X_k e^{\frac {2πi}{N}}nk xn=n=0N1XkeN
虽然提供的引用中未直接提及“Multi-Behavior Hypergraph-Enhanced Transformer for Next-Item Recommendation”的具体内容,但可从相关信息进行推测和分析。 ### 原理 从引用来看,超图可用于模拟用户对下一项推荐的短期偏好,如HyperRec使用超图来建模[^2][^3]。Multi-Behavior Hypergraph-Enhanced Transformer可能结合了超图对多行为依赖的建模能力以及Transformer对序列行为的处理能力。超图可以捕捉不同行为之间复杂的依赖关系,而Transformer能够处理序列行为中的过渡模式。通过对序列行为感知的过渡模式进行编码表示,再结合超图增强的多行为依赖,实现对用户行为的更准确建模,从而为下一项推荐提供依据。例如,超图可以将用户的多种行为(如浏览、购买、收藏等)作为节点,行为之间的关系作为超边,以更好地表示多行为之间的交互。Transformer则可以对用户的行为序列进行处理,学习序列中的模式和规律。 ### 应用 在推荐系统领域,该技术可用于下一项推荐,尤其是在基于会话的场景中。例如,在电商平台中,根据用户当前会话内的一系列行为,预测用户接下来可能想要浏览或购买的商品;在视频平台中,根据用户当前观看视频的行为序列,推荐用户可能感兴趣的下一个视频。通过结合多行为和序列信息,能够提高推荐的准确性和个性化程度。 ### 研究进展 目前提供的引用中没有直接关于该技术研究进展的内容。但从引用可知,之前存在使用超图进行下一项推荐的研究,如HyperRec,但它存在不利用超边缘间信息、不适合基于会话场景以及复杂度高难以在实际场景部署等问题[^2][^3]。Multi-Behavior Hypergraph-Enhanced Transformer可能是为了解决这些问题而提出的新方法,未来的研究可能会集中在进一步优化模型结构、降低复杂度、提高推荐性能等方面。 ```python # 这里只是一个简单的示意代码,并非完整实现 # 假设我们有一个用户行为序列 behavior_sequence = [1, 2, 3, 4, 5] # 可以使用Transformer对序列进行编码 import torch from torch.nn import TransformerEncoder, TransformerEncoderLayer # 定义Transformer编码器层 d_model = 128 nhead = 8 num_layers = 2 encoder_layer = TransformerEncoderLayer(d_model=d_model, nhead=nhead) transformer_encoder = TransformerEncoder(encoder_layer, num_layers=num_layers) # 对行为序列进行编码 input_tensor = torch.tensor(behavior_sequence).unsqueeze(1).float() encoded_sequence = transformer_encoder(input_tensor) print(encoded_sequence) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值