在【上篇】里,咱们介绍了地理文本处理技术在高德的总体演进,选取了几个通用query分析的点进行了介绍。下篇中,咱们会选取几个地图搜索文本处理中特有的文本分析技术作出分析,包括城市分析,wherewhat分析,路径规划,并对将来作一下展望。算法
在高德地图的检索场景下,从基础的地图数据索引、到在线召回、最终产品展现,均以市级别行政单位为基础粒度。一次完整的检索需求除了用户输入的query外,还会包含用户的图面城市以及用户位置城市两个城市信息。session
一般,大多数的搜索意图都是在图面或者用户位置城市下,可是仍存在部分检索意图须要在其余城市中进行,准确的识别出用户请求的目标城市,是知足用户需求的第一步,也是极其重要的一步。架构
在query分析策略流程中,部分策略会在城市分析的多个结果下并发执行,因此在架构上,城市分析的结果须要作到少而精。同时用户位置城市,图面城市,异地城市三个城市的信息存在明显差别性,不管是先验输出置信度,仍是用后验特征作选择,都存在特征不可比的问题。并发
在后验意图决策中,多个城市都有相关结果时,单一特征存在说服力不足的问题,如何结合先验置信度和后验的POI特征等多维度进行刻画,都是咱们要考虑的问题。机器学习
原始的城市分析模块已经采用先验城市分析和后验城市选择的整体流程:工具
可是原始的策略比较简陋,存在如下问题:学习
技术改造测试
改造1:城市分析优化
方案spa
城市分析是一个轻召回重选择的问题,咱们将城市分析设计为召回+选择的两阶段任务。
召回阶段,咱们主要从query和phrase两种粒度挖掘特征资源,然后进行候选城市归并。
排序阶段,须要对候选城市进行判断,识别是否应为目标城市,用gbdt进行二分类拟合。
样本构建
样本方面,咱们选择从搜索日志中随机抽取,简单清洗后,进行人工标注。构造样本时存在本异地分样本分布不均的问题,本地需求远远多于异地,这里须要剔除本地和异地相关的特征,避免模型学偏。
特征体系
主要特征包括:
改造2:城市选择
方案
城市选择在总体的意图决策中处于下游,多种意图先在城市内部PK,而后城市互相PK。城市选择问题能够理解为多个城市间的排序问题,这里咱们使用ltr进行城市选择的建模。
样本构建
使用随机query的多个城市意图结果做为样本,每次检索只有1个展现城市,于是每次只须要从候选城市中选择目标做为正样本,其余候选城市均做为负样本,与目标城市构成pair对。
特征构建
主要特征包括:
相比原始的城市分析和城市选择,两个模块所有实现机器学习化,在恶劣badcase显著下降的同时,可维护性大幅提升。在后续的建模中,咱们将城市分析做为一个上层应用任务,经过多任务的方式接入到query分析的统一模型中来,下降了特征间的耦合,同时实现进一步的效果提高。
地图场景下的query常常包含多个空间语义片断的描述,只有正确识别query中的核心部分作what用于召回,同时用空间描述部分作where进行限定,才可以获得用户想要的POI。如query=北京市海淀区五道口肯德基,what=肯德基,是泛需求。query=南京市雨花台区板桥街道新亭大街与新湖大道交界口湾景,what=湾景,是精确需求。这种在A附近找B或者在A范围内找B的需求咱们把它称做wherewhat需求,简称ww。
wherewhat意图分析主要包括先验和后验两个部分。先验要作wherewhat切分,是一个序列标注问题,标注出query中的哪些部分是where哪些部分是what,同时给出where的空间位置。后验要作意图选择,选择是否展现wherewhat意图的结果,能够转化成分类或者排序问题。
wherewhat体系的主要难点在ww切分上,不只要应对其余query分析模块都要面对的低频和中长尾问题,同时还要应对ww意图理解独特的问题。像语义模糊,好比北京欢乐谷公交站,涌边村牌坊这样的query该切仍是不应切,结果差别很大。像语序变换,如query=嘉年华西草田,善兴寺小寨,逆序的表达若是不能正确识别,效果可能不好。
现状与问题
现状
切分:wherewhat模块在成分分析模块下游,主要依靠了成分分析的特征。对于一些比较规整的query,经过成分分析组合的pattern来解决,对于一些中长尾的query,经过再接入一个crf模型进行ww标注。
选择:基于人工规则进行意图的判断和选择。
技术改造
crf问题分析工具
为了可以分析原始crf切分模型的问题,咱们基于crf++源码开发了一个crf模型的分析工具,可以将基于维特比算法的预测过程交互式的展现出来,将模型的黑盒分析变成白盒,分析出了一系列问题。
同时,crf问题分析工具也应用在了其余query分析模块。
原始的模型依赖成分分析比较严重,因为成分分析特征自己存在准确率的问题,咱们从用户的query中总结了一些更加可靠的统计特征。
前缀置信度
描述了片断作前缀的占比。好比望京凯德茂,望京阜通,也有望京单独搜,若是望京在前缀中出现的占比很高,那说明这个片断作where的能力比较强。
后缀熵
描述了后缀的离散程度,如望京凯德茂,望京美食,望京首开,后缀很乱,也能够说明片断作where的能力。
what置信度
片断单独搜占比,好比西门常常是在片断结尾出现,可是单独搜比较少,那片断作what的能力比较弱。
以特征值域作横轴,where和what,label做为纵轴,就获得了特征-label曲线。从这几个特征的特征-label曲线来看,在某些区间下区分度仍是很好的。因为crf模型只接受离散特征,特征-label的曲线也指导了特征离散化的阈值选择。对于低频query,咱们经过低频query中的高频片断的统计信息,也可使咱们的模型在低频问题上表现更好。
将原始的堆砌的规则升级到gbdt机器学习模型,引入了先验特征,在拿到必定收益的同时也使得整个体系更加合理。
将ww中逆序的问题抽象出来,能够概括为query分析中的鲁棒性问题。随着策略优化进入深水区,存在策略提高用户不可感知,攻击case容易把系统打穿的问题。
如上图,用户变换query中where和what的顺序,效果可能变差。变换下检索城市,对于同一个知名景点,跳转逻辑不一致。用户区划输错,纠错不能识别,效果变不好。这种模块对非预期的query变换,或者更通用地叫作,对上下游的特征扰动的承载能力,咱们能够把它叫作模块的鲁棒性。
这里咱们设计了对于通用鲁棒性问题解决的思路:
在不引入复杂模型的前提下,经过构建ensemble的浅层模型来优化特定问题,下降了问题解决的成本。
对于ww逆序这个特定问题进行了特征复用用本复用,而且模型对外统一
效果上,新的模型在原始测试集效果持平,人工构造攻击case集合准召明显提高,目标case集合具备可观的解决比例,验证了鲁棒性优化的思路是有效的。
这里基本完成了对于ww体系的一个完整的升级,体系中的痛点基本都获得了解决。优化了切分模型,流程更加合理。意图决策上完成了规则到机器学习模型的升级。在优化或者引入浅层机器学习模型的同时尽量发挥浅层模型的潜力,为从浅层模型升级为深度模型打下基础。
在后续的建模中咱们使用字粒度lstm+crf模型代替现有的crf模型,完全摆脱了对成分分析特征的依赖,同时经过融合知识信息到lstm+crf模型,进一步提高效果。
在高德地图的搜索场景中,一类用户搜索意图为路径规划意图。例如,当用户在高德地图App的搜索框中输入“从回龙观到来广营”,点击搜索按钮后,搜索服务能识别出用户的搜索意图为路径规划,并识别出用户描述的起点为“回龙观”,终点为“来广营”,进而检索到对应的POI点给下游服务作出路线的规划。
从用户输入中识别路径规划意图,并提取出对应的起终点,这是一个典型的NLP任务。早期的路径规划模块使用的是模板匹配的方式,这种方式开发成本低,能解决大部分常见的路径规划问题,如上面这种“从A 到B”类的问题。
但随着业务的不断发展,模块须要解决的问题愈来愈复杂,好比“坐地铁从西直门到大兴狼垡坐到哪里下车”,“广东到安徽通过哪几个城市”,“去往青岛的公交车有吗” 等等各类非“从A到B”模式的问题。因为模板匹配方式没有泛化能力,只能经过不断增长模板来解决,使得模块愈来愈沉重难以维护。
优化
因为线上全部的搜索query都会通过路径规划模块,如果让模型去处理全部的query,那么模型不只要解决意图识别问题(召回类问题),又要解决槽位提取问题(准确类问题),对于模型来讲是很难同时将这两个任务学好的。所以,咱们采起了如下三段式:
模型前使用关键字匹配策略进行简单意图识别,过滤掉大部分非路径规划query;模型处理疑似路径规划的query,进行槽位提取;模型后再对模型结果进行进一步检验。
样本和特征
机器学习的样本通常来源于人工标注,但人工标注耗时长成本高。所以咱们采起的是自动标注样本方式。经过富集路径规划模式,如“从A怎么乘公交到B”,再用清洗后的随机query按照实际起终点的长度分布进行起终点替换,生成大量标注样本。
特征方面,咱们使用了成分分析特征及含有关键字的POI词典特征。它们主要在如“从这里到58到家”这类起终点 中含有关键字的query上起着区分关键字的做用。
模型训练
crf算法是业界经常使用的为序列标注任务创建几率图模型的算法。咱们选取的也是crf算法。
效果评估
在验证集准确率召回率,以及随机query效果评比上,指标都有了明显的提高。
对于路径规划这样一个定向的NLP任务,使用crf模型完成了从规则到机器学习模型的升级。做为一个应用层任务,路径规划也很容易被迁移到seq2seq的多任务学习模型中来。
过去两年随着机器学习的全面应用,以及基于合理性进行的屡次效果迭代,目前的地理文本处理的效果优化已经进入深水区。咱们认为未来的优化重点在攻和防两方面。
攻主要针对低频和中长尾问题。在中高频问题已经基本解决的前提下,如何可以利用深度学习的技术进行地理文本处理seq2seq的统一建模,在低频和中长尾问题上进行进一步优化,得到新一轮的效果提高,是咱们目前须要思考的问题。另外,如何更好地融合知识信息到模型中来,让模型可以具备接近人的先验判断能力,也是咱们亟待提高的能力。
防主要针对系统的鲁棒性。如用户的非典型表达,变换query等定向的问题,如何可以经过定向优化解决这些策略的死角,提升系统的容错能力,也是咱们目前须要考虑的问题。
地图搜索虽然是个垂类搜索,可是麻雀虽小五脏俱全,而且有地图场景下不少有特点的的难点。将来咱们须要继续使用业界先进的技术,而且结合地理文本的特色进行优化,理解将更加智能化。
本文做者:高德技术小哥
本文为云栖社区原创内容,未经容许不得转载。