Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【论文阅读】Hierarchical multi-task graph recurrent network for next POI recommendation

【论文阅读】Hierarchical multi-task graph recurrent network for next POI recommendation

作者头像
EmoryHuang
发布于 2022-10-27 12:42:44
发布于 2022-10-27 12:42:44
1.1K0
举报
文章被收录于专栏:EmoryHuang's BlogEmoryHuang's Blog

【论文阅读】Hierarchical multi-task graph recurrent network for next POI recommendation

Metadata

authors:: Nicholas Lim, Bryan Hooi, See-Kiong Ng, Yong Liang Goh, Renrong Weng, Rui Tan container:: Proceedings of the 45th international ACM SIGIR conference on research and development in information retrieval year:: 2021 DOI:: 10.1145/3477495.3531989 rating:: ⭐⭐⭐⭐ share:: false comment:: 框架为 LSTM,在隐藏层加入全局时空信息,以多任务预测的形式同时预测 POI 以及 POI 所在区域,并通过区域对 POI 预测进行指导,建立层次结构预测 POI。


前言

SIGIR 2022:Hierarchical multi-task graph recurrent network for next POI recommendation

问题描述

OverView

在以前的工作中,用户-POI 矩阵的高度稀疏性,使得学习变得困难,预测的准确率受到影响。

用户通常只访问数据集中少量的 POI。

论文将公开的地理位置编码系统Geohash对 POI 位置进行编码,G@P将其映射到各自的网格单元,可以发现,随着P的减小,稀疏度(矩阵中 0 的占比)也随之减小,另外一方面,从一些区域预测(预测下一个 POI 所在的区域)任务上看,随着P的减小,准确率不断提高。

因此,论文希望通过学习下一个 POI 区域的分布,并以此更好地进行下一个 POI 的推荐任务。提出 Hierarchical Multi-Task Graph Recurrent Network (HMT-GRN),以多任务的形式学习用户-POI 矩阵和用户-G@P矩阵,并预测下一个 POI 以及G@PG@PG@P区域,使用 Hierarchical Beam Search (HBS)进行分层搜索,减小搜索空间,更好地预测下一个 POI。

此外,论文通过 Graph Recurrent Network (GRN)学习序列之间的依赖关系以及全局的 POI-POI 时空关系。

主要贡献如下:

  1. 提出了 HMT-GRN 模型学习用户-POI 矩阵和用户-G@PG@PG@P矩阵,缓解数据的稀疏性问题;
  2. 使用 HBS 作为搜索空间缩减方法,提出选择层以平衡个性化与推荐之间的关系,GRN 模型学习序列之间的依赖关系以及全局的 POI-POI 时空关系。

HMT-GRN

模型架构如下图所示:

HMT-RN

Learning next POI and region distributions

就像前面提到的,论文的主要目的在于学习稀疏矩阵,用户-POI 矩阵和用户-G@P矩阵,以此更好地预测下一个 POI。因此论文在预测 POI 的基础上,同时进行 POI 所在区域G@P的预测,因此共包括 6 个任务TK={G@2,G@3,G@4,G@5,G@6,POI}。

Training

对于每个任务tk∈{G@2,G@3,G@4,G@5,G@6,POI},使用交叉熵损失函数:

Hierarchical Beam Search

虽然预测的事件不是独立的,但我们使用多任务学习框架,通过独立建模分布来有效地缓解稀疏性问题。

能大概理解为什么要弄这么一个选择层,但是用户本身就很少访问未访问的 POI,是不是大部分走的都是 ①?而 ② 做了那么多工作是不是大部分其实就不进行?虽然看后面的实验部分确实是加了效果更好。

Graph Recurrent Network

接下来,论文提出了 GRN 模块来替换前面 HMT-RN 模型中的 LSTM,增加对全局 POI-POI 关系的学习。

在现有的工作中,递归模型(如 LSTM)被证明在学习每个用户 POI 序列的顺序依赖关系方面是有效的,然而,与图神经网络(例如,GAT)相比,它并没有直接学习全局 POI-POI 关系。另一方面 GAT 也无法学习到序列之间的依赖关系。

