导读

POI是“Point of interest”的缩写,中文可以翻译为“兴趣点”。在地图上,一个POI可以是一栋房子、一个商铺、一个公交站、一个湖泊、一条道路等。在地图搜索场景,POI是检索对象,等同于网页搜索中的网页。在地图客户端上,用户选中一个POI,会有一个悬浮的气球指向这个POI。

poi信息采集(地图POI类别标签体系建设实践)(1)

如上图左边,这家商场内的屈臣氏是一个POI;而所谓类别标签,就是在类别维度对POI属性的一种概括,比如,屈臣氏的类别标签化妆品,而屈臣氏所坐落的凯德mall,类别标签是商场;右侧则是商场query搜索召回的一系列POI,都具有和query相匹配的类别属性。

上图也展示了类别标签的两种主要使用场景:为用户提供丰富信息和支持决策,一方面在前端为用户显示更丰富的信息,另一方面支持搜索的类别搜索需求,主要是在地图场景query和POI双方都具有丰富的多义表达,通过传统的文本匹配引擎或者简单的同义词泛化是难以达到目的的,因此挖掘标签作为召回和排序依据。

我们的类目体系建设主要依据以下几点:

最终每个大类将构建一个多层的多叉树体系,比如购物类别的划分:

poi信息采集(地图POI类别标签体系建设实践)(2)

类别标签建设的难点

我们的目标是打标,就是将POI映射到上面类目树体系的各个节点上,很显然这是一个分类问题,但又不是一个单纯的分类问题:

此外,应用方对于标签的准召和产出速率也有较高的要求:打标准确率低,则可能导致用户搜索时召回错误POI;覆盖率低,则可能导致用户期待的结果被漏掉;而待建设的大分类有20 ,同时每个大分类有数十个子标签,大小标签总量上千。则必须使用高速高效、准召均有保障的方法进行打标,才能有效落地收益。

综上,我们要解决的类别标签打标的主要问题,是一个多标签分类问题,主要使用文本进行识别,但有必要引入其他非文本特征或手段,才能比较完满的解决。

技术方案

整体方案设计

poi信息采集(地图POI类别标签体系建设实践)(3)

如图,为了高效完成打标,我们设计了主要的流程模块,具体描述如下:

后面将重点介绍业务的主要难点,在样本和模型上的主要工作。

样本工程

样本来源&清洗

样本方面,经过一些实验论证,标签数量多,每个标签需要的样本量大,人工标注几乎不可能满足要求,因此考虑主要使用点击日志和一些现成的外部资源:

通过引入这两方面的样本,我们很快得到了数百万的原始样本,这么大量级的样本,即使清洗依然是一个及其巨大的工作量,为了高效地清洗样本,我们设计了结合主动学习的两级模式:

poi信息采集(地图POI类别标签体系建设实践)(4)

在两方面的初始样本引入后:

通过一种类似主动学习的方式,使人工标注的价值最大化,避免低信息量重复样本的反复标注造成人力浪费。

下面具体介绍点击样本的挖掘思路。

点击样本挖掘

搜索点击日志凝聚了无数用户的需求与智慧,大多数的搜索业务都能从中挖掘最原始的训练样本。具体到当前的挖掘业务,首先要解决的问题是样本表达形式的不一致问题。具体描述为:

点击数据:query -> POI 需要样本:tag -> POI 解决方案:tag -> query -> POI

如下图,要挖掘内衣的样本集,人工定义了该标签的映射的query集合seed query,再通过这个query集合去召回对应的click样本,就可以直接作为标签内衣的样本。

poi信息采集(地图POI类别标签体系建设实践)(5)

在实际操作中,我们增加了seed query到泛化集合的映射,即由人工定义的高频query集合泛化到一个更大的同义集合后,再由同义集合进行click样本的召回,其出发点在于:

高频的query主要点击集中于高频的样本,要解决的问题难点在于低频表达的挖掘,因此对query进行从高频到低频的泛化,以期通过低频query召回低频的样本表达,比如丝袜到休闲棉袜,内衣到维密、都市丽人等方面的扩展。

