低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

深度学习在高德 POI 鲜活度提升中的演进

2020 年 5 月 11 日

深度学习在高德POI鲜活度提升中的演进

1.导读

高德地图拥有着数千万的 POI(Point of Interest)兴趣点,如学校、酒店、加油站、超市等。其中伴随着众多 POI 创建的同时,会有大量的 POI 过期,如停业、拆迁、搬迁、更名。这部分 POI 对地图鲜活度和用户体验有着严重的负面影响,需要及时有效地识别并处理。



由于实地采集的方式成本高且时效性低,挖掘算法则显得格外重要。其中基于趋势大数据的时序模型,能够覆盖大部分挖掘产能,对 POI 质量提升有着重要意义。


过期 POI 识别本质上可以抽象为一个数据分布非对称的二分类问题。项目中以多源趋势特征为基础,并在迭代中引入高维度稀疏的属性、状态特征,构建符合业务需求的混合模型。


本文将对深度学习技术在高德地图落地的过程中遇到的业务难点,和经过实践检验的可行方案进行系统性的梳理总结。


2.特征工程

过期挖掘的实质是感知伴随 POI 过期而发生的变化,进行事后观测式挖掘,一般都会伴随着 POI 相关活跃度的下降。因此时序模型的关键是构建相关联的特征体系。同时在实践中我们也构造了一些有效的非时序特征进行辅助校正。


2.1 时序特征

时序特征方面,建立了 POI 和多种信息的关联关系,并分别整合为月级的统计值,作为时序模型的输入;时间序列窗口方面,考虑到一些周期性的规律的影响,需要两年以上的序列长度来训练模型。


2.2 辅助特征

辅助特征方面,首先是将人工核实历史数据进行有效利用。方式是构造一个时间序列长度的 One-Hot 向量,将最后一次人工核实存在的月份标记为 1,其他月份为 0。人工核实存在表示该时间结点附近过期概率较低,若人工更新在趋势下降之后,说明趋势表征过期的概率不高。


其次,调研发现不同行业类型的 POI 有着不同的过期概率,如餐饮和生活服务类过期概率较高,而地名或公交站点等类型则相对低很多。因此将行业类型编号构建为一个时间序列长度的等值向量,作为静态辅助特征。


第三种辅助特征是在分析业务中的漏召回问题时总结构造的。发现有相当部分的新诞生 POI,其入库创建后至今的时长短于序列长度。意味着这部分序列前期存在较多数值为零的伪趋势,会对尾部的真实下降趋势造成干扰从而误判。对此提出了两种优化思路:


  • 采用可变长度的 RNN 模型,只截取 POI 创建时间之后部分的序列作为输入。

  • 序列长度不变,添加一维“门”序列特征,序列在 POI 创建时间之前的部分数值为 0,之后为 1。如图所示。



对比采用第二种方案效果更优。考虑到我们只有 POI 的入库创建时间信息,而不了解门店的具体诞生时间,直接按入库时间截取序列,会造成门店诞生和 POI 创建时间段内的特征信息损失;而添加“门”序列则可以在保持信息完备的同时约束高可信区间。最后构建的混合特征示意图如下所示。



3.RNN 阶段

循环神经网络(RNN, Recurrent Neural Network)凭借强大的表征能力在序列建模问题上有非常突出的表现,业务中采用了其变种模型 LSTM。


3.1RNN1.0

以前述的时序特征和辅助特征为基础,我们采用多层 LSTM 搭建了第一版 RNN 过期挖掘模型,结构如图所示。主要逻辑为,将逐时间点对齐后的特征输入到深度 LSTM 中,在网络最后时刻的输出后,接入一层 SoftMax 计算过期概率。最后根据结果匹配不同的置信度区段,分别进行自动化处理或人工作业等任务。模型初步验证了 RNN 在过期趋势挖掘领域落地的可行性和优势。



3.2 RNN2.0

高德地图基于导航、搜索或点击等操作频度对 POI 进行了热度排名。头部的热门 POI 如果过期但未及时发现对用户体验的伤害更大。2.0 版本模型升级的主要目标便是进一步提升头部热门段位的过期 POI 发现能力。


分析发现热门 POI 的数据分布相比尾部有较大差异性。头部 POI 的数据量丰富,且数值为 0 的月份很少;相反尾部 POI 则数据稀疏,且有数值月份量级可能也仅为个位数。对于这种头部效应特别明显的状况,单独开发了高热度段特征的头部 RNN 模型,实现定制化挖掘。


另一方面,对于单维度特征缺失的情况,也区分热度采用了不同的填充方式。头部 POI 特征信息丰富,将缺失维度补零让其保持“静默”防止干扰;而尾部特征稀疏,本身已有较多零值,需要插值处理使缺失特征和整体保持相近趋势。方法为将其他维度的数据规范化处理后,采用加权的方式得到插值。



2.0 版模型对头部和尾部的召回能力都有提升,对头部的自动化能力提升尤为明显。


4.Wide&Deep 阶段

