无论你是苦逼学生(公交地铁狗)、职场萌新(打车狗)还是有钱大佬(有车一族),只要站在了北上广深的土地上,就不可避免的每天要跟堵车和出行时间battle。
比如……
-
骑车5分钟,公交半小时(说的就是后厂村
-
公交半小时,开车一小时(好想去蹭公交专线QAQ
-
开车一小时,打车到天亮(没车的人别去西二旗瞎逛
大城市的出行时间可以说比薛定猫的鳄都要魔幻……
但是!总有黑心老板要求你务必几点之前到公司,否则嘿嘿嘿,晚一分钟罚10块钱的那种。
当然了,还有比罚钱更残酷的事情,因此,2020年的地图类软件不仅要计算出两点之间的路线,还要尽可能精准的估计出当下的路线时长,减少出行的不确定性。路线时长预估也成为了当下不仅刚需,且非常有挑战性的算法命题。
难点
工业界的路线时长预估的挑战主要来源于以下两方面:
-
路况预估的复杂性:虽然未来路况和历史路况强相关,但实际情况中,路况往往受突发事件影响。此外,不少现有的方法使用时空图网络(spatial temporal graph neural networks, STGNNs)分别对时间和空间建模,却忽视了其中的关联性,导致了信息有所损失。
-
路线的上下文信息:路段有多种组合方式,路线中某个路段在不同的上下游下的通行时长会有差异。比如说,同等距离下,车辆转弯花费的时间通常比直行长。一些现有的方法使用端到端的方式,预估路线的通行时长。可是这些方法通常都是用序列化的方式建模,性能效率较难满足线上超高并发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注意力机制捕捉到了一些规律,如:
-
下游的路段相比起其他邻居路段更重要;
-
历史通行记录越多的邻居路段越重要;
-
通行速度越慢的邻居路段越重要。
总结
这篇工作可以说兼具前沿力与工业风,论文提出的ConSTGAT模型同时在准确率和计算速度方面较现有模型获得了显著提升。其最大的创新点在于建立了时间建模与空间建模的关联性,并且有效地利用了路线的上下文信息。至于这个炫酷模型的线上表现如何,感兴趣的小伙伴打开百度地图试试叭!