因此论文通过 GRN 来学习:① 序列之间的依赖关系;② 全局 POI-POI 关系。具体来说,论文对 Dimensional GAT (DGAT)[2]进行拓展。添加(a)循环结构并(b)通过利用区域和时隙来连接时空图中的 POI 来缓解数据的稀疏性。DGAT 定义如下:

此外,为了学习全局依赖关系,对 LSTM 中的公式进行进行如下计算修改:

原始 LSTM 公式如下:

实验

Datasets

Results

Ablation Study

Importance of proposed tasks
Search space reduction
Selectivity layer

Case Study

最后论文举了一个例子来说明模型的优点,其中图中 ✅ 位置和 ❌ 位置分别为使用 HMT-GRN 模型以及直接使用稀疏 POI 矩阵得到的 POI 预测,虽然类型正确但是区域错误。

总结

总结一下,论文主要是通过多任务的形式,学习用户-POI 矩阵和用户-G@PG@PG@P矩阵,预测下一个 POI 以及 POI 所在区域,并根据预测区域对 POI 进行指导;另一方面,具体模型中,还是通过在 LSTM 中隐藏层更新过程中加入全局时间以及空间信息。

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
菜鸟用Python操作MongoDB,看这一篇就够了
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。在这一节中,我们就来看看Python 3下MongoDB的存储操作。
IT派
2018/07/30
1.9K0
菜鸟用Python操作MongoDB,看这一篇就够了
pymongo:Python下 MongoDB 的存储操作
pymongo 3.x版本中,insert()方法官方已不推荐使用,推荐使用insert_one()和insert_many()将插入单条和多条记录分开。
luckpunk
2023/09/29
4540
Python操作MongoDB看这一篇就够了
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。在这一节中,我们就来看看Python 3下MongoDB的存储操作。 1. 准备工作 在开始之前,请确保已经安装好了MongoDB并启动了其服务,并且安装好了Python的PyMongo库。 2. 连接MongoDB 连接MongoDB时,我们需要使用PyMongo库里面的MongoClient。一般来说,传入MongoDB的
崔庆才
2018/06/25
23.1K0
Python爬虫之非关系型数据库存储#5
NoSQL,全称 Not Only SQL,意为不仅仅是 SQL,泛指非关系型数据库。NoSQL 是基于键值对的,而且不需要经过 SQL 层的解析,数据之间没有耦合性,性能非常高。
仲君Johnny
2024/02/12
2630
爬虫——实战完整版
mongodb操作 1 import pymongo 2 3 #连接数据库实例(连接数据库)---》获取相应数据库---》获取相应collection集合(表) 4 client = pymongo.MongoClient(host='localhost',port=27017) 5 6 db = client.test #也可用字典形式操作,如下 7 # db = client["test"] 8 9 collection = db.students #也可用字典
py3study
2020/01/19
1.3K0
Python小姿势 - Python操作MongoDB数据库
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
不吃西红柿
2023/04/28
4750
Python操作MongoDB
mongod --auth --dbpath="/usr/local/mongodb/data" --logpath="/usr/local/mongodb/logs/mongod.log" --install #创建admin数据表 use admin #创建管理用户的用户 db.createUser( { user: "root", pwd: "123456", roles: [ { role: "use
前端小鑫同学
2022/12/24
3080
数据库MongoDB
  MongoDB是由c++语言编写的,是一个基于分布式文件存储的开源数据库系统,在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB旨在为web应用提供扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数据结构由键值对(key=value)组成。MongoDB文档类似于json对象。字段值可以包含其他文档,数组及文档数组。在MongoDB数据库中,集合就相当于mysql中的表,文档将相当于mysql中记录。