RNN 模型能够充分发掘时序特征的信息,但特征丰富度不足成为制约自动化能力进一步提升的瓶颈。因此整合业务中的其他数据,从多源信息融合角度升级模型便成为新阶段的工作重点。主要的整合目标包括非时序的静态信息和状态信息,以及新开发的时序特征信息。


模型升级主要借鉴了 Wide&Deep 的思想,并做了很多结合业务实际情况的应用创新。首先我们要把已有的 RNN 模型封装为 Deep 模块后和 Wide 部分联合,相当于重新构建了一个混合模型,涉及到模型结构维度的整合。其次,既有 Deep 的时序信息,又有 Wide 部分的实时状态信息,涉及到数据时间维度的整合。最后是 Wide 部分包含大量的不可量化或比较的类型特征需要编码表征处理,涉及到数据属性维度的整合。


4.1 Wide & LSTM

  • 特征编码


我们将非时序特征经过编码后构建 Wide 模块。主要包括属性、状态,以及细分行业类型三种特征。


考虑到某些 POI 属性存在缺失的情况,故编码中第 1 位表示特征是否存在的标志位,后面则为 One-Hot 编码后的对应的属性类型;对于状态特征,同样有一位表示是否特征缺失的标志位,而后面的 One-Hot 编码则表示最新时刻的状态类型;由于不同行业类型有着不同的背景过期率,我们将细分的行业类型做 One-Hot 编码后作为第三种特征。最后将各特征编码依次连接,得到一个高维度的稀疏向量。特征编码的过程如图所示。



  • 特征耦合


特征完备之后,将各类特征耦合及模型训练便成为关键。耦合点选在了 SoftMax 输出的前一层。对于 Deep 部分的 RNN 结构,参与耦合的便是最后时间节点的隐层;而对于 Wide 部分的高维度稀疏向量,我们通过一层全连接网络来降维,便得到 Wide 部分的隐层。最后将两部分的隐层连接,输出到 SoftMax 来计算过期概率。


模型采用同步输入 Wide 和 Deep 部分特征的方式联合训练,并调节两部分的耦合隐层的维度来平衡两部分的权重。过期挖掘场景的 Wide & LSTM 模型结构如图所示。



模型经过多次迭代优化后稳定投产,已成为过期挖掘业务中覆盖行业广、自动化解题能力突出的综合性模型。


4.2 Wide & Dual-LSTM

在做模型升级迭代的同时,基础特征的建设工作也在同步进行。在扩充新的趋势特征的时候面临这样一个问题,新特征维数较多且时间序列较短,这样将长时序特征和短时序特征逐时间点匹配时会出现很大部分的数值缺失。


由于新特征缺失部分较多且维度较大,缺失值填充的负面影响会过于严重而不适合采用。项目中采用了分而治之的方案,分别建立两个 RNN 模块,其中长 RNN 模块输入无新特征的长序列,短 RNN 模块输入有新特征的短序列,最后将双 RNN 的 Hidden 层和 Wide 部分一起耦合,得到了 Wide & Dual-RNN 模型,结构如图所示。



双 RNN 结构能够很好地将新特征融入到现有模型并提升判断准确率,不足的地方是结构较复杂影响计算效率。故后期进行了新阶段的研发,采用更灵活的时序模型 TCN 进行迭代。


4.3 Wide & Attention-TCN

TCN 主要有如下三方面优点使其能胜任时间序列的建模:首先,架构中的卷积存在因果关系,即从未来到过去不会存在信息泄漏。其次,卷积架构可以将任意长度的序列映射到固定长度的序列。另外,它还利用残差模块和空洞卷积来构建长期依赖关系。


性能对比上,TCN 可以将时间序列作为向量并行化处理,相比 RNN 的逐时间点顺序计算的方式有更快的计算速度。此外,TCN 可以输入延展成一维的序列,从而避免了特征需要逐时间点对齐。因此在验证了 Wide&Deep 的思路有效后,我们尝试将 Deep 部分的 RNN 结构升级为 TCN。


首先,对于输入部分的特征进行了 Flatten 处理,即将每个维度的时间序列依次首尾相连,如图所示,拼接成为一个长向量后作为输入。这样便实现了长特征和短特征的有效整合。



其次对于输出结构,引入序列维度的 Attention 机制进行优化。主要思想是不再只读取序列最后节点的隐向量的浓缩信息,而是对所有序列节点的隐向量信息加权处理后,得到汇总的隐向量信息,使所有节点的学习结果得到充分利用。


最后将 Attention-TCN 后得到的汇总隐向量和 Wide 部分的隐层进行耦合,得到的 Wide&Attention-TCN 模型结构如图所示。



通过引入新的轻量 TCN 时序模型和 Attention 机制,新的模型性能有了进一步提高,但调优过程相对 RNN 更加复杂。多轮参数调整与结构优化后,最终落地版本与 Wide & Dual-LSTM 版相比,计算效率和业务扩招回能力均有可观提升。


5.总结与展望


