文 | 小戏
当我们打开百度地图,选定到达目的地,导航软件里的小姐姐马上就用不紧不慢的语调告诉我们“准备出发,全程12公里,预计需要30分钟……”
但一看手表上显示的不风驰电掣铁定迟到的时间,肯定不允许我们和导航软件里的小姐姐一样沉着冷静,可当我们一路狂奔跑过几个路口,大喘着气停下来看看导航,发觉显示的预计到达时间并没有因为我们跑的大汗淋漓而有一点点改变,依然是那个从现在的地方出发不紧不慢走过去的时间。
这时候我们也许会想,为什么我们的导航不能更智能一点,根据我当下的情况和之前的速度重新计算到达时间呢?
今天介绍的这篇工作,恰恰是百度地图团队基于这个问题,首次对在途路线时长预估问题进行了研究。百度地图团队通过把在途路线时长预估建模成小样本学习问题,充分利用全程中少量的我们已经行驶过的那段路程的驾驶行为,使用自监督的元学习算法实现了在驾驶途中动态的、个性化的“多次”时长预估,提升了在途时长预估任务的准确率。
目前,这篇论文——《 SSML: Self-Supervised Meta-Learner for En Route Travel Time Estimation at Baidu Maps 》已被数据挖掘顶级会议KDD 2021收录。
在介绍这篇论文之前,我们首先来明确一下面对的问题,路线时长预估是当下地图类软件的基础功能,我们使用地图软件自然不仅仅是需要一条展示在手机上的路线规划,更需要尽可能准确的估计出从出发地到目的地的在途时长。
而目前,现有的路线时长预估都是所谓的“一次性”时长预估,也就是说,现有的路线时长预估都是在用户出发前,根据一些诸如出发时间,选择的路线等等信息估算用户的到达时间。但是这就产生出了一个问题,也就是现有的路线时长预估没法根据用户自己实际在途的驾驶习惯、驾驶状况等信息改变对路线时长的估计。哪怕我前半程一路火花带闪电,导航软件上的时长估计也是你快任你快。
拿一个简单的例子来说,在同样的一个路段,秋名山车神夕师傅与新手上路的小瑶共同出发,我们观察到在前一段路程中夕师傅展现了极高的车技只远远留给小瑶一个尾灯,那么我们也有理由相信在后面的路程中夕师傅的速度也会比小瑶快,因此我们期望一个足够智能的导航软件给夕师傅的预计到达时间会比给小瑶的更快。
那么我们该如何利用已知的信息,来推测用户个性化的驾驶习惯,从而实现更好与更加智能的预测呢?这里我们可以发现,在用户的驾驶过程中,导航软件并不是一劳永逸的给出一个路线就万事大吉,而是每隔一段时间都会根据当前状态重新计算并更新路线时长,这种在驾驶过程中进行的时长预估被称为在途路线时长预估(En-Route Travel Time Estimation)。
目前针对在途时长预估这个任务场景,其对在途时长所做的更新,都是与从起点出发得到的路线时长预估一样进行一次性的预估,显而易见这种预估方式放弃了之前一段用户已经驾驶过的路程中的有用信息,因而将会很难以适应用户的驾驶习惯并推断用户的未来驾驶行为。
让我们正式进入论文的工作,论文基于在途路线时长预估这一路线时长预估在用户驾驶过程中的细分场景任务,提出了一个基于自监督学习的元学习器(SSML),为了充分利用已行驶路线的少量用户驾驶行为,论文把在途路线时长预估建模成了小样本学习问题。
具体而言,论文把已行驶路线中观察到的用户行为作为训练样本,同时把剩余路线中未发生的行为作为测试样本。从而提出了一个新的基于模型的元学习器(Model-Based Meta-Learner),并把每一次的在途时长预估场景被看作是元学习设定中的一个学习任务(Learning Task)。
如何理解这一元学习问题呢?我们知道一条路线通常由几十到几百的首尾相连的路段组成。在用户的导航驾驶过程中,导航系统会收到多次请求去重新计算剩余的通行时间。
如上图所示,论文将一次请求(即一个时长预测场景)当作一个学习任务。对于每一个学习任务,把收集到的过去多次请求后到目前为止所观测到的已经过多个路段的用户行为(即上图中的蓝色格子)作为支持样本(Support Examples),把从当前时间预估的未经过所有路段的用户行为(即上图中的红色格子)作为查询样本(Query Examples)。
基于模型的元学习器从收集到的大量的不同用户的在途时长预估场景中去学习快速适应用户驾驶偏好的能力,并在新的在途时长预估场景中去评估其有效性。
但是此时,又会面对一个新的问题,即如何对每一个样本进行表示?这里论文使用了百度地图团队发表在 KDD 2020 的前序工作 ConSTGAT 完成对样本的表示,这篇论文卖萌屋之前做过详细的解读,感兴趣的朋友可以点这里(工业解密:百度地图背后的路线时长预估模型!)。
简而言之,论文首先使用 ConSTGAT 中提出3D时空图网络(3DGAT)完成对时空路况的建模,然后与其他输入的样本特征进行拼接,再使用多层感知机来获得样本的表示。这些支持样本和查询样本的表示 和 将作为基于自监督学习的元学习器的输入。
得到了样本的表示之后,论文将自监督学习与元学习器相结合,进行数据增强,进一步提升模型的预测效果。如下图所示,论文同时进行监督学习和自监督学习去训练元学习器。
其中,监督学习方法直接学习元知识,为了快速适应用户的驾驶偏好,论文使用了注意力机制去捕捉支持样本和查询样本之间的联系,旨在根据已经过的路段的行为推断剩余路段的行为。
而自监督学习方法则使用数据增强的方式进一步提升元学习器的效果。论文通过人工构造大量学习任务,使用被随机遮盖对应通行时长的部分支持样本作为这些人工学习任务的“查询样本”,而剩下的支持样本作为人工学习任务的“支持样本”,使用和监督学习同样的基于注意力机制的模型结构去预测人工的“查询样本”的时长,从而达到进一步优化元学习器的效果
添加了 SSML 模块的导航系统架构如下,可以看到 SSML 模块把不考虑用户已经过路线驾驶行为的ConSTGAT模块以及静态数据,动态数据和获取到的观测行为作为输入,产出预测时长返回给用户。
论文从百度地图收集了三个城市(太原,惠州和合肥)从 19 年 09 月 01 日到 19 年 09 月 28 日的路线数据。其中,前面3周数据用于模型训练,最后1周数据用于评估。
论文将将 SSML 和 4 个基线方法进行对比。其中:
(1)ConSTGAT:论文前序工作,即不考虑用户在已经过路线的驾驶行为而得到的在途时长;
(2)FT:即微调(Fine-tuning),在 ConSTGAT 的基础上根据每个任务的支持样本微调模型参数;
(3)R- ML:基于LSTM的元学习模型;
(4)A-ML:基于注意力机制的元学习模型,相比起SSML少了自监督学习。
实验评估指标采用目前通行时长预估领域最为常用的标准:均方根误差(RMSE)和平均误差(MAE)。
从表1和表2中可以看出:
最后,论文基于一个案例,展现了注意力机制矩阵以及支持样本和查询样本的特征。根据下图可以清楚的看到,如果注意力机制矩阵中的元素的颜色越深,也就是 SSML 模型认为相应的支持样本和查询样本越相关,那么这个支持样本和查询样本的特征也会越相似。换言之,SSML 能够使得每个查询样本从和它最相似的支持样本中抽取信息。
这篇工作非常好的分析与利用了在途路线时长预估任务本身的特点,从而颇为完美的将其建模为一个小样本学习的问题,通过使用基于自监督学习的元学习方法,充分的利用了用户自身在已经过路线的驾驶行为,从而使得模型能在新的在途路线时长预估场景快速适应用户的驾驶偏好,让路线时长预估变得更加个性化与智能化。完全可以想象,在不远的将来,导航与人工智能深度融合,或许出行真会变成一种私人定制吧!
后台回复关键词【入群】
加入卖萌屋NLP/IR/Rec与求职讨论群
后台回复关键词【顶会】
获取ACL、CIKM等各大顶会论文集!