【论文阅读】A Diffusion model for POI recommendation

论文出处:ACM Transactions on Information Systems (TOIS)  SCI一区  CCF-A期刊

论文地址:[2304.07041] A Diffusion model for POI recommendation

论文代码:Yifang-Qin/Diff-POI: The official PyTorch implementation of Diff-POI.

目录

摘要

研究背景与重要性

现有方法及其局限性

核心问题与挑战 

扩散模型的潜力

本文解决方案(Diff-POI) 

贡献总结 

相关工作

兴趣点推荐

图神经网络 

扩散模型 

准备工作 

问题定义

时空图构造

扩散理论 

方法 

时空序列图编码器

地理编码器

扩散采样模块

预测与输出 

实验 

实验设置

 总体性能

消融实验 

 案例研究

效率分析(附录)

结论

摘要

下一个兴趣点(POI)推荐是基于位置的服务中的一项关键任务,旨在为用户的下一个目的地提供个性化建议。先前关于POI推荐的研究主要集中在用户空间偏好的建模上。然而,现有的利用空间信息的工作仅基于用户以前访问过的位置的汇总,这阻碍了模型在新区域推荐poi。在许多情况下,基于位置的方法的这种特性会损害模型的性能。此外,将顺序信息整合到用户的空间偏好中仍然是一个挑战。在本文中,我们提出了diffi-POI:一个基于扩散的模型,该模型对用户的空间偏好进行采样,以推荐下一个POI。受扩散算法在分布采样中广泛应用的启发,diffi-poi采用两个定制的图编码模块对用户的访问序列和空间特征进行编码,然后采用基于扩散的采样策略来探索用户的空间访问趋势。我们利用扩散过程及其反向形式从后验分布中抽样,并优化相应的分数函数。我们设计了一个联合训练和推理框架来优化和评估所提出的Diff-POI。在四个真实世界POI推荐数据集上进行的大量实验表明,我们的diffi-POI优于最先进的基线方法。对Diff-POI的进一步消融和参数研究揭示了所提出的基于扩散的采样策略的功能性和有效性,以解决现有方法的局限性。

研究背景与重要性

这部分介绍了基于位置的社交网络(LBSN)的兴起(如Yelp、Foursquare),以及POI推荐系统的核心目标:通过用户历史行为(签到记录)提供个性化的位置推荐,缓解信息过载问题。POI推荐与传统推荐的区别在于需建模地理特征(如POI位置对用户行为的影响)。

现有方法及其局限性

  • 传统方法:基于马尔可夫链、矩阵分解(MF)或RNN/LSTM的序列建模(如ST-RNN)。

  • 图神经网络方法:利用GNN建模POI间的转移关系(如STGCN、GSTN)。

  • 现有方法多依赖历史位置聚合,导致推荐偏向用户熟悉区域,难以满足探索新区域的需求(如游客或偶尔探索的用户)。

核心问题与挑战 

  • 保守型用户(User 1):常访问固定区域(如家庭-工作地),传统聚合方法有效。

  • 探索型用户(User 2/3):倾向于访问新区域,但现有方法无法捕捉这种动态偏好。

  • 关键挑战:如何建模从历史分布未来偏好分布的复杂映射关系?

扩散模型的潜力

  • 扩散模型在图像生成、NLP等领域已证明能建模复杂分布转换(如DDPM、Score-SDE)。

  • 其核心优势:通过前向-反向扩散过程分解分布间的转移路径,适合解决POI推荐中“历史→未来”的分布映射问题。

本文解决方案(Diff-POI) 

Diff-POI的三大创新:

  1. 时空图编码器:通过注意力机制融合用户访问序列的时空间隔(时间差、距离差)。

  2. 扩散采样模块:用反向SDE从用户特定后验分布中采样空间偏好,生成个性化位置原型。

  3. 联合优化框架:结合交叉熵损失和Fisher损失,优化推荐和采样过程。

贡献总结 

  1. 提出首个基于扩散模型的POI推荐框架。

  2. 设计时空图编码器,增强序列建模能力。

  3. 通过扩散采样解决新区域推荐问题。

  4. 在4个数据集上验证有效性(Recall@10提升最高12%)。

相关工作