py3study
2020/01/22
3.3K0
Python 基于pymongo操作Mongodb学习总结
如果连接用户名和密码包含诸如':', '/', '+' 及'@'保留字符,则使用前应该先进行编码,如下:
授客
2024/01/29
5440
【Python全栈100天学习笔记】Day40 MongoDB安装配置及应用
MongoDB是2009年问世的一个面向文档的数据库管理系统,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。虽然在划分类别的时候后,MongoDB被认为是NoSQL的产品,但是它更像一个介于关系数据库和非关系数据库之间的产品,在非关系数据库中它功能最丰富,最像关系数据库。
天道Vax的时间宝藏
2022/04/02
4660
Python数据持久化-MongoDB篇
2018年7月6日笔记 下文中的操作都是使用python操作mongoDB,所以前提是必须安装python和mongoDB。
潇洒坤
2018/09/10
7860
Python数据持久化-MongoDB篇
pymongo的简单使用
pymongo的使用 首先安装: pip install pymongo 安装好了使用 import pymongo # 链接mongodb,得到一个mongoclient的客户端对象 client = pymongo.MongoClient() # 指定数据库 db = client.test db = client["test"] # 这两种方式都可以指定数据库,如果没有该数据库的话,会自行创建 # 如果了解面向对象的一些魔法(内置)方法的话,大概能够知道client对应的类,肯定重写__get
py3study
2020/01/16
8430
MongoDB与python交互1.Pymongo2.安装3.使用4.mongoDB其它操作5.Mongodb与python交互6.完成命令行项目:学生信息管理(基于Python2.7)
PyMongo是Mongodb的Python接口开发包,是使用python和Mongodb的推荐方式。
Python攻城狮
2018/08/23
1.1K0
MongoDB与python交互1.Pymongo2.安装3.使用4.mongoDB其它操作5.Mongodb与python交互6.完成命令行项目:学生信息管理(基于Python2.7)
初窥Python(一)——使用pymon
Python 可以使用 pymongo 库方便的操作 MongoDB 。MongoDB 不同于关系型结构的三层结构——database--> table --> record,它的层级为 database -->collection --> document 。这里不重点介绍 MongoDB  用法,主要来看一下如何用 Python 使用 MongoDB。
py3study
2020/01/07
8380
使用Python操作MongoDB
使用Python操作MongoDB需要使用一个第三方库——PyMongo。安装这个库与安装Python其他的第三方库一样,使用pip安装即可:
没有故事的陈师傅
2020/04/10
2.6K0
使用Python操作MongoDB
用Python操作MongoDB,看这一篇就够了
MongoDB 是一个基于分布式存储的数据库,由 C++ 语言编写的NoSQL非关系数据库。非关系型数据库NoSQL,即Not Only SQL,意即“不仅仅是SQL”,通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。
吾非同
2021/06/01
2.8K0
用Python操作MongoDB,看这一篇就够了
python必掌握库:pymongo库的心你懂吗?
工欲善其事必先利其器,用pymongo库之前,大家需首先对MongoDB数据库的增删改查操作有一些基础方法的了解。
用户1564362
2019/10/15
1.6K0
python必掌握库:pymongo库的心你懂吗?
通过Shell操作MongoDB
使用MongoDB可以非常方便的配置数据复制,通过冗余数据来实现数据的高可用以及灾难恢复,也可以通过数据分片来应对数据量迅速增长的需求。关于MongoDB更多的操作可以查阅官方文档 ,同时推荐大家阅读Kristina Chodorow写的《MongoDB权威指南》。
用户8442333
2021/05/21
4920
Pymongo:update更新数据
导读 Pymongo update用法。 1、现在集合里有3条数据 import pymongo mongo_client = pymongo.MongoClient( host="192.168.0.112", port=27017, username="admin", password="123456" ) mongo_db = mongo_client["db1"] # 读取数据 res = mongo_db.chat.find() for i in res: print(i) #
新码农
2020/12/21
7.9K0
Pymongo:update更新数据
MongoDB教程(十):Python集成mongoDB
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
用户11147438
2024/07/20
2690
推荐阅读
相关推荐
菜鸟用Python操作MongoDB,看这一篇就够了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档