工业解密:百度地图背后的路线时长预估模型!

星标/置顶小屋,带你解锁

最萌最前沿的NLP、搜索与推荐技术

编 | YY


无论你是苦逼学生(公交地铁狗)、职场萌新(打车狗)还是有钱大佬(有车一族),只要站在了北上广深的土地上,就不可避免的每天要跟堵车和出行时间battle。

比如……

  • 骑车5分钟,公交半小时(说的就是后厂村

  • 公交半小时,开车一小时(好想去蹭公交专线QAQ

  • 开车一小时,打车到天亮(没车的人别去西二旗瞎逛

大城市的出行时间可以说比薛定猫的鳄都要魔幻……

但是!总有黑心老板要求你务必几点之前到公司,否则嘿嘿嘿,晚一分钟罚10块钱的那种。

当然了,还有比罚钱更残酷的事情,因此,2020年的地图类软件不仅要计算出两点之间的路线,还要尽可能精准的估计出当下的路线时长,减少出行的不确定性。路线时长预估也成为了当下不仅刚需,且非常有挑战性的算法命题。

难点

工业界的路线时长预估的挑战主要来源于以下两方面:

  1. 路况预估的复杂性:虽然未来路况和历史路况强相关,但实际情况中,路况往往受突发事件影响。此外,不少现有的方法使用时空图网络(spatial temporal graph neural networks, STGNNs)分别对时间和空间建模,却忽视了其中的关联性,导致了信息有所损失。

  2. 路线的上下文信息:路段有多种组合方式,路线中某个路段在不同的上下游下的通行时长会有差异。比如说,同等距离下,车辆转弯花费的时间通常比直行长。一些现有的方法使用端到端的方式,预估路线的通行时长。可是这些方法通常都是用序列化的方式建模,性能效率较难满足线上超高并发cc要求。

工业前沿

今天跟大家分享一下百度在数据挖掘顶级会议 KDD2020 上发表的一篇路线时长预估的工作——《ConSTGAT: Contextual Spatial-Temporal Graph Attention Network for Travel Time Estimation at Baidu Maps》。

论文提出了一种叫做ConSTGAT的模型,实验表明可以有效提升路线时长预测的准确性,并显著减小了预测任务所需的计算量。作为工业级的解决方案,ConSTGAT已经部署到百度的通行时长预估服务中,每天成功响应数百亿次ETA请求。

▲图1 百度地图路线时长预估示例

总得来说,针对时空历史路况信息,ConSTGAT设计了新的 三维时空图注意力网络 (3D Graph Attention Network, 3DGAT),它能够在建模的同时兼顾时间与空间的历史路况的关联性;在处理路线上下文信息的方面,则使用了卷积结构提取路线上所有路段的局部上下文信息,并使用多任务学习同时学习路线和路段的通行时长。

ConSTGAT框架

ConSTGAT模型的输入包括三个部分:路线(route),背景信息(background),和历史路况(historical traffic conditions)。其中,路线由多个路段组成,可以用路段的序列表示;背景信息指代出发时间等信息;历史路况则是路网中相关的路段的历史路况信息。

网络由三个核心模块组成,包括:

  • 上下文信息模块 (Contextual Information):以路段序列作为输入,用于提取路段在路线中的上下文信息;

  • 路况预测模块 (Traffic Prediction):以上下文信息,背景信息,和历史路况信息作为输入,使用三维时空图注意力网络建模对历史路况建模,预估未来的路况;

  • 预估整合模块 (Integration):使用多目标同时学习路段时长与路线时长。

▲图2 ConSTGAT框架

其中,路况预测模块用于路况预测,而上下文信息模块和预估整合模块用于路线上下文建模。

路况预测 (Traffic Prediction)

现有的许多工作利用时空图网络来解决路况预测问题。时空图网络可以看作图网络的一种特例,直接建模历史路况的时空信息。然而,现有的时空图网络通常将时间信息和空间信息分开独立看待,如先通过普通图网络建模空间信息,再通过序列结构建模时间信息,导致时空之间关联性有所损失。新的时空图网络3DGAT,可以同时建模时间和空间的联合关系

▲图3 3DGAT和传统时空图网络比较
(红圈为目标路段,黑圈为邻居路段。每一列表示某个历史时刻目标路段和邻居路段的路况)

假设有目标路段和它的邻居路段-,这些路段在不同时刻的历史路况、路段自身的特征信息、路段的历史时间信息可以分别用三个矩阵表示,其中矩阵的每一行对应一个路段的信息,最终这三个矩阵合并成一个矩阵,并重塑成一个三阶的时空张量。

▲图4 3DGAT对历史路况的时空建模过程
为出发时刻,为历史时刻数)

和经典的注意力机制类似,ConSTGAT将时空张量中的向量同时作为注意力机制中的keys 和values ,将上下文信息和背景信息作为query 。特别地,文中提出了一种新的注意力机制3D-attention,捕捉query和keys/values之间的关系。公式如下:

上下文信息 (Contextual Information)

上下文信息模块和预估整合模块负责利用路线的上下文信息,结构如图5所示。

▲图5 上下文信息建模
  • 上下文信息模块:通过使用卷积层抽取路段(link)在路线中的局部的上下文信息。某个路段和它的上游路段、下游路段看作一个整体,也就是一条子路(sub-path) 编码。通过这样的方式,路段之间的夹角以及主路和辅路之间的关联等上下文关系可以被利用,作为其他模块的输入。

  • 整合预测模块:使用多任务学习同时预估路段通行时长(link travel time)与路线通行时长(route travel time)。预估的路段通行时长相加为预估的路线通行时长。其中,使用Huber Loss作为路段的损失函数;使用相对误差作为路线的损失函数。

相比传统的端到端的方法,ConSTGAT将实时运算的任务转成预运算任务+检索任务,极大地减轻了总体运算量,因此更容易规模化。由于ConSTGAT没有使用序列化的网络结构,可以提前并行地计算并用表存储每个路段的通行时长。当有路线时长预估请求到达时,只需在表中检索对应路段的时长并加和即可。因此,这个方案可以轻松地部署在大规模真实的导航服务中。

实验

实验设定

ConSTGAT使用了通过百度地图收集的三个城市(太原,合肥和惠州)从19年07月21日到19年08月31日的路线数据。其中,前面4周数据用于模型训练,最后1周数据用于评估。评估指标采用了目前通行时长预估领域最为常用的标准:平均绝对值相对误差(MAPE),平均误差(MAE)和均方根误差(RMSE)。

整体表现

ConSTGAT与五个基线方法进行了比较:AVG是均值历史路段速度;DeepTravel是一个端到端的路线通行时间预测方法;STANN, DCRNN和 GAT+Attention都基于时空图网络,但它们都将时间和空间分开考虑。如下表所示,ConSTGAT在三个数据集的MAPE,MAE和RMSE都低于其他通行时长预估方法,表现最佳。

▲表1 ConSTGAT和基线方法的比较

模型分析

为了观察3DGAT机制是否能有效捕捉路况的时空关联行,文中分析和对比了不同场景下的注意力机制权重的热度图和历史通行流量数和通行时间的关系。图6中,颜色越深表示注意力机制权重越大,历史记录越多,或是通行速度越慢。

▲图6a 3DGAT注意力机制权重的热度图
▲图6b 历史通行流量数
▲图6c 历史通行时间中位数
图6 3DGAT在不同场景的案例分析

可以看出,3DGAT注意力机制捕捉到了一些规律,如:

  1. 下游的路段相比起其他邻居路段更重要;

  2. 历史通行记录越多的邻居路段越重要;

  3. 通行速度越慢的邻居路段越重要。

总结

这篇工作可以说兼具前沿力与工业风,论文提出的ConSTGAT模型同时在准确率和计算速度方面较现有模型获得了显著提升。其最大的创新点在于建立了时间建模与空间建模的关联性,并且有效地利用了路线的上下文信息。至于这个炫酷模型的线上表现如何,感兴趣的小伙伴打开百度地图试试叭!


文末福利

后台回复关键词【入群
加入卖萌屋NLP/IR/Rec与求职讨论群
有顶会审稿人、大厂研究员、知乎大V和妹纸
等你来撩哦~

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

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

相关文章

动态规划应用--“杨辉三角”最短路径 LeetCode 120

文章目录1. 问题描述2. DP算法代码3. LeetCode 120 三角形最小路径和1. 问题描述 对“杨辉三角"进行一些改造。每个位置的数字可以随意填写,经过某个数字只能到达下面一层相邻的两个数字。 假设你站在第一层,往下移动,我们把移动到最底…

Java多线程系列(九):CountDownLatch、Semaphore等4大并发工具类详解

之前谈过高并发编程系列:4种常用Java线程锁的特点,性能比较、使用场景 ,以及高并发编程系列:ConcurrentHashMap的实现原理(JDK1.7和JDK1.8) 今天主要介绍concurrent包的内容以及4大并发工具类。 Java并发工具包 1.并发工具类 …

快手 算法工程师 0825 笔试题

4 求解一元一次方程的解 #include <cstdio> #include <iostream> #include <string.h> #include <cstring> #include <algorithm> using namespace std; int x0,n0,xr0,nr0; int flag 0; void Adds(string a,char op) { if(flag0) {if(a…

论文笔记(Neural Collaborative Filtering)

神经协同过滤 论文链接&#xff1a;Neural Collaborative Filtering, WWW’17 原理&#xff1a;融合 GMF 和 MLP 1. 摘要 虽然最近的一些研究使用深度学习作为推荐&#xff0c;但他们主要是用深度学习来建模辅助信息&#xff0c;例如 item 的文本描述。在表示协同过滤的关键…

玩转算法第七章-二叉树与递归

二叉树与递归 二叉树的前序遍历 leetcode 104 将两个递归函数映射到max函数中去 思考题&#xff1a;leetcode 111 leetcode&#xff1a;226 扩展题&#xff1a;leetcode 100 leetcode&#xff1a;101 第一个是&#xff0c;第二个不是 leetcode 222&#xff1a; leet…

POJ 2965 开冰箱的门(回溯)

文章目录1. 题目1.1 题目链接1.2 题目大意1.3 解题思路2. 代码2.1 Accepted代码1. 题目 1.1 题目链接 http://poj.org/problem?id2965 1.2 题目大意 有一个4*4的符号矩阵&#xff08;和-&#xff09;&#xff0c;改变一个元素的符号&#xff0c;它所在的行和列的其他元素也…

论文浅尝 | 基于知识库的自然语言理解 03#

本文转载自公众号: 知识工场。罗康琦&#xff0c;上海交通大学计算机系2019届博士&#xff0c;研究方向为自然语义理解和知识图谱。2012年获得华中科技大学软件工程学士学位&#xff0c;现就职于京东数据科学实验室&#xff08;Data Science Lab&#xff09;。他曾在AAAI&#…

Java多线程系列(七):并发容器的原理,7大并发容器详解、及使用场景

之前谈过高并发编程系列&#xff1a; 高并发编程系列&#xff1a;4种常用Java线程锁的特点&#xff0c;性能比较、使用场景 高并发编程系列&#xff1a;CountDownLatch、Semaphore等4大并发工具类详解 高并发编程系列&#xff1a;4大JVM性能分析工具详解&#xff0c;及内存…

MSRA提出通用文档预训练模型LayoutLM,通往文档智能之路!

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术随着数字化进程的加快&#xff0c;文档、图像等载体的结构化分析和内容提取成为关乎企业数字化转型成败的关键一环&#xff0c;自动、精准、快速的信息处理对于生产力的提升至关重要。以商业文档为例&#xf…

tensorflow--GPU

一、查看 tensorflow 是否使用了GPU进行计算 import tensorflow as tf sess tf.Session(configtf.ConfigProto(log_device_placementTrue)) 运行程序&#xff0c;日志若包含 gpu 信息&#xff0c;则使用了 gpu。 二、使用指定GPU 方式一&#xff1a;代码&#xff1a; imp…

玩转算法之面试 第八章-递归与回溯

树形问题 leetcode&#xff1a;17 1 字符串的合法性 &#xff08;是否包括1&#xff0c;*和#号键&#xff09; 2 空字符串 3 多个解的顺序 部分源代码如下&#xff1a; 在这里插入代码片 #include<cstring>using namespace std;private:const string letterMap[1…

动态规划理论学习

文章目录1. 理论总结1.1 “一个模型”1.2 “三个特征”1.2.1 最优子结构1.2.2 无后效性1.2.3 重复子问题2. 实例剖析2.1 问题描述2.2 两种DP解题思路2.2.1 状态转移表2.2.2 状态转移方程3. 四种算法思想比较1. 理论总结 动态规划理论总结为“一个模型、三个特征”。 1.1 “一…

Java多线程系列(四):4种常用Java线程锁的特点,性能比较、使用场景

多线程的缘由 在出现了进程之后&#xff0c;操作系统的性能得到了大大的提升。虽然进程的出现解决了操作系统的并发问题&#xff0c;但是人们仍然不满足&#xff0c;人们逐渐对实时性有了要求。 使用多线程的理由之一是和进程相比&#xff0c;它是一种非常花销小&#xff0c;切…

论文浅尝 | Global Relation Embedding for Relation Extraction

链接&#xff1a;https://arxiv.org/abs/1704.05958Introduction在关系抽取任务中&#xff0c;通常采用远程监督的方式自动生成数据集。由于实体对间可能存在多关系&#xff0c;生成的数据集往往存在大量噪音。本文对文本中的关系表述&#xff08;textual relation&#xff09;…

tensorflow--模型的保存和提取

参考&#xff1a; TensorFlow&#xff1a;保存和提取模型 最全Tensorflow模型保存和提取的方法——附实例 模型的保存会覆盖&#xff0c;后一次保存的模型会覆盖上一次保存的模型。最多保存近5次结果。应当保存效果最优时候的模型&#xff0c;而不是训练最后一次的模型。所以…

推荐模型是怎样由窄变宽、越变越深的?

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 邢智皓编 | 兔子酱当前&#xff0c;深度学习推荐模型已经成功应用于推荐、广告、搜索等领域&#xff0c;但在了解它之前&#xff0c;简单回顾传统推荐模型仍是有必要的&#xff0c;原因如下&#xff1a;…

动态规划应用--找零钱

文章目录1. 问题描述2. 问题分析2.1 回溯法求解2.2 DP状态转移方程法2.3 DP状态转移表法1. 问题描述 找零问题&#xff0c;在贪心算法讲过。但是贪心不一定能得出最优解。假设有几种不同币值的硬币v1&#xff0c;v2&#xff0c;.……vn&#xff08;单位是元&#xff09;。如果…

玩转算法之面试第九章-动态规划

动态规划&#xff1a; 9-12 斐波那契数列 对重复计算&#xff0c;进行优化&#xff0c;进行记忆化搜索 假设基本的问题已经被解决&#xff0c;依次内推。 动态规划&#xff1a;将原问题拆解成若干个子问题&#xff0c;同时保存子问题的答案&#xff0c;使得每个子问题只求…

领域应用 | 从本体论开始说起——运营商关系图谱的构建及应用

本文转载自公众号&#xff1a;中国联通大数据。联通大数据技术专家闫龙将从“本体论”说起&#xff0c;为大家介绍联通大数据关系图谱的构建与应用。一&#xff0e;本体论万维网之父Tim Berners-Lee教授在1998年将语义网络&#xff08;Semantic web&#xff09;带入人类的视线。…

史上最强多线程面试44题和答案:线程锁+线程池+线程同步等

最全BAT必考题答案系列 最全MySQL面试60题和答案 史上最全Spring面试71题与答案 史上最全Redis面试49题&#xff08;含答案&#xff09;:哨兵复制事务集群持久化等 分布式缓存RedisMemcached经典面试题和答案 最全Java锁详解&#xff1a;独享锁/共享锁公平锁/非公平锁乐观锁…