作者简介携程旅游研发部大数据和AI研发团队为旅游事业部提供了丰富的AI技术产品和技术能力。1.背景介绍搜索是电子商务最重要的方面之一。大多数用户通过搜索找到他们想要的产品。因此,搜索是用户表达意图最直接的方式,也是转化率最高的流量来源之一。绝大多数电子商务搜索都是通过在搜索框中输入搜索词(Query)来完成的。因此,对搜索词的意义分析和意图理解成为搜索的重要组成部分。主流搜索词义分析和query理解需要经过纠错、同义词替换、分词、词性标注、实体识别、意图识别、词重要度权重、词丢失等步骤。以旅游场景中的搜索为例,如图1所示,当用户在搜索框中输入“云南香里拉”作为查询词时,搜索引擎首先需要对搜索词进行修正,这是为了方便正确性的后续步骤。解析出用户试图搜索的内容;如有必要,还会执行同义词替换。然后,对搜索词进行分词和词性标注,识别出“云南”是一个省,“香格里拉”是一个城市或酒店品牌,然后进行实体识别,召回实体对应后台数据库id中的“云南”和“香格里拉”。这时,一个分歧出现了,“香格里拉”既可以是一个城市,也可以是一个酒店品牌。用户在搜索时,能否预测出正确的类别和实体,对于搜索结果的准确展示和用户体验的提升具有重要意义。因此,我们必须识别用户真正想要搜索的类别,并找到相应的实体,否则可能会在搜索列表页面的前排给出用户不需要的结果。从人们的先验知识来看,当用户搜索“云南香格里拉”时,很可能是想搜索一个城市。意图识别步骤就是实现这个功能,识别出用户真正的搜索意图是代表城市的“香格里拉”。然后就可以进入搜索调用步骤了。召回主要负责找出与搜索词意图相关的产品或内容。如果在前面的步骤中得到了“云南”和“香格里拉”的id,则可以很方便的调出与“云南”和“香格里拉”都相关的产品或内容。但是,有时候,召回的结果是空的或者太稀有,此时的用户体验并不好。因此,当召回结果为空或太罕??见时,往往需要进行词丢失和二次召回的操作。另外,有些词是可以省略的词,或者干扰搜索的词,也可以通过丢词来处理。所谓丢词,就是把搜索词中相对不重要或无关紧要的词扔掉,重新回忆起来。那么如何衡量每个词的重要性或紧密度呢?这里有必要引入TermWeighting模块,将每一个词看成一个term,通过算法或者规则计算每一个term的权重。每个词项的权重直接决定了词项的重要性和紧密度的顺序。例如,假设“云南”的词权重为0.2,“香格里拉”的词权重为0.8,那么如果需要丢词,就应该先丢掉“云南”,再丢掉“香格里拉”被保存。图1搜索词义分析和查询理解步骤传统的搜索意图识别采用词汇匹配、类别概率统计和人为设定的规则。TraditionalTermWeighting也采用了词汇匹配和统计的方法,比如TF-IDF,根据所有商品的标题和内容计算词前后词之间的互信息,左右邻的熵,直接存储为词典和评分,提供在线使用,根据一些规则进行判断,比如行业专有名词直接赋予较高的词权重,助词直接赋予较低的词权重。然而,传统的搜索意图识别和TermWeighting算法无法实现较高的准确率和召回率,尤其是对于一些比较稀有的搜索词,因此需要一些新技术来提高这两个模块的准确率和召回率,提高对稀有搜索词的适应性.此外,由于访问频率高,搜索词义分析需要非常快的响应速度。在旅游搜索场景中,响应速度往往需要达到个位数毫秒级别,这对算法是一个不小的挑战。2.问题分析为了提高准确率和召回率,我们使用深度学习来改进搜索意图识别和TermWeighting算法。深度学习可以通过样本学习有效解决各种情况下的意图识别和词项加权。此外,在自然语言处理中引入大规模预训练语言模型,可以进一步加强深度学习模型的能力,减少样本的标注量,让原本昂贵的深度学习应用成为可能。标签,搜索。但深度学习面临的问题是,由于模型复杂度高,神经网络层数较深,响应速度无法满足搜索的高要求。因此,我们通过模型蒸馏和模型压缩来降低模型的复杂度,在略微降低准确率和召回率的同时降低深度学习模型的耗时,从而保证更快的响应速度和更高的性能。3.意图识别类别识别是意图识别的主要组成部分。意图识别中的类别识别是对搜索词query进行分词后,对分词结果的类别进行标记,并给出相应的概率值的一种方法。分析用户搜索词的意图,有利于分析用户的直接搜索需求,从而辅助提升用户体验。例如,当用户在旅游页面搜索“云南香格里拉”时,用户输入的“香格里拉”对应的类别是“城市”,而不是“酒店品牌”,这就指导了后续的搜索策略要偏向城市的意图。在旅游场景中,用户输入的模糊搜索词约占总数的11%,其中包括大量没有分词的搜索词。“无分词”是指分词处理后没有进行更细致的分词,“类别歧义”是指搜索词本身存在多个可能的类别。比如当用户输入“香格里拉”时,没有更详细的细分,对应的类目数据中有“城市”、“酒店品牌”等多个类目。如果搜索词本身是多个词的组合,则可以通过搜索词本身的上下文来明确类别,优先将搜索词本身作为识别目标。如果从搜索词本身无法明确识别类别,我们会优先添加用户不同的近期历史搜索词和近期产品类别点击记录。如果没有这些信息,我们将添加一个定位站作为补充语料。对原始搜索词进行处理,得到待识别的QueryR。近年来,预训练语言模型在众多自然语言处理任务中大放异彩。在类别识别中,我们利用预训练模型的训练网络参数,得到具有上下文语义的词特征Outputbert;使用分词转换模块,分词特征结合位置编码:得到分词对应的字符段,如:表示分词词对应的第i个长度为li的词特征。基于字符段Wi,词转换模块聚合每个词的特征Hwi。聚合方式可以是max-pooling、min-pooling、mean-pooling等,实验表明max-pooling的效果最好。模块的输出是搜索词R的词特征OutputR;通过并行分类器在搜索词的词特征OutputR中对每一段给出类别数据库中涵盖的匹配类别,并给出对应类别的匹配概率。图2类别识别整体结构示意图类别识别模型基于BERT-base12层模型。由于模型过大,无法满足在线运行的响应速度要求,我们对模型进行了KnowledgeDistillation,将网络从大网络转换为小网络,同时保持接近大网络的性能同时满足在线操作的延迟要求。将之前训练好的类别识别模型作为教师网络,将教师网络的输出作为学生网络的目标来训练学生网络,使学生网络的结果p接近q。因此,我们可以将损失函数写成:这里CE是交叉熵(CrossEntropy),对称KL是对称KL散度(Kullback–Leiblerdivergence),y是真实标签的one-hot编码,q是输出教师网络,p是学生网络的输出。图3知识蒸馏示意图经过知识蒸馏后,类别识别仍然可以达到较高的准确率和召回率,同时95行的整体响应时间可以达到5ms左右。在类别识别之后,还需要实体链接等步骤来完成最终的意图识别过程。具体可以参考文章《携程实体链接技术的探索及实践》,本文不再赘述。4.TermWeighting对于用户输入的搜索词,不同的词对用户的核心语义需求有不同的重要性。在搜索的二次召回排序中,需要关注重要性高的词,同时在词丢失时可以忽略重要性低的词。通过计算用户输入的每个搜索词的词权重,将最接近用户意图的产品进行二次召回,提升用户体验。首先,我们需要找到在线用户的真实反馈数据作为标注数据。用户在搜索框中的输入和关联词的点击在一定程度上反映了用户对搜索词组中词的重视程度,因此我们选择关联词输入和点击数据,人工筛选并重新标注,如术语加权模型数据的标签。在数据预处理方面,我们可以获得的标记数据是词组及其对应的关键词。这里为了让权重的分配不要太过极端,给非关键词赋予一定的小权重,剩下的权重分配给关键词。在词的每个字符上,如果一个词组在数据中出现了多次,对应的关键词不同,则根据关键词出现的频率分配这些关键词的权重,再进一步分配每个词的权重。模型部分主要尝试BERT作为特征提取方法,进一步拟合各个term的权重。对于给定的输入,将其转化为BERT可以接受的形式,通过BERT经过全连接层后对张量进行压缩,得到一维向??量并进行Softmax处理,利用该向量对结果向量进行加权,进行拟合,具体模型框架如下图所示:图4TermWeighting模型框架由于中文BERT是基于字符的,所以需要对每个term中的所有词的权重进行求和,最终得到term的权重。在整个模型框架中,除了一些训练超参数外,可以调整的部分主要包括两部分:一是通过BERT生成Embedding时,可以选择BERT的最后一层,或者将第一层和最后一层结合起来BERT二、在损失函数的选择上,除了使用MSE损失来衡量预测权重与实际权重的差距外,还尝试使用非重要词的预测权重之和作为损失计算,但是这种loss比较适合只有一个关键词的时候使用。模型最终以小数形式输出每个term权重,例如["Shanghai","De","Disney"]的term权重结果为[0.3433,0.1218,0.5349]。该模型用于搜索,对响应速度有严格要求。由于整个BERT模型比较大,在推理部分很难满足响应速度的要求。因此,与类别识别模型类似,我们将训练好的BERT模型进一步提炼出来,以满足线上需求。本项目使用几层transformer来拟合BERT-base12层transformer的效果,最终模型整体推理速度提升了10倍左右,损失了可接受的部分性能。最终,TermWeighting在线服务整体95行可以达到2ms左右。五、未来与展望旅游搜索在采用深度学习后,对相对稀少的长尾搜索词的词义分析能力有了很大的提升。在目前的在线真实搜索场景中,深度学习的方法普遍与传统的搜索词义分析方法相结合,既能保证常用搜索词在头部的稳定表现,又能加强泛化能力。未来,搜索词义分析致力于为用户带来更好的搜索体验。随着硬件技术和人工智能技术的升级,高性能计算和智能计算日趋成熟。朝着更高的绩效目标发展。此外,更大规模的预训练模型和旅游领域的预训练模型有助于进一步提高模型的准确率和召回率,引入更多的用户信息和知识有助于提升意图识别的效果。反馈和模型迭代有助于提高TermWeighting的效果。这些都是我们未来会尝试的方向。除了意图识别和词条加权,搜索的其他功能,如词性标注、纠错等,未来也可以在满足需求的前提下,利用深度学习技术实现更强大的功能和更好的结果的响应速度。
