1 认识POI
本文是POI三部曲第一篇:POI资产挖掘,后续2篇有关POI的匹配召回与场景应用--POI模糊搜索召回,辅助定位识别,用户兴趣POI推荐,空间设施分布,o2o到店服务等、以及POI的表征学习与推荐,也会抽时间进行整理,敬请期待。
1.1 什么是POI
POI:是“POInt of Interest”的缩写,中文可以翻译为“兴趣点/信息点”。POI用来表示地图上任何区别于纯地理含义的有意义的点:比如商店,酒吧,加油站,医院,车站、图书馆、学校等。在地图表达中,一个POI可代表一栋大厦、一家商铺、一处景点等等。通过POI搜索,完成找餐馆、找景点、找厕所等等的功能。POI数据是线上线下连接互动的一个纽带,是基于位置服务(Location Based Service)的一个重要组件,是服务的地理载体。 在地图应用和地理信息系统中,POI影响着亿万用户的出行决策。
在阿里、蚂蚁或菜鸟,POI数据是集团内多个业务线最基础的数据需求,如网约车导航定位、外卖/快递配送/揽收,尤其在涉及到对商家线下作业时POI数据是必不可少的。在移动互联网时代,可以毫不地说,POI数据库的完善度和质量是众多移动业务规模推动的抓手,也是竞争壁垒之一。
构成POI核心三要素包括:名称、类目、地址(或经纬度)。另POI也包括其他各类属性等特征,但名称、类目和地址/经纬度是不可或缺的最基础三要素;其中POI名称如##学校、##加油站等,类目主要包括学校、医院、景区等,而POI位置,通常用经纬度来表示,文本地址也是另外一种可选的表示方式,一般而言,经纬度是必选项,而文本地址可通过反向行政区划解析得到。至于其他POI属性,如人员流动密度、辐射范围大小,或商业属性则可根据具体业务场景进行挂载。
1.2 POI的分类
POI的标准类目体系可参考典型的高德POI类目分类表,一般分为三级共约20+一级类目、200+二级类目和约1000个三级子类目,具体包括学校、医院、住宅区、商场、门店等等;但同时,POI也是一个种类非常多且多维的地理兴趣点位标记,在具体商业场景中,其分类也不是严格互斥的,在阿里集团内,POI又根据场景,区分为经营性POI、非经营性POI,导航点位POI、行业类POI(如医院类POI/学校类POI等)等:
(1)经营性POI:是指具有交易属性的POI,比如餐厅、酒店、超市等,此类POI通常时效性敏感;
(2)非经营性POI:与经营性POI相反,POI本身不具明显交易属性的POI,时效性相对不敏感;
(3)导航点POI:各类住宅、学校、园区等场所出入口等点位,是承载网约车/外卖服务的关键节点。
(4)行业类POI:小区类POI库、学校类POI库、景区类POI库等是各相关垂直行业最重要的基础数据资源之一,是推动业务规模扩展的前提。
2 POI的获取与挖掘
在移动互联网时代之前,地图POI数据通常来源于官方测绘,其用人工作业的方式处理POI数据,成本高,效率低。随着高分辨率遥感技术等的发展和移动互联网的推进,POI的采集获取方式和渠道有了更多选择,其技术也更加先进,例如我们可以通过高清遥感图,去发现某某地区是否新建了一个小区、一个菜市场、或是一个养猪场;除了遥感技术,随着NLP技术的迭代,从各类地址文本(快递收货地址、外卖配送地址,商家经营地址等)中提取挖掘POI也成为当前各类POI库最重要的补充来源之一。但如何自动化且准确地从文本或图像中提取POI,包括其核心的三要素,是当前研究的热点。
2.1 不同分类POI获取渠道
通常,一些基础性POI库,相对热门的POI,我们可以通过现有渠道直接获取或者购买,如偏永久性地理实体POI、公共服务相关行业POI(医院学校等类目)我们可以直接通过开源网址获取。如国家官方的各类数据网站,包括民政局网、国土资源网、中国科学院地理科学与资源研究所等(http://www.resdc.cn),如下图:
而与日常生活相关的经营类POI、导航点位POI等,则可通过各类地图来获取,除了我们熟知的高德、百度、腾讯等互联网图商,天地图、OSM(https://www.openstreetmap.org/)等也是很好的POI资源库,当然相对而言,这些是非免费且无法大批量获取的。而作为互联网图商的高德百度等,则还可以通过与用户的交互来收集各类POI、或是通过场景化的移动支付来收集POI。
至于国外的POI数据,这里介绍部分数据网站:
1)欧盟数据:https://www.europeandataportal.eu/en
2)英国政府数据中心:https://data.gov.uk/
3)德国国家数据中心:https://www.govdata.de/
4)美国政府公开数据:https://www.data.gov/
5)西班牙国家数据中心:https://datos.gob.es/en
6)意大利政府数据开放平台:https://www.dati.gov.it/
7)数据美国:https://datausa.io/
更多POI数据资源总结可参考:https://zhuanlan.zhihu.com/p/559035881。
2.2 POI的算法挖掘
随着各类移动互联网业务的发展,从大众渠道获取的垂直行业/某种具体商业场景相关POI往往已经无法满足业务需求,相对而言,其POI覆盖率、时效性等是偏官方类渠道滞后的,对于互联网图商或是场景业务运营方需要直接通过其他手段去挖掘补充。
对于蚂蚁而言,当前POI数据是通过调用高德地图数据(蚂蚁与集团数据断流后已经不能使用)以及外部爬虫爬取百度、大众点评等方式来汇总各种来源的POI,过度依赖于外部数据源,缺少属于蚂蚁自己生产的POI。在集团数据断流以及亟待建立自己完整的POI生产链路的背景下,我们提出从蚂蚁丰富的底层数据中建立生产挖掘POI的完整链路,以建立蚂蚁自己的经营POI库。POI挖掘的大致流程[1]:
2.2.1 基于地址文本NER的POI识别
命名实体识别(NER, Named Entity Recognition),是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。各类地址文本是POI挖掘的重要数据源,如用户收货地址、商家注册地址等,从文本地址中识别POI热点实体的核心技术就是NER。
NER是NLP中一项非常基础的任务,是信息提取、问答系统、句法分析、机器翻译等众多NLP任务的重要基础工具。命名实体一般指的是文本中具有特定意义或者指代性强的实体,学术上通常包括实体类,时间类,数字类三大类和人名、地名、组织机构名、时间、日期、货币、百分比七小类。NER就是从非结构化的输入文本中抽取出上述实体,并且可以按照业务需求识别出更多类别的实体。从自然语言处理的流程来看,NER可以看作词法分析中未登录词识别的一种,是未登录词中数量最多、识别难度最大、对分词效果影响最大问题。同时NER也是关系抽取、事件抽取、知识图谱、机器翻译、问答系统等诸多NLP任务的基础。
(1)NER技术发展史
命名实体识别从早期基于词典和规则的方法,到传统机器学习的方法, 后来采用基于深度学习的方法,一直到当下热门的注意力机制、图神经网络等研究方法, 命名实体识别技术路线随着时间在不断发展。这里推荐网友Running Snail关于NER发展史的总结--NER三部曲[11]:
(2)文本NER主要算法[8]
1)基于规则和字典的方法
基于规则的NER系统依赖于人工制定的规则。规则的设计一般基于句法、语法、词汇的模式以及特定领域的知识等。词典是由特征词构成的词典和外部词典共同组成,外部词典指已有的常识词典。 制定好规则和词典后,通常使用匹配的方式对文本进行处理以实现命名实体识别。
当字典大小有限时,基于规则的NER系统可以达到很好的效果。由于特定领域的规则以及不完全的字典,这种NER系统的特点是高精确率与低召回率,并且类似的系统难以迁移应用到别的领域中去:基于领域的规则往往不通用,对新的领域而言,需要重新制定规则且不同领域字典不同。所以这种基于规则的方法局限性非常明显,不仅需要消耗巨大的人力劳动,且不容易在其他实体类型或数据集扩展。
2)基于传统机器学习的方法
在基于机器学习的方法中, 命名实体识别被当作是序列标注问题。与分类问题相比,序列标注问题中当前的预测标签不仅与当前的输入特征相关,还与之前的预测标签相关,即预测标签序列之间是有强相互依赖关系的。采用的传统机器学习方法主要包括:
- 隐马尔可夫模型(Hidden Markov Model, HMM)
HMM对转移概率和表现概率直接建模,统计共现概率。更适用于一些对实时性有要求以及像信息检索这样需要处理大量文本的应用,如短文本命名实体识别。
- 最大熵(Maximum Entropy, ME)
ME结构紧凑,具有较好的通用性, 其主要缺点是训练时间复杂性非常高,甚至导致训练代价难以承受,另外由于需要明确的归一化计算,导致开销比较大。
最大熵马尔可夫模型(Maximum Entropy Markov Model, MEMM) [15]
MEMM对转移概率和表现概率建立联合概率,统计条件概率,但由于只在局部做归一化容易陷入局部最优。
支持向量机(Support Vector Machine, SVM)
SVM在正确率上要比HMM高一些,但是HMM在训练和识别时的速度要快一些。 主要是由于在利用Viterbi算法求解命名实体类别序列的效率较高。
- 条件随机场( Conditional Random Fields, CRF) 等。
CRF模型统计全局概率,在归一化时考虑数据在全局的分布,而不是仅仅在局部进行归一化, 因此解决了MEMM中标记偏置的问题。 在传统机器学习中, CRF被看作是命名实体识别的主流模型, 优点在于在对一个位置进行标注的过程中CRF可以利用内部及上下文特征信息。 但同时存在收敛速度慢、训练时间长的问题。
3)基于深度学习的方法
近年来, 在基于神经网络的结构上加入注意力机制、图神经网络、迁移学习、远监督学习等热门研究技术也是目前的主流研究方向 。NER使用深度学习的原因主要是:1.NER适用于非线性转化。2.深度学习避免大量的人工特征的构建,节省了设计NER功能的大量精力。3.深度学习能通过梯度传播来训练,这样可以构建更复杂的网络。5. 端到端的训练方式。
- BiLSTM-CRF
BiLSTM-CRF直观显示了模型结构与优势,其中BiLSTM通过前向/后向传递的方式学习序列中某字符依赖的过去和将来的信息,CRF则考虑到标注序列的合理性。模型主要由Embedding层(主要有词向量,字向量以及一些额外特征),双向LSTM层,以及最后的CRF层构成。在特征方面,该模型继承了深度学习方法的优势,无需特征工程,使用词向量以及字符向量就可以达到很好的效果,如果有高质量的词典特征,能够进一步获得提高。引入双向LSTM层作为特征提取工具,LSTM拥有较强的长序列特征提取能力。双向LSTM,在提取某个时刻特征时,能够利用该时刻之后的序列的信息,无疑能够提高模型的特征提取能力。引入CRF作为解码工具。中文输入经过双向LSTM层的编码之后,需要能够利用编码到的丰富的信息,将其转化成NER标注序列。通过观察序列,预测隐藏状态序列,CRF无疑是首选。
这些优势使得论文模型在当时取得SOTA结果,已经达到或者超过了基于丰富特征的CRF模型,成为目前基于深度学习的NER方法中的最主流模型。
- IDCNN-CRF
论文Fast and Accurate Entity Recognition with Iterated Dilated Convolutions提出在NER任务中,引入膨胀卷积,一方面可以引入CNN并行计算的优势,提高训练和预测时的速度;另一方面,可以减轻CNN在长序列输入上特征提取能力弱的劣势。具体使用时,dilated width会随着层数的增加而指数增加。这样随着层数的增加,参数数量是线性增加的,而感受野却是指数增加的,这样就可以很快覆盖到全部的输入数据。IDCNN对输入句子的每一个字生成一个logits,这里就和BiLSTM模型输出logits之后完全一样,再放入CRF Layer解码出标注结果。
- CAN-NER
Convolutional Attention Network for Chinese Named Entity Recognition(NAACL 2019)提出了用基于注意力机制的卷积神经网络架构。
采用一种卷积注意网络CAN,它由具有局部attention的基于字符的CNN和具有全局attention的GRU组成,用于获取从局部的相邻字符和全局的句子上下文中信息。首先模型输入的是字符,卷积注意力层用来编码输入的字符序列并隐式地对局部语义相关的字符进行分组。对输入进行向量嵌入,包含字向量、分词向量和位置向量,得到输入向量后,采用局部 local attention来捕捉窗口范围内中心词和周围词的依赖,局部 attention 的输出被送到 CNN 中,最后采用加和池化方案。得到局部特征后,进入到BiGRU-CRF 中,而后采用全局的 attention来进一步捕捉句子级别的全局信息。后面接 CRF,得到分类结果。self-attention 可以捕捉广义的上下文信息,减少无用中间词的干扰。
- Lattice LSTM(针对中文的NER)
中文的NER与英文不太一样,中文NER问题很大程度上取決于分词的效果,比如实体边界和单词的边界在中文NER可题中经常是一样的。所以在中文NER问题中,有时通常先对文本进行分词然后再预测序列中单词的类别。这样一来会导致一个问题,即在分词中造成的错误会影响到NER的结果。基于字向量的模型能够避免上述问题,但因为单纯采用字向量,导致拆开了很多并不应该拆开的词语,从而丢失了它们本身的内在信息。
《Chinese NER Using Lattice LSTM》提出一种用于中文NER的LSTM的格子模型,与基于字符的方法相比,该模型显性地利用词和词序信息;与基于词的方法相比,完整的嵌入词语信息因此 lattice LSTM 不会出现分词错误。门控循环单元使得模型能够从句子中选择最相关的字符和词,以生成更好的 NER 结果。但是,此模型对于一些新的词语效果不理想。
- 引入BERT及attention
论文《Multilingual Named Entity Recognition Using Pretrained Embeddings, Attention Mechanism and NCRF》在NCRF和BiLSTM中间加入了一层Multihead Attention,并用BERT来获取上下文词表示,然后设计了一个多任务结构来学习多语言NER。
(3)常用NER工具
- Stanford NER
斯坦福大学开发的基于条件随机场的命名实体识别系统,该系统参数是基于CoNLL、MUC-6、MUC-7和ACE命名实体语料训练出来的。地址:The Stanford Natural Language Processing Group,python实现的Github地址:GitHub - Lynten/stanford-corenlp: Python wrapper for Stanford CoreNLP.。
- MALLET
麻省大学开发的一个统计自然语言处理的开源包,其序列标注工具的应用中能够实现命名实体识别。 官方地址:Mallet: MAchine Learning for LanguagE Toolkit | Mallet。
- Hanlp
HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。支持命名实体识别。 Github地址:GitHub - hankcs/pyhanlp: 中文分词,官网:http://hanlp.linrunsoft.com/。
- NLTK
NLTK是一个高效的Python构建的平台,用来处理人类自然语言数据。Github地址:GitHub - nltk/nltk: NLTK Source官网:NLTK :: Natural Language Toolkit。
2.2.2 POI类目挖掘
POI类目挖掘是POI挖掘的重要组成部分,尤其是对经营性POI的类目挖掘,经营性POI类目的准确性往往是运营开展业务的基础,但因POI数据源的多样性,往往POI类目分类混杂,甚至类目缺失,各业务造成推进造成较大干扰。POI类目挖掘的核心技术是文本分类,这里直接参考Google和Microsoft合著的论文Deep Learning Based Text Classification: A Comprehensive Review(2020, April)中关于文本分类的综述小结:
2.2.3 高德POI地址挖掘
虽然经纬度能更精确地表示POI的空间位置,但在很多与用户交互场景中,尤其是无地图参照场景中,用户对经纬度是无感的,明确的文本地址才能更好地表示和传达POI空间位置信息。
地址是对POI空间位置信息的文本描述,地址的使用场景丰富,邮寄物品、日常出行中主体建筑或街道的定位等都会使用到地址。准确的地址能更好地辅助用户做出行决策,如商业楼楼层、xx地标、地铁站旁等地址,可以为用户提供目的地末端的精确到达指引[5]。
这里仅以高德POI地址挖掘为例,简介不同类型POI地址挖掘的思路。
(1)POI地址挖掘策略思路:
(2)POI地址挖掘策略详解:
以道路交叉口和门类型POI地址为例,挖掘策略如下:
case1:道路交叉口附近POI挖掘策略
keyPoint:路网服务返回的道路数据并不直接包含交叉口,需要通过道路的fromId和toId进行聚类,然后将道路组装成交叉口。
case2:门类型POI地址挖掘
keyPoint:获取门子点,利用目标POI的父点找到该父点下的所有门子点,或者利用目标POI的AOI找到该AOI覆盖的所有门子点,然后按照到目标POI距离排序,找到最近的门子点。
更多策略详解,可参考高德ATA原文《高德POI地址挖掘计算方法详解》。
2.2.4 蚂蚁POI挖掘实践
(1)基于短文本地址NER识别POI及其经营属性
蚂蚁地址文本挖掘POI中建模目标是提取出地址中的经营性POI,所以单纯提取出实体名称不能满足要求,还要判断实体的性质,比如“医院”、“图书馆”、“沁雅花园小区”等属于非经营性POI,“世纪华联超市”、“绿茶餐厅”属于经营性POI。有两种解决方式:
1.建立两个模型:分类模型负责预测是否含有经营性质的POI,NER模型负责提取出POI实体名称。最终预测结果综合考虑两个模型的输出。模型结构如下图所示,其中model1和model2是两个独立模型,采用相同的bert模块,输出层分别是softmax层和CRF层。
2.建立单个NER模型,将POI标签细分成多个细粒度poi,包括shop_poi、resident_poi、company_poi、gov_poi等多个细粒度POI实体标签。
在细粒度NER模型的实践过程中,多粒度标签的建立既要依赖领域知识,对POI性质从业务需求的角度进行粒度划分,也需要通过实验来验证是否合理。在整个实验过程中,分别尝试了2个、3个、4个、5个细分粒度的标签体系,粒度越细,NER准确率越高,但可能会使召回下降。最终取4个细分粒度的标签体系:经营类、住宅类、公司类、政府类。
对比多模型和细粒度NER发现,多模型由2个输出决定最终预测结果,显著增加了NER的预测准确率,可以达到0.91,但是降低了召回率;单模型在综合指标F1上表现更优,相对于多模型,细粒度NER在预测标签类别的时候,会参考NER提取的标签名称,综合取得了更优的效果。
类型 | P | R | F1 |
单模型 | 0.84 | 0.83 | 0.84 |
多模型 | 0.91 | 0.73 | 0.81 |
(2)蚂蚁POI类目挖掘与应用
- 蚂蚁经营性POI类目挖掘
经营性POI是一些具有经营性质的兴趣点,例如餐饮、购物、住宿等。POI组成的要素包含名称、坐标(经纬度)、文本地址、类目等,其中,对类目的挖掘是建设POI画像十分关键的一部分。POI类目是一个层级性的结构,同时对POI类目的预测需要对POI文本中的语义信息进行挖掘,因此POI类目挖掘是层级性多元标签文本分类的重要场景之一。算法总体逻辑如下图所示,输入为POI名称和原始类目。输出为预测的三级类目。
蚂蚁经营性POI类目挖掘模型及其迭代过程:
提出了基于层级性多元标签文本分类和图卷积神经网络的POI类目挖掘模型,对模型进行的三次迭代使模型在一级/二级/三级类目粒度下的准确率分别提升了3%/11%/12%,因此,对标签层级关系的学习、引入原始类目和调整损失函数权重的优化方法都被证明是有效的。最终POI类目预测在一级/二级/三级类目粒度下的准确率达到了98%/93%/92%,覆盖率为100%。
更多详情,可参考ATA原文《层级性多元标签文本分类和图卷积神经网络在POI类目挖掘中的应用》,另也包括另一篇文章《文本多分类在商户POI类目预测中的应用》。
3 POI质量保证
POI库的质量保证主要通过POI过期识别算法识别并下线过期POI以维护POI质量。事实上,存在大量的处于模型识别模糊区域的POI,通过现有证据无法精准的判断其已经过期,但实际上已经过期或本身就是虚假POI,导致POI库整体的可找到率偏低,无法满足地推业务对leads质量的要求。在蚂蚁地推业务的实践中发现,同类产品(如大众点评数据、高德数据),如果直接作为leads引导地推人员作业,都存在可找到率过低(50%左右)的问题,严重影响作业人效[13]。
3.1 POI质量测评维度
POI位置数据质量的维度包括:
(1)覆盖率 覆盖率通常是指用户是否可以在系统中建立业务目标的位置的POI覆盖用户需求的空间位置的比例。例如美团,饿了么这样的系统,如果POI无法覆盖到的区域,客户就无法下单,这么也就等于丢掉了这一区域的市场。所以POI的覆盖率是核心的指标。 (2)准确率 准确率是指位置偏差的POI占总POI的比例。其中POI位置偏差是指,其POI在系统中的经纬度不在POI在现实世界中的边界内或者边界上。在拓扑结构上来说是点和多边形的关系中不满足相交的结果。因为很难验证所有POI的经纬度和其代表的对象在现实世界中的边界的拓扑关系,因此,进行随机抽样来验证是比较好的手段,错误的POI位置会让用户找到目标增加困难。因此像点评这类的店铺导流系统或者美团外卖这种骑手取餐的位置,其店铺的准确率也是很关键的数据质量维度。
(3)精度 一个称的精度是指能保持重量准确的范围。例如烘焙要用0.5g的材料,使用精度是1g的称是无法完成任务的。同样POI的精度是指系统中POI的位置在准确的范围大小,一般可以用米来衡量,POI的精度从几十米到几百上千平米不等。一般来说精度越高的位置收集所付出的成本越高,并且成本可能会呈指数级增加。 精度的要求一般取决于应用的场景,目前人工的快递和送餐对精度的要求其实很高,只是这最终一部分高精度的数据收集成本转嫁给了外卖员,例如外卖员要自己打听东方名城47号楼在小区的确切位置,但是无人送餐的无人机或者送货车就无法这么做,那么这部分POI的位置精度收集成本就无法转嫁了。
(4)唯一性 同样的POI不能有多个位置。因为如果搜索某个POI的名称出现多个位置,会让用户造成选择困难,有时候这就是错误。因此POI位置应该尽量做到是惟一的,而不是多个。
(5)及时性 及时性是指在POI有其生命周期,当POI产生和消亡的时候,能够及时更新。在美团、饿了么、蚂蚁商家等APP上对于新开店铺的POI数据捕捉能力以及关闭的店铺的更新能力是非常重要的。可以用天,周甚至月来衡量。
3.2 POI质量测评方式与建模实例
3.2.1 POI质量模型及其应用实践
(1)POI质量的特征刻画
蚂蚁从POI活跃程度和POI信息质量两个角度刻画POI质量,这些特征最后经过一个统一的lightGBM模型,输出最终的质量得分[13]。
- 活跃程度的刻画:
1.支付宝交易: pid/smid交易笔数、网格内交易笔数、同环比
2.收货地址: 收货次数
3.高德: 点击数、导航数
4.大众点评: 评论数、评分、关店标记
5.口碑:评论数、评分、关店标记
- 信息质量的刻画:
1.多源交叉验证:收录源数量(Onehot)
2.MCC类目(Categorical)
3.信息质量(店名长度、地址长度)
构建lightGBM模型后,得出POI质量模型特征重要性如下:
(2)POI质量的特征刻画蚂蚁POI的质量
与蚂蚁BI团队天机阁项目合作,通过线下巡检的方式,评估POI质量(可找到率)。通过网格化采样的方式,在129个城市采样了2000+网格,回收20000+反馈样本,得到POI质量的可信评测结论。下图展示的是按质量分排序后TOP POI的数量与POI可找到率的关系。达到80%准确率(地推业务通常要求的准确率)的POI数量达到了2300万,这已经是非常可观的leads候选池。我们的数据已经很好的满足了蚂蚁集团包括花呗分期地推、红包码地推、扫码点餐地推在内的多个地推场景。
3.2.2 POI时效性预测建模实践
从集团各业务线POI使用体验来看,POI过期是伤害用户的绝对头部问题,一个POI过期了会给用户带来“找不到、关门”等恶劣伤害,尤其在景点、医院、政府机构等刚需品类下更恶劣。POI的时效往往需要融合多源数据进行建模验证,这里从高德和本地生活实例来看。
(1)高德POI过期识别
- 特征数据源
特征方面主要采样时序特征和辅助特征两方面,主要包括POI和评论、运单地址以及用户周边定位等挂接关系,并分别整合为月级的统计量值,作为时序特征;辅助特征包括人工核实历史数据、POI行业类型过期概率统计值、业务反馈的热度0值POI等。
- 模型迭代
深度学习在高德过期挖掘场景中的落地,经历了不断摸索尝试、总结问题、优化方案、验证效果的迭代演进的过程。期间以提升过期发现能力为核心目标,对特征扩展、特征构造和模型结构优化的角度都进行了探索,并总结了如上的业务场景落地经验。其中丰富可靠的特征、合适的特征表征方式,和符合业务的模型结构设计是提升业务问题解决能力的关键。更多详情,可参考原文《深度学习在高德POI时序过期挖掘中的演进总结》。
(2)阿里同城零售POI过期识别
阿里同城零售在ATA上有2篇关于过期POI识别的文章,分别是《基于多源用户时空行为转移的过期POI挖掘》和《POI过期挖掘多源图算法》,2者均是通过构建POI节点图结构利用图表征学习算法来识别POI的过期与否的判别。
- 前者建模思路是提取用户与POI在30天内的动态关系来构建特征,包括距离特征、用户行为序列特征和其他统计特征:
用户时空行为转移模型是对集成多源数据进行POI过期挖掘的进一步尝试,在模型开发过程中,从POI过期现象对应的真实世界用户的活动情况出发,解决了诸多业务难点如权重用户、距离分布特征表达等问题,模型具有如下几大优势:
1) 过期POI挖掘准确率显著提升,实现了全段位产出进行自动化处理;
2) 以滑动窗口形式灵活组织特征,能够进行天级滚动挖掘,实现了发现提频;
3) 可扩展性强,可以引入更多的数据资料扩,进一步提升挖掘准度。
- 后者(POI过期挖掘多源图算法)则把阿里生态的多源异构大规模用户数据(如运单地址、饿了吗、菜鸟面单、支付交易)与高德现有POI建立关联。思路如下:
1) 多源异构融合。将淘系运单、菜鸟面单、WIFI和用户不同行为等多个不同形式的信息进行整合,地址信息、POI信息、WIFI、用户行为等都可以用节点表示,相互之间的关系用边来表示(比如POI上有对应的WIFI信息、用户使用了这个WIFI、用户下了一个地址的订单、用户和用户之间是同事等等);
2) 超大规模图网络。采用基于大量数据在图上训练embedding信息后,节点之间的关系(比如POI节点和一个新的地址节点之间是否可以连接)就可以用link prediction或者节点相似度这种模型进行进一步推导,从而可以大幅提升POI和地址挂接的准确度和效率。
模型结构图:
图嵌入算法选用GeniePath,在广度上使用基于Graph Attention的Breadth Function聚合邻居节点的特征,在深度上使用类LSTM的Depth Function对不同距离的邻居特征进行筛选。最终该方案也取得了较好的业务效果及在多源异构和超大图网络等方面多项技术创新。
3.2.3 POI重复识别建模实践
POI除了时效性/过期问题,POI重复/唯一性问题也是业务另一个重要痛点。如下图所示,重复的POI在“名称”、“文本地址”、“坐标”三个要素的描述上通常有一定差异,但实际上指代的是相同的地理实体。算法同学的首要任务是识别出这些重复的POI,生成一个尽可能不重复的POI库。
- 问题定义
POI数据的重复识别,与经典的短文本匹配问题有一定差异。主要体现在:
1)文本为半结构化文本(名称-分名称-地址三段式)
2)文本附有地理坐标信息
对于这类附有地理空间信息的短文本匹配问题,我们将其称为“空间短文本匹配”。“空间短文本匹配”与经典短文本匹配问题相似,同样需要Rewrite、召回、重复pair识别几个关节,但在每个环节的具体做法上也有一定差异。具体来说,我们在Rewrite、召回和重复pair识别这三个环节,对POI数据的文本结构格式(名称-分名称-地址三段式)做了特别适配,以充分利用POI的半结构化文本信息;同时,我们也引入地理空间信息(也即POI的坐标),来辅助重复数据的识别。
- 算法方案流程 POI重复识别全流程分为五个核心步骤: 1)Rewrite: 将原始POI数据进一步结构化,生成标准的POI格式数据 2)相似pair召回:给每个POI召回潜在的重复POI,形成重复POI候选pair 3)粗筛:基于LightGBM模型和统计特征,初步过滤pair 4)重复pair识别:使用深度学习模型精准判断pair中的两个POI是否重复 5)重复POI聚合:将重复的POI以边相连,通过最大联通子图算法,识别出重复POI组。每组中只保留一个POI,其余删除。
- 召回与pair重复性建模识别
其中召回环节文本+地理网格召回,然后引入BERT预训练语言模型。BERT本身可以用于类似Q&A的文本匹配问题,因此天然适合POI文本是否重复的判断。但是,由于BERT仅从文本的角度判断是否重复,忽略了两个POI空间上的相邻关系,因此需要我们在BERT的基础上进行一定改造,引入空间距离信息。
具体来说,整个神经网络分为两路输入,一侧是BERT结构,考虑文本相似度信息;另一侧考虑地理空间相似度信息。两路输出最终通过一个MLP,汇总为最终的POI相似度打分。
BERT侧负责文本相似度判断。输入格式参考BERT中Q&A类问题的输入格式,将pair中A、B两个POI的信息进行拼接。同时,需要适配POI文本所特有的格式(“名称-分名称-地址”的格式)。我们最终确定的输入格式为“[CLS] A名称(A分名称);A地址 [SEP] B名称(B分名称);B地址 [SEP]”。经过BERT的transformer结构后,“CLS”位置上会输出A、B两个POI文本相似度的向量表征。另一侧负责空间相似度的判断。另将两个POI的地理距离按照5米为一个层级进行分桶,通过embedding lookup操作,给出每个距离层级的向量表征。BERT语义相似度向量表征、空间距离的向量表征,同时作为最终的决策神经网络(MLP)的输入。MLP综合两路信息,给出两个POI是否重复的最终判断。
将POI重复识别问题抽象为“空间短文本匹配”问题。在Rewrite、召回、重复pair识别三个环节,我们在经典NLP方法的基础上引入了地理空间信息,较好的解决了POI重复识别问题。更多详情,可参考蚂蚁ATA原文《蚂蚁POI系列二:短文本匹配实践——POI重复识别》。
4 参考文献:
[1]spm=ata.23639746.0.0.47ea3437R3gYVC
[2]https://ata.alibaba-inc.com/articles/203528?
[3]https://zhuanlan.zhihu.com/p/559035881
[6]https://www.zhihu.com/question/25871405
[7]https://zhuanlan.zhihu.com/p/351132129
[8]https://zhuanlan.zhihu.com/p/409489496