[读论文]Mamba4Rec: Towards Efficient Sequential Recommendation with Selective State Space Models

论文链接:Mamba4Rec: Towards Efficient Sequential Recommendation with Selective State Space Models

摘要

序列推荐旨在评估动态的用户偏好以及用户历史行为之间的序列依赖关系。尽管基于transformer的模型已被证明对序列推荐是有效的,但它们受到注意力算子的二次计算复杂性导致的推理效率低下的问题的困扰,特别是对于长程行为序列。受最近状态空间模型(ssm)成功的启发,本文提出Mamba4Rec,这是第一个探索选择性ssm高效序列推荐潜力的工作。基于基础的Mamba模块,即一个带有硬件感知并行算法的选择性SSM,我们结合了一系列序列建模技术,在保证推理效率的同时,进一步提升模型性能。在两个公开数据集上的实验表明,Mamba4Rec能够很好地解决效果-效率困境,在效果和效率上都优于基于RNN和基于注意力的基线。代码可以在https://github.com/chengkai-liu/Mamba4Rec上找到。

  • 关键词:序列推荐,状态空间模型

1.引言

个性化在线服务严重依赖顺序推荐系统来捕捉动态的用户偏好[15,16,25]。这些系统旨在通过有效建模用户历史行为之间的时序依赖关系来预测用户未来的交互行为。早期的神经方法采用卷积神经网络(CNNs)[23]和循环神经网络(RNNs)[10,14],它们率先将神经网络应用于顺序推荐,但面临灾难性的遗忘问题[13,19]。最近,研究人员开始引入Transformer[24]作为骨干模块,并利用自注意力机制对动态用户行为序列进行建模[11,26]。尽管这些基于注意力的方法具有显著的性能,但由于注意力算子固有的二次计算复杂性,这些方法普遍存在推理效率低下的问题,特别是对于长用户行为序列或大规模数据集

为了解决推荐性能和推理效率的两难问题,文中将状态空间模型(SSM)[5]作为序列推荐的核心算子。SSM(如S4[5]、S5[20]、Mega[17])在各种自然语言任务中被广泛用作rnn、cnn和transformer的替代品。由于递归性,它们具有固有的推理效率,同时通过结构化状态矩阵处理长程依赖关系具有强大的性能。此外,最近提出的一种SSM变体(Mamba[3])进一步引入了数据依赖的选择机制,通过高效的硬件感知设计来解决先前SSM的数据和时不变问题。这使得模型可以根据输入数据有选择地提取必要的知识,并过滤掉不相关的噪声,从而带来卓越的序列建模性能

本文提出Mamba4Rec,这是第一个探索选择性SSM高效序列推荐潜力的工作。在基本Mamba块[3]的基础上,结合并讨论了一系列技术(如位置嵌入[24]、残差连接[8]、层归一化[1]和位置前馈网络[24]),补充了系统的非线性,稳定了训练动态,从而进一步提升了序列建模能力。

本文的主要贡献如下:

  • 本文首次探索了选择性SSM在序列推荐中的潜力,解决了推荐性能和推理效率的困境。
  • 本文提出Mamba4Rec,将基本Mamba块与各种技术相结合,如层规范化和前馈网络,在不牺牲推理效率的情况下,进一步提高了顺序建模能力。
  • 在两个公开数据集上的实验表明,与基于RNN和基于注意力的基线方法相比,Mamba4Rec在有效性和效率方面均具有优越性。

2.预备知识

2.1 问题陈述

在序列推荐中:
U = { u 1 , u 2 , … , u ∣ U ∣ } \mathcal{U}=\left\{u_1, u_2, \ldots, u_{|\mathcal{U}|}\right\} U={ u1,u2,,uU}:用户集
V = { v 1 , v 2 , … , v ∣ V ∣ } \mathcal{V}=\left\{v_1, v_2, \ldots, v_{|\mathcal{V}|}\right\} V={ v1,v2,,vV}:商品集
S u = { v 1 , v 2 , … , v n u } \mathcal{S_u}=\left\{v_1, v_2, \ldots, v_{\mathcal{n_u}}\right\} Su={ v1,v2,,vnu}:用户 u u u对应的按时间顺序排列的交互序列,其中

### MAMba-YOLO 中 `selective_scan_cuda` 模块未找到错误解决方案 当遇到 `ModuleNotFoundError: No module named 'selective_scan_cuda'` 错误时,这通常意味着 Python 无法定位到所需的模块文件。此问题可能由多种原因引起。 #### 可能的原因分析 1. **依赖库缺失** 如果项目依赖于特定版本的 CUDA 或其他 GPU 库,则这些库必须正确安装并配置环境变量[^3]。 2. **编译失败** 编译过程中可能出现错误,导致生成的目标文件不存在或损坏。例如,在构建轮子时可能会遇到如下错误:“Building wheel for selective_scan (setup.py) ... error error: subprocess-exited-with-error”[^2]。 3. **路径设置不当** 若自定义扩展位于非标准位置,需确保该目录已加入 PYTHONPATH 环境变量中以便被识别。 4. **Python 版本兼容性** 不同版本间的 API 更改可能导致某些功能不再可用;确认所使用的 Python 解释器与预期一致也很重要。 #### 推荐解决措施 针对上述情况,建议采取以下行动: - 安装必要的开发工具链以及对应的运行时库; - 尝试重新执行 setup 脚本来完成包及其所有依赖项的新一轮安装过程: ```bash pip install --no-cache-dir . ``` - 对于源码分发形式发布的软件包来说,可以尝试直接调用 setuptools 来手动触发 build 命令: ```bash python setup.py develop ``` - 验证当前工作区内的 `.pth` 文件是否包含有效的条目,并且指向正确的站点包集合。 - 使用虚拟环境隔离不同项目的依赖关系冲突风险,从而减少潜在干扰因素的影响范围。 如果以上操作仍未能解决问题,考虑查看官方文档获取更多指导信息或者向社区寻求帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值