深度学习在过期挖掘场景中的落地,经历了不断摸索尝试、总结问题、优化方案、验证效果的迭代演进的过程。期间以提升过期发现能力为核心目标,对特征扩展、特征构造和模型结构优化的角度都进行了探索,并总结了如上的业务场景落地经验。其中,丰富可靠的特征、合适的特征表征方式和符合场景的模型结构设计是提升业务问题解决能力的关键。


当前模型主要是基于信息和趋势进行宏观性的规律总结,并判断具备这类特征情况下的 POI 过期的概率。而现实生活中 POI 的具体地理环境、自身经营状况、周边竞争态势等个性化因素的影响往往不可忽略。因此,未来规划将综合考虑整体规律性特征和个体差异性,实现精细化挖掘。


6.参考文献

  1. Sepp Hochreiter and Jurgen Schmidhuber, Long Short-Term Memory, Neural Computation 1997

  2. B. Hidasi, A. Karatzoglou, L. Baltrunas, and D. Tikk. Session-based recommendations with recurrent neural networks. CoRR, abs/1511.06939, 2015

  3. Heng-Tze Cheng, Levent Koc, Jeremiah Harmsen, Tal Shaked, Tushar Chandra, Hrishi Aradhye, GlenAnderson, Greg Corrado, Wei Chai, Mustafa Ispir, Rohan Anil, Zakaria Haque, Lichan Hong, Vihan Jain, Xiaobing Liu, and Hemal Shah. Wide&Deep learning for recommender systems. In Proc. 1st Workshop on Deep Learning for Recommender Systems, pages 7–10, 2016.

  4. Paul Covington, Jay Adams, and Emre Sargin. Deep neural networks for youtube recommendations. In Proceedings of the 10th ACM Conference on Recommender Systems. ACM, 191–198, 2016.

  5. Bai S , Kolter J Z , Koltun V . An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling[J]. 2018.

  6. Pappas N , Popescu-Belis A . Multilingual Hierarchical Attention Networks for Document Classification[J]. 2017.


本文转载自公众号高德技术(ID:amap_tech)。


原文链接


https://mp.weixin.qq.com/s?__biz=Mzg4MzIwMDM5Ng==&mid=2247484887&idx=1&sn=98252da743d8f13a2132afd965e71d99&chksm=cf4a5d34f83dd422f131374a0e9ac90f88e50d6b93ac770b7de50e8428b35d5e488afb98ecc6&scene=27#wechat_redirect


2020 年 5 月 11 日 14:05867

评论

发布
暂无评论
发现更多内容

产品经理训练营 - 第八章作业

joelhy

产品经理训练营

第9周作业

Geek_72d5ab

函数依赖根据依赖属性的不同,可分为3种

在即

28天写作 28天挑战 3月日更

第六次作业

Geek_79e938

翻译:《实用的Python编程》07_04_Function_decorators

codists

Python PEP

Spring-Retry重试实现原理,有点东西哈

Java小咖秀

Java spring 源码 原理 开发

第八章作业 - 用户路径

Au revoir

如何提高Flutter应用程序的性能

老孟Flutter

flutter

[老孟Flutter] Stateful 组件的生命周期

老孟Flutter

flutter

面试进阶齐飞!Github疯传的阿里分布式设计实录也太香了

程序员小毕

Java 程序员 架构 面试 分布式

Python SMTP 发送邮件方法

HoneyMoose

第八章—数据分析作业

墨狂之逸才

数据结构之栈

我是程序员小贱

3月日更

产品经理面试常见问题总结 3

lenka

3月日更

ProxmoxVE系列:VMware,是时候卸载了

Bob

vmware 虚拟化 服务器开发 proxmoxve PVE

6年时间,从实习生到阿里巴巴的P7,这就是我这个三本生的进阶之路

神奇小汤圆

Java 编程 程序员 架构 面试

推荐几本 Go 相关书籍

roseduan

go 书籍推荐 Go Concurrency Patterns Go web 书籍

文档是给未来自己的珍贵礼物

steve_lee

文档

JDBC—数据库事务处理

打工人!

Java MySQL 数据库事务 JDBC

《Redis 核心技术与实战》学习笔记 08:GEO数据类型和时间序列数据

escray

redis 极客时间 学习笔记 3月日更 Redis 核心技术与实战

第八章作业

流浪猫

Wireshark数据包分析学习笔记Day20

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

ARTS——week 3

steve_lee

第九周作业

产品经理训练营

Flutter 中与平台相关的生命周期

老孟Flutter

flutter

C++后台开发必看,这个学习路线必须收藏

赖猫

c++ Linux 后台开发 服务器开发

分而治之——D&C

Kylin

3月日更 21天挑战 分而治之

产品经理训练营--第9周作业

月亮 😝

MySQL - 事务

insight

3月日更

13|PPT 教程|字体使用原则

青城

“英特尔‘IDM2.0’的疯狂”

intel001

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

深度学习在高德POI鲜活度提升中的演进-InfoQ