『酒店』机器学习在马蜂窝酒店聚合中的应用初探( 二 )


但也正是因为这个方案太简单了 , 问题也同样明显 , 我们来看下面的例子 (图中数据虚构 , 仅为方便举例):
『酒店』机器学习在马蜂窝酒店聚合中的应用初探
图片

相信我们每个人都可以很快判断出这是两家不同的酒店 。 但是当机器进行整体的相似度计算时 , 得到的数值并不低:
『酒店』机器学习在马蜂窝酒店聚合中的应用初探
图片

为了降低误差率 , 我们需要将相似度比对的阈值提升至一个较高的指标范围内 , 因此大量的相似酒店都不会自动聚合 , 仍需要人工处理 。
最后 , 此版方案机器能自动处理的部分只占到约 30% , 剩余 70% 仍需要人工处理;且机器自动聚合准确率约为 95% , 也就是有 5% 的概率会产生 AB 店 , 用户到店无单 , 入住体验非常不好 。
于是 , 伴随着机器学习的兴起 , 我们开始了将机器学习技术应用于酒店聚合中的探索之旅 , 来解决实时性和准确性这对矛盾 。
Part.3
机器学习在酒店聚合中的应用
下面我将结合酒店聚合业务场景 , 分别从机器学习中的分词处理、特征构建、算法选择、模型训练迭代、模型效果来一一介绍 。
3.1 分词处理
之前的方案通过比对「整体名称、地址」获取相似度 , 粒度太粗 。
分词是指对酒店名称、地址等进行文本切割 , 将整体的字符串分为结构化的数据 , 目的是解决名称、地址整体比对粒度太粗的问题 , 同时也为后面构建特征向量做准备 。
3.1.1 分词词典
在聊具体的名称、地址分词之前 , 我们先来聊一下分词词典的构建 。 现有分词技术一般都基于词典进行分词 , 词典是否丰富、准确 , 往往决定了分词结果的好坏 。
在对酒店的名称分词时 , 我们需要使用到酒店品牌、酒店类型词典 , 如果纯靠人工维护的话 , 需要耗费大量的人力 , 且效率较低 , 很难维护出一套丰富的词典 。
在这里我们使用统计的思想 , 采用机器+人工的方式来快速维护分词词典:
1. 随机选取 100000+酒店 , 获取其名称数据;
2.对名称从后往前、从前往后依次逐级切割;
3.每一次切割获取切割词且切割词的出现频率+1;
4.出现频率较高的词 , 往往就是酒店品牌词或类型词 。
『酒店』机器学习在马蜂窝酒店聚合中的应用初探
图片

上表中示意的是出现频率较高的词 , 得到这些词后再经过人工简单筛查 , 很快就能构建出酒店品牌、酒店类型的分词词典 。
3.1.2 名称分词
想象一下人是如何比对两家酒店名称的?比如:
A:7 天酒店 (酒仙桥店)
B:如家酒店 (望京店)
首先 , 因为经验知识的存在 , 人会不自觉地进行「先分词后对比」的判断过程 , 即:
7 天--->如家
酒店--->酒店
酒仙桥店--->望京店
所以要想对比准确 , 我们得按照人的思维进行分词 。 经过对大量酒店名称进行人工模拟分词 , 我们对酒店名称分为如下结构化字段:
『酒店』机器学习在马蜂窝酒店聚合中的应用初探
图片

着重说下「类型前 2 字」这个字段 。 假如我们需要对如下 2 家酒店名称进行分词:
酒店 1:龙门南昆山碧桂园紫来龙庭温泉度假别墅
酒店 2:龙门南昆山碧桂园瀚名居温泉度假别墅
分词效果如下:
『酒店』机器学习在马蜂窝酒店聚合中的应用初探
图片

我们看到分词后各个字段相似度都很高 。 但类型前 2 字分别为:
酒店 1 类型前 2 字:龙庭
酒店 2 类型前 2 字:名居
这种情况下此字段 (类型前 2 字) 具有极高的区分度 , 因此可以作为一个很高效的对比特征 。
3.1.3 地址分词
同样 , 模拟人的思维进行地址分词 , 使之地址的比对粒度更细更具体 。 具体分词方式见下图:


推荐阅读