导读:高德地图拥有几千万的 POI 兴趣点,例如大厦、底商、学校等数据,而且每天不断有新的 POI 出现。为了维持 POI 数据的鲜度,高德会通过大量的数据采集来覆盖和更新。现实中 POI 名称复杂,多变,同时,名称制作工艺要求严格,通过人工来制作 POI 名称,需要花费大量的人力成本。
因此,POI 名称的自动生成就显得格外重要,而机器对商户挂牌的语义理解又是其中关键的一环。本文主要介绍相关技术方案在高德的实践和业务效果。
一、背景
现实世界中,商户的挂牌各式各样,千奇百怪,如何让机器正确的理解牌匾语义是一个难点。商户挂牌的文本种类有很多,如下图所示,我们可以看到一个商户牌匾的构成。
结合 POI 的名称制作工艺,我们目前将 POI 的牌匾的文本行分为 4 大类:主名称、经营性质(包括经营范围,具体的进行项目)、分店名、噪声(包括非 POI 文字,地址,联系方式),前面 3 个类别会参与到 POI 名称制作中。如上图所示的牌匾,它输出的规范名称应该是“世纪宏图不动产 (兴业路店)”。其中“世纪宏图”是主名称,“不动产”是经营范围,而“兴业路店”是分店名。
从牌匾中找出制作名称所需要的文字,不仅仅需要文本行自身的一些特征,还需要通过结合牌匾上下文,以及图像的信息进行分析。单纯的文本行识别会遇到下面的问题,如下图,在两个牌匾中都提到了“中国电信”,但是它们的意义是不一样的,这时必须结合上下文的理解。
二、技术方案
单纯从文本的语义理解的角度出发,那么这个应该是一个文本分类问题。但是直接的分类效果不佳。现实中在理解牌匾文本行语义的时候,需要结合图形,位置,内容,以及上下文关系综合来判断。为此,我们将商户挂牌理解的这个问题分解成两个子问题来解决,1.如何结合图像、文本、以及空间位置;2.如何结合上下文关系。因此,我们提出了 Two-Stages 级联模型。
2.1 Two-Stages 级联模型
Two-stages 级联模型分为两个主要的阶段:第一阶段提取单文本信息特征,包括文本位置和文本内容等,第二阶段提取牌匾中文本行上下文关系特征,消除只用单个文本识别容易造成的歧义,准确识别出该文本属性。
2.1.1 Stage One 单文本行特征提取
单文本行特征可以分为词性结构(token level)特征和句子语义(sentence level)特征。除此之外,位置信息(PV)也是比较重要的信息,需要进行特征提取和编码。将以上特征进行融合,得到了单文本行特征。
token level 层的特征提取方面,结合名称的构成以及名称工艺,我们定义了三种词性: 核心词©、通用词(U)、结尾词(T)。在这里我们使用 LSTM 网络来学习名称的词性序列。
sentence leve 层的特征提取方面,由于我们的标注量相对比较少,采用了具有大量先验知识的 BERT 模型。同时,为了更好的符合当前业务场景的需求,我们结合业务中 POI 的数据集合,在原来 Google 官方提供的预训练模型基础上继续 pre-training,得到新的模型 BERT-POI。
预训练的 POI 文本语料没有太多的上下文环境,在构造样本时,我们将两个 POI 名称串起来或是同一个 POI 随机切分,中间都用 SEP 隔开,进行多任务学习:缺字补全和预测两个文本行是否属于同一 POI。经过实验发现,在 POI 数据上预训练模型 BERT-POI 比 Google 发布模型 BERT-Google,缺字补全和同一 POI 判定两项任务上名,正确率高 20%左右。
此外,将预训练的模型用于下游属性识别任务上,BERT-POI 与 BERT-Google 相比,提升主名称,分店名,营业范围的召回 3%~6%。
下图展示了我们预训练的过程图:
随后,我们对预训练好的 BERT-POI 在进行了 finetune,提取出 sentence leve 层的特征。
2.1.2 Stage-Two 文本相互关系提取
Stage One 提取到了单文本行的特征,那如何去实现上下文的关联,我们加入了 Stage Two 的模块,模型结构如下:
Stage Two 最主要是用 BILSTM(Bidirectional LSTM)处理 stage one 输出特征,能够将当前文本特征和牌匾内其他文本特征进行学习,消除歧义。
三、业务效果
牌匾通过语义理解后,会根据具体的输出类型来制定名称生成的策略。例如:对于单主+噪声牌匾,我们直接将主名称作为 POI 名称,而对于单主+分店名+经营性质+噪声的牌匾,我们会分析主名称的结构,看是否需要拼接经营性质。
下图展示了当前我们牌匾语义理解和名称的部分拼接策略:
图 3.1 单主+噪声场景
图 3.2 单主+分店名场景
图 3.3 单主+经营性质场景(主名称中有经营性质)
图 3.4 单主+经营性质场景(主名称中无经营性质)
四、小结
目前商户牌匾语义理解模块的准确率在 95%以上,在 POI 的名称自动生成中起到的重要的作用。商户牌匾的语义理解模块只是 POI 名称自动化的一部分内容,在 POI 名称自动化中还会涉及到噪声牌匾过滤、牌匾是否依附建筑物、敏感类别、文本的缺失、名称生成、名称纠错等模块。我们会在图文多模态这块更深入的探索,更多地应用于我们现实场景中,生产更多、更高质量的数据。
评论