兴趣点推荐

  • 早期方法:基于矩阵分解(MF)和马尔可夫链(如因子分解马尔可夫链),但仅能捕捉浅层交互。

  • 深度学习方法

    • RNN/LSTM变体(如ST-RNN、STGN)通过时空门控机制改进序列建模。

    • 注意力机制(如ARNN)和Transformer架构(如GeoSAN、STAN)进一步融合地理坐标和相对时空信息。

  • 核心问题:现有方法仍依赖历史访问的聚合表示,难以推荐新区域。

图神经网络 

  • 通用推荐框架:如LightGCN(简化图卷积)、DGCF(解耦表征)和SR-GNN(序列图建模)。

  • POI专用方法

    • STGCN:利用关系图卷积建模用户-POI多元关系。

    • GSTN:构建转移图和距离图,显式编码POI空间关系。

    • DisenPOI:通过对比学习解耦地理和序列影响。

  • 局限性:基于距离图的嵌入学习会导致“邻近偏好”,抑制探索性推荐。

扩散模型 

  • 理论基础

    • DDPM和Score-SDE框架将扩散过程视为随机微分方程的求解。

    • 反向过程等价于基于分数函数的Langevin采样。

  • 跨领域应用

    • 图像生成(Diffusion-LM)、文本生成(DiffWave)、图生成(DiGress)。

    • 在推荐系统中的潜力尚未充分探索,尤其是对分布迁移的建模能力。

  • 本文切入点:首次将扩散过程用于POI推荐中的用户空间偏好采样。

准备工作 

问题定义

  • 设POI集合为 $\mathcal{L}={l_1,l_2,...,l_{|\mathcal{L}|}}$,用户集合为 $\mathcal{U}={u_1,u_2,...,u_{|\mathcal{U}|}}$

  • 对用户u,给定其历史轨迹 $H(u)={(l_1^u,t_1^u),(l_2^u,t_2^u),...,(l_n^u,t_n^u)}$(含POI和访问时间戳),目标是预测下一个POI $l_{n+1}^u$

  • 关键特征:POI间的地理距离矩阵 $A_d \in \mathbb{R}^{|\mathcal{L}|\times |\mathcal{L}|}$,其中 $A_d(i,j)=\text{haversine}(l_i,l_j)$(基于半正矢公式计算)。

时空图构造

为建模时空关系,论文定义两类图结构:

  1. 转移图(Transition Graph) $\mathcal{G}_u=(\mathcal{V}_u,\mathcal{E}_u)$:节点 $\mathcal{V}u$为用户 $u$访问过的POI,边 $e=\langle l_i^u,l{i+1}^u \rangle \in \mathcal{E}_u$ 表示连续访问关系。

  2. 距离图(Distance Graph) $\mathcal{G}_d=(\mathcal{V}_d,\mathcal{E}_d,A_d)$:节点 $\mathcal{V}_d=\mathcal{L}$ 为所有POI,边 $(l_i,l_j) \in \mathcal{E}_d$ 表示两地距离小于阈值(如1km),边权 $A_d$ 为实际地理距离。

扩散理论 

基于随机微分方程(SDE)的扩散过程形式化描述:

  1. 前向扩散(加噪过程):离散形式为马尔可夫链,条件概率定义为:

    连续形式对应Ito SDE:

  2. 反向扩散(采样过程):
    反向SDE形式为:

    其中 $\nabla_x \log p_t(x)$ 为分数函数(score function),通过神经网络$s_\theta(x)$估计。

方法 

如图所示,Diff-POI由三个关键模块组成,分别是:(A)一个时空序列图编码器,它将连续访问之间的距离和时间间隔与顺序图编码结合在一起;(B)一个基于距离的POI图编码器,它对距离图进行图卷积,从而产生每个POI的位置嵌入;(C)一个上下文驱动的扩散模块,它获得用户特定的位置原型,然后采用基于扩散的采样策略,对用户的空间偏好进行采样。

时空序列图编码器

  • 输入:用户访问序列图(节点 = 访问过的POI,边 = 连续访问关系(如 POI₁ → POI₂)边特征 = 时间差和地理距离) + 时空间隔

  • 操作

    1. 通过嵌入层将离散的时空间隔转为向量

    2. 双向注意力聚合(同时考虑前驱和后继POI的影响)

    3. 用自注意力生成最终用户表征 $x_u$

  • 输出:用户嵌入向量( $d$ 维)