query泛化过程:

query的泛化,需要通过高频集合获得近义的低频表达,同时又要保证不会过度的语义扩散,导致泛化集合偏离了标签原本的语义。我们主要尝试了以下方案:

  1. SimRank,通过query与POI间的点击关系形成二部图,两个节点间的相似度由他们共同关联的其他所有点加权平均得到,通过反复迭代多轮后,相似度趋于稳定,得到两两query间相似度;

poi信息采集(地图POI类别标签体系建设实践)(6)

a、b表示图中的两个节点,定义自相关度为1,即s(a, a)=1,I(a)、I(b)表示与ab相连的节点集合,对于不同的a、b,其相似度描述为:

poi信息采集(地图POI类别标签体系建设实践)(7)

  1. DeepWalk,是一种学习网络中节点的表示的新的方法,是把language modeling的方法用在了网络结构上,从而使用深度学习方式学习网络中节点间的关系表示。类似simrank方式,通过query与POI间的点击关系构成点击网络,在点击网络上进行随机游走,通过对游走片段的学习,得到query的向量表达,再通过向量表达计算query的相似召回。

poi信息采集(地图POI类别标签体系建设实践)(8)

推荐方法的两种方案中,simrank计算量极大,在小数据量上实验经过了较长时间的迭代,而数千万点击数据计算资源和计算时间都将变得极大,成本上不合算;而DeepWalk随机游走方式在实际测试中取得了较好的效果:

poi信息采集(地图POI类别标签体系建设实践)(9)

比如,原始query为涂料,泛化得到其子分类、品牌等,ETC可以得到一些地方性的命名表达。

不同于将query分词后学习其word粒度embedding表达,DeepWalk在这里直接学习整个query,即Sentence的表达,避免了将query分词为多个word再pooling过程中语义偏移;而且直接query粒度的表示学习,得到的挖掘结果更加符合线上的实际表达,便于我们后续召回点击POI样本的操作;同时粗粒度的学习对网络节点间社会关系会有更优的保留。

整体上,通过query泛化步骤,样本集合的低频表达比例明显提升。

模型设计与迭代

使用分类的方式解决打标问题,是业类相似场景的通用做法。具体到业务角度,我们需要模型解决的打标数据范畴主要分为四类:

前三类可以使用纯文本分类模型,但非文本特征无法直接用文本模型进行整合;同时,样本数据在前期具有噪声大、分布不均衡的特点,都需要兼顾。

分层多分类

前期使用多分类模型解决分类问题,对于每一个非叶节点构建一个多分类器,从根部开始构建,分到最后一级输出为叶节点。其特点是直观,和标签体系比较匹配。

这种方式有比较明显的缺陷:方案结构复杂不稳定,维护难,样本组织相当繁杂;上级分类模型的错漏,将层层影响下级的分类效果。

每个标签二分类

业务前期受限于优化前的搜索效果,样本集有一定量的噪声,同时体系在调研期间也会时常迭代,不断优化,需要一个解释性强、兼容变化,同时又能直接支持多标签的模型。

因此,我们尝试了对每个标签训练二分类模型,待识别的POI经过所有的二分类模型预测后结果合并使用,再进行后续的业务逻辑建设,该方式较好地解决了业务多标签的场景,避免同一POI多个标签间的冲突。

在样本方面,使用ovr方式组织样本,样本比例可调整(正负例比例、负例来源比例等),兼容了业务样本不均衡问题。

统一模型

单标签的二分类模型具有良好的解释性,以及每个标签建模带来的灵活性,很好匹配了业务的前期需求,迅速推进标签效果落地,线上恶劣case大量收敛,同时较原来的人工专家规则方式,召回明显提升的同时,效率也提升十倍以上。

前期为了短平快地推进业务,使用简单二分类模型迅速解决了主要问题,随着搜索效果的不断提升,业务上也有了更高的质量要求,而LR二分类模型依然存在一些问题:

为了达到更好的效果,深度模型的升级有了必要,深度文本分类,常用的模型有cnn、rnn以及基于attention的各种模型,而attention模型主要解决的是长文本的深层语义理解问题,我们业务场景需要解决的是短文本简单语义的泛化问题,同时考虑到需要和非文本特征结合,以及分类效率方面的考虑,我们选择textCNN模型。

而textCNN是一个纯文本的多分类模型,不能解决多标签情况,也无法兼容非文本特征,同时样本不均衡问题也导致小样本类别学习不充分。为了匹配实际的业务,我们对原始的textCNN进行了业务改造,如图:

poi信息采集(地图POI类别标签体系建设实践)(10)

原始textCNN对文本进行词嵌入、卷积核池化后,直接进行softmax多分类,而在当前业务下:

如此,解决了多标签场景&非文本特征接入的问题,同时使用深度模型取得更好的泛化效果。

另一方面,所有样本在同一模型中训练,原本样本不均衡问题造成了一些负面影响。比如大类家居建材、服饰鞋包有数十万的样本,而劳保用品、美容美发用品等标签只有几千样本,在训练时很容易直接丢弃对整体准确率影响较小的小样本集。因此对每个样本集计算权重:

poi信息采集(地图POI类别标签体系建设实践)(11)

k为k类别的样本数,h为平滑超参,效果上类别样本数量越少,权重越大。将类别权重加入到损失函数:

poi信息采集(地图POI类别标签体系建设实践)(12)

λ1、λ2分别代表对文本特征和非文本特征的正则化约束比重因子。

经过改造和优化后:

poi信息采集(地图POI类别标签体系建设实践)(13)

以上几个标签间样本数量差距极大,但分类效果都维持在一个比较高的准召率上。此外,我们还根据改造后的模型,开发了模型解释工具。对于一些不符合预期的case,通过解释工具,可以直接观察:

通过该工具可以在使用深度模型预测时,保持如同LR一般的解释性,方便定位与迭代。

总体上经过以上textCNN的业务改造与迭代,随机数据准确率提升5%以上,同时业务规则减少66%,同时在长尾case(低频文本、品牌)上取得比较明显的效果。

poi信息采集(地图POI类别标签体系建设实践)(14)

相关工作

前面主要介绍了我们在类别标签建设方面的一些工作。

在另一方面,类别标签在地图搜索中生效,则需要识别哪些query需要使用标签进行召回。在前期,我们人工标注了高德地图搜索头部query和标签的对应关系。但人工的标注方式始终覆盖有限:

因此,在完成体系建设后,我们另外建模,主要使用文本语义和点击方面的特征,识别query和标签的对应召回关系,即识别哪些query可以使用类别标签召回,通过这一系列的工作,对中低频的标签召回进行了深挖,高德地图中类别搜索流量中使用标签召回比例高达94%。

收益

标签数据产出后,需要进行两方面的评估:

poi信息采集(地图POI类别标签体系建设实践)(15)

高质量的数据,不光利于搜索的业务支撑,还利于我们的类别标签体系在整个BU的推广和落地。

除了数据质量的评估,还会结合新的标签数据对搜索效果进行评估,即对新标签体系和旧标签体系的对照效果评估。在人工效果评估中,gsb效果上,每个大类的数据上线,都带来了非常明显的类别搜索质量提升,从而让搜索更准确、更全面的辅助用户决策。

小结

当前工作的重点在于使用通用特征解决了主体的类别打标问题,对于通用特征不可解的问题,往往通过外部知识、资源的建设方式解决,如品牌库建设、A级景区资源收集等方式。

而实际上,使用通用特征外,不通用特征对于部分数据的分类效果提升应用并不充分,后续应该安排一系列的专项优化,比如:

在业务闭环建设上还要持续,比如恶劣case的流转与自动修复机制建设,新品牌、新标签的发现等问题,以避免打标系统长期运行后的效果退化等。

无论机器学习还是外部资源辅助的方式,对于海量的长尾数据往往乏力,实际线上很多的POI特征相当匮乏,只有一个简单的名称,从中很难准确预测其类别。如何引导用户自己提交类别信息,或者众包方式完成类别标签的标注,也是我们后续需要着重考虑的解决方案。

作者:高德技术小哥

,