百度地图背后的路线时长预估模型
本次分享是有关工业界对路线时长预估模型。该文章是百度发表于KDD2020的一篇路线时长预估的工作
——《ConSTGAT: Contexual Spatial-Temporal Graph Attention Network for Travel Time Estimation at Baidu Maps》
因这篇文章是工业界应用AI解决实际问题,因此分享该篇文章。
本文提出了一种叫做ConSTGAT的模型,作为工业级的解决方案,已经应用搭配百度Map中。
主要思想:针对时空历史路况信息,ConSTGAT设计了新的三维时空图注意力网络 (3D Graph Attention Network, 3DGAT),它能够在建模的同时兼顾时间与空间的历史路况的关联性;在处理路线上下文信息的方面,则使用了卷积结构提取路线上所有路段的局部上下文信息,并使用多任务学习同时学习路线和路段的通行时长。
一:ConSTGAT框架
ConSTGAT模型的输入包括三个部分:路线 (route),背景信息 (background),和历史路况 (historical traffic conditions)。其中,路线由多个路段组成,可以用路段的序列表示;背景信息指代出发时间等信息;历史路况则是路网中相关的路段的历史路况信息。
上下文信息模块 (Contextual Information):以路段序列作为输入,用于提取路段在路线中的上下文信息;
路况预测模块 (Traffic Prediction):以上下文信息,背景信息,和历史路况信息作为输入,使用三维时空图注意力网络建模对历史路况建模,预估未来的路况;
预估整合模块 (Integration):使用多目标同时学习路段时长与路线时长。
路况预测 (Traffic Prediction)
3DGAT和传统时空图网络比较
(红圈为目标路段,黑圈为邻居路段。每一列表示某个历史时刻目标路段和邻居路段的路况)
上下文信息 (Contextual Information)
上下文信息建模
上下文信息模块:通过使用卷积层抽取路段 (link) 在路线中的局部的上下文信息。某个路段和它的上游路段、下游路段看作一个整体,也就是一条子路 (sub-path) 编码。通过这样的方式,路段之间的夹角以及主路和辅路之间的关联等上下文关系可以被利用,作为其他模块的输入。
整合预测模块:使用多任务学习同时预估路段通行时长 (link travel time) 与路线通行时长 (route travel time)。预估的路段通行时长相加为预估的路线通行时长。其中,使用Huber Loss作为路段的损失函数;使用相对误差作为路线的损失函数。
相比传统的端到端的方法,ConSTGAT将实时运算的任务转成预运算任务+检索任务,极大地减轻了总体运算量,因此更容易规模化。由于ConSTGAT没有使用序列化的网络结构,可以提前并行地计算并用表存储每个路段的通行时长。当有路线时长预估请求到达时,只需在表中检索对应路段的时长并加和即可。因此,这个方案可以轻松地部署在大规模真实的导航服务中。
二、实验
实验部分通过百度地图收了三个城市五周的数据,前四周用于训练,最后一周用于评估。
与五个基线做了比较:
AVG是均值历史路段速度;
DeepTravel是一个端到端的路线通行时间预测方法;
STANN, DCRNN和 GAT+Attention都基于时空图网络
上述都是将时间和空间分开考虑
ConSTGAT在三个数据集的MAPE和MAE,RMST都低于上述五个基线