地理编码器

  • 输入:全量POI距离图(节点 = 所有POI,边 = POI间距离 < 阈值(如1km),边权重 = 实际距离的指数衰减值 )

  • 操作

    1. 多层图卷积(GCN)传播地理信息

    2. 跨层均值池化

  • 输出:每个POI的地理嵌入$e_i^g$

扩散采样模块

  • 输入:用户嵌入$x_u$ + 历史POI地理嵌入

  • 操作

    1. 前向过程:对真实目标POI的地理嵌入逐步加噪

    2. 反向过程

      • 用MLP网络预测噪声(条件注入$x_u$

      • 通过SDE求解器从噪声中采样空间偏好 $v_u(0)$

  • 输出:用户未来可能偏好的空间位置向量($d$维)

预测与输出 

  • 组合预测
    推荐分数 = α*(用户偏好·POI特征) + (1-α)*(空间偏好·POI地理特征)

组成部分反映信息是否用户相关是否空间相关数据来源模块
用户偏好$x_u$时序行为规律✔️时空图编码器
POI特征 $e_i^l$静态属性嵌入层
空间偏好 $v_u(0)$未来区域倾向✔️✔️扩散采样模块
POI地理特征 $e_i^g$空间上下文✔️地理编码器
  • 最终输出
    对所有候选POI计算分数,输出Top-K推荐列表
    (例如:[博物馆:0.8, 公园:0.7, 餐厅:0.6]

  • 当α→1:推荐完全依赖用户历史行为(适合保守用户)
    推荐结果 ≈ 与历史访问相似的POI

  • 当α→0:推荐侧重空间偏好(适合探索型用户)
    推荐结果 ≈ 符合未来空间倾向的新POI

  • 实验值:论文通过网格搜索确定α=0.5最优(平衡两种信号)

实验 

实验设置

使用4个真实LBSN数据集,统计信息如下:

数据集用户数POI数签到数平均访问长度
Gowalla10,16224,237456K44.95
Foursquare-SIN2,3215,596194K83.63
Foursquare-TKY2,29315,177494K215.79
Foursquare-NYC1,0839,989179K165.71

预处理

  • 5-core过滤(用户和POI至少5次访问)

  • 按时间戳划分训练/验证/测试集(8:1:1)

 对比方法

  • 传统方法:MF、GRU4Rec

  • 图推荐方法:LightGCN、DGCF、SR-GNN

  • POI专用方法:GeoIE、LSTPM、STAN

  • SOTA方法:SGRec、DRAN

评估指标

  • Recall@K:真实POI出现在Top-K的比例

  • NDCG@K:考虑排序位置的加权得分

  • 测试协议:全量POI候选(非采样评估)

 总体性能

核心结论

  1. 扩散采样有效性:Diff-POI在所有数据集上显著优于基线(p<0.05)

  2. 探索能力验证:在用户历史访问稀疏区域(如TKY数据集)提升最显著

  3. 时空建模优势:比纯序列模型(LSTPM)和纯图模型(SGRec)更全面

消融实验 

组件分析

变体名称修改内容Recall@10下降幅度
W/O-Sampling直接使用初始原型$\hat{v}_u$3.3%
W/O-Condition去除用户条件$x_u$2.1%
W/O-GeoEncoder替换为随机初始化的POI嵌入6.7%

 超参数影响

  • α值(序列vs空间权重):
    $\alpha=0.5$时达到最优(平衡历史行为与探索需求)

  • 扩散步数
    超过100步后收益递减(验证VP-SDE的高效性)

 案例研究

用户分组测试

结果

  • 对探索用户,Diff-POI比最佳基线提升14.2%

  • 对保守用户,性能与DRAN相当(差异<1%)

采样过程可视化

用户A(保守型):采样轨迹快速收敛到历史访问区域
用户C(探索型):采样轨迹逐步偏离历史区域,指向新商圈

推荐示例对比

用户类型传统方法推荐结果Diff-POI新增推荐
游客酒店周边1km内餐厅3km外热门景点
上班族常去咖啡馆的同品牌分店邻近新开的共享办公空间

效率分析(附录)

  • 训练时间:比DRAN长20%(主要开销在扩散采样)

  • 推理速度:单用户采样耗时<10ms(满足实时推荐需求)

结论 

本文提出了一种新的基于图的POI推荐模型,即Diff-POI,利用时空过渡图对用户的位置偏好进行建模。Diff-POI配备了一个定制的序列图编码器,可以描述用户的时空轨迹,然后采用基于扩散的采样策略对用户的位置偏好进行采样。在四个真实数据集上的综合实验证明了所提出的Diff-POI框架的有效性及其优于现有最先进的基线模型。消融和案例研究进一步提供了一个直观的观点,即采样过程如何描述用户隐藏的位置偏好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90172.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust实现FasterR-CNN目标检测全流程

使用 Rust 和 FasterR-CNN 进行目标检测 FasterR-CNN 是目标检测领域广泛使用的深度学习模型。Rust 生态中可以通过 tch-rs(Torch 绑定)调用预训练的 PyTorch 模型实现。以下为完整实现步骤: 环境准备 安装 Rust 和必要的依赖: cargo add tch cargo add anyhow # 错误…

Github 2025-07-03Go开源项目日报Top10

根据Github Trendings的统计,今日(2025-07-03统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10JavaScript项目2Go编程语言:构建简单、可靠和高效的软件 创建周期:3474 天开发语言:Go协议类型:BSD 3-Clause “New” or “Revise…

XML Schema 安装使用教程

一、XML Schema 简介 XML Schema&#xff08;XSD&#xff0c;全称 XML Schema Definition&#xff09;是用于定义 XML 文档结构、数据类型和数据约束的标准方式。它比 DTD 更加强大&#xff0c;支持数据类型、默认值、命名空间等&#xff0c;是企业级 XML 应用推荐的验证方式。…

【字节跳动】数据挖掘面试题0008:计算西瓜视频内容好评率

文章大纲题目描述题目描述 西瓜视频近期开展了”2020百大人气创作者”优质内容扶持项目&#xff0c;鼓励用户产出优质的视频内容。 现需要统计2020年11月01日至2020年11月30日期间创作的视频中&#xff0c; “科技”大类下“数码测评"子类的视频好评率&#xff08;好评率好…

Linux 进程控制:全面深入剖析进程创建、终止、替换与等待

文章目录引言一、进程创建&#xff1a;fork()系统调用的奥秘1.1 fork()的基本原理1.2 代码示例与解读1.3 写时复制&#xff08;COW&#xff09;优化二、进程终止&#xff1a;exit()与_exit()的抉择2.1 exit()和_exit()的区别2.2 代码示例与分析三、进程替换&#xff1a;exec()函…

PJSIP 中的 TCP 传输配置指南

PJSIP 支持通过 TCP 传输 SIP 消息&#xff0c;相比 UDP 提供了更可靠的传输机制。以下是关于在 PJSIP 中使用 TCP 的详细指南。1. 创建 TCP 传输基本 TCP 传输配置cpjsua_transport_config tcp_cfg; pjsua_transport_config_default(&tcp_cfg); tcp_cfg.port 5060; // SI…

小菜狗的云计算之旅,今天学习MySQL数据库基础知识及操作

目录 一、概述 数据库概念 数据库的类型 关系型数据库模型 关系数据库相关概念 二、安装 1、mariadb安装 2、mysql安装 3、启动并开机自启 4、本地连接&#xff08;本地登录&#xff09; 三、mysql数据库配置与命令 yum安装后生成的目录 mysql服务器的启动脚本 数…

为什么是直接在**原型(prototype)上**添加函数

这是一个非常经典、核心的 JavaScript 面向对象编程问题&#xff1a;> 为什么是直接在**原型&#xff08;prototype&#xff09;上**添加函数&#xff0c;而不是在类/构造函数内部直接添加&#xff1f;你提到的代码中&#xff1a;javascript function TopSearchComponent() …

深入理解 classnames:React 动态类名管理的最佳实践

在现代前端开发中&#xff0c;我们经常需要根据组件的状态、属性或用户交互来动态切换 CSS 类名。虽然 JavaScript 提供了多种方式来处理字符串拼接&#xff0c;但随着应用复杂性的增加&#xff0c;传统的类名管理方式很快就会变得混乱不堪。这时&#xff0c;classnames 库就像…

C++系列(七):深度探索C++内存 --- 分区、堆栈、new/delete与高效编程实践

引言 程序运行的本质是对数据的处理&#xff0c;而内存则是程序执行的核心舞台。理解内存的物理与逻辑分区&#xff0c;是掌握程序底层行为、编写高效可靠代码的关键基石。内存并非混沌一片&#xff0c;而是被严格划分为代码区、全局区、栈区和堆区。每个区域拥有独特的生命周…

微信小程序71~80

1.总结小程序生命周期 小程序冷启动&#xff0c;钩子函数执行的顺序保留当前页面&#xff0c;进入下一个页面&#xff0c;钩子函数执行的顺序销毁当前页面&#xff0c;进入下一个页面&#xff0c;钩子函数执行的顺序小程序热启动&#xff0c;钩子函数执行的顺序 2.使用Componen…

[Pytest][Part 3]检测python package状态

目录 实现需求1&#xff1a; 检查python package状态——pkg_resource hook实现自动检测包状态 conftest.py hook钩子函数 Part1: https://blog.csdn.net/x1987200567/article/details/144915315?spm1001.2014.3001.5501 从这里开始逐个实现Part1中的需求 实现需求1&a…

自定义时间范围选择组件使用教程(基于 Vue 3 + Element Plus)

&#x1f553; 自定义时间范围选择组件使用教程&#xff08;基于 Vue 3 Element Plus&#xff09;✅ 一个灵活实用的时间范围选择器&#xff0c;支持开始时间、结束时间、快捷时间选项、本地双向绑定、插槽扩展等功能。–&#x1f4d8; 一、功能介绍 该组件基于 Element Plus …

YOLOv8 模型转换 ONNX 后 C# 调用异常:一个参数引发的跨平台适配难题

一、问题背景&#xff1a;从 Python 训练到 C# 部署的跨平台需求 作为一名 C# 开发者&#xff0c;我在完成 YOLOv8 模型训练&#xff08;使用 Ultralytics 官方框架&#xff0c;训练数据为自定义目标检测数据集&#xff0c;输入尺寸 640x640&#xff0c;训练轮次 100 轮&#…

Apache Cloudberry 亮相 2025 IvorySQL 生态大会暨 PostgreSQL 高峰论坛

6 月 27 日至 28 日&#xff0c;IvorySQL 2025 生态大会暨 PostgreSQL 高峰论坛在泉城济南顺利召开。本届大会由 IvorySQL 开源数据库社区主办、瀚高基础软件股份有限公司承办&#xff0c;吸引了来自国内外的数据库技术专家、开发者与开源爱好者齐聚一堂&#xff0c;聚焦数据库…

CMake之CMakeLists.txt语法规则

本文主要参考正点原子的应用开发手册&#xff0c;仅作为本人学习笔记使用。 目录 cmake 的使用方法其实还是非常简单的&#xff0c;重点在于编写 CMakeLists.txt&#xff0c;CMakeLists.txt 的语法规则也简单&#xff0c;并没有 Makefile的语法规则那么复杂难以理解&#xff01…

Mysql专题复习

重点内容&#xff1a;1. Mysql架构&#xff1a;客户端 Server层 存储引擎2. 索引数据结构&#xff1a;B树4. 索引优化&#xff1a;覆盖索引、排序、JOIN、分页&#xff1b; COUNT; 索引下推&#xff1b;单/双路排序5. 数据库事务&#xff1b; 锁&#xff1b;隔离级别&#xff…

CLIP的tokenizer详解

一、bytes_to_unicodedef bytes_to_unicode():"""Returns list of utf-8 byte and a corresponding list of unicode strings.The reversible bpe codes work on unicode strings.This means you need a large # of unicode characters in your vocab if you wa…

【如何判断Linux系统是Ubuntu还是CentOS】

要确定您的操作系统是 Ubuntu 还是 CentOS&#xff0c;可以通过以下方法快速检查&#xff1a; 方法 1&#xff1a;通过终端命令&#xff08;推荐&#xff09; 在终端中执行以下命令之一&#xff1a; 查看 /etc/os-release 文件 cat /etc/os-releaseUbuntu 特征&#xff1a;显示…

RISCV Linux 虚拟内存精讲系列二 -- Linux 入口 head.S

通过 Linux 的构建系统&#xff0c;即 Linux 源代码的根目录下的 Makefile&#xff0c;能够找到 vmlinux 的链接文件&#xff0c;从而能够查看其入口代码 head.S:_start&#xff0c; 如下&#xff1a; Linux 构建系统主Makefile: vmlinux.lds: head.S: 找到该入口后&#xff0c…