干货 | 深度学习在携程搜索词义解析中的应用

作者简介

携程旅游研发部大数据与AI研发团队,为旅游事业部提供丰富的AI技术产品和技术能力。

一、背景介绍

搜索是电商最重要的门面之一,大部分用户通过搜索来找到他们想要的商品,因此搜索是用户表达意图最直接的方式,也是转化率最高的流量来源之一。绝大部分的电商搜索是通过搜索框输入搜索词(Query)来完成,因此,搜索词的词义解析和意图理解成为了搜索中的重要一环。

主流的搜索词义解析和Query理解需要经过纠错、同义词替换、分词、词性标注、实体识别、意图识别、词重要度权重、丢词等步骤。以旅游场景下的搜索举例,如图1所示,当用户在搜索框输入“云南香各里拉”作为Query的时候,首先搜索引擎需要对该搜索词进行纠错,这是为了便于后续步骤正确解析出用户想要搜索的内容;如果有必要,还会进行同义词替换。然后,对搜索词进行分词和词性标注,识别出“云南”是省,“香格里拉”是城市或者酒店品牌,紧接着会做实体识别,召回“云南”和“香格里拉”在后台数据库里对应的实体id。

这个时候,出现了一个分歧,“香格里拉”既可能是城市,又可能是酒店品牌。在用户进行搜索的时候,是否能够预测出正确的类别和实体,对于搜索结果的精准展示和提升用户体验有重要的意义。因此,我们必须识别出用户真正想要搜的是什么类别,并找到对应的实体,否则可能在搜索列表页前排会给出用户不想要的结果。从人的先验知识来看,用户搜索“云南香格里拉”,很大可能性是想要搜城市。意图识别步骤,就是为了实现这个功能,识别出用户真正的搜索意图是代表城市的“香格里拉”。

后续就可以进入搜索的召回步骤,召回主要负责的是把和搜索词意图相关的商品或内容找出来。前面的步骤获取了“云南”和“香格里拉”的id,就可以很方便的召回和“云南”和“香格里拉”都相关的商品或内容。但是,有些时候,召回的结果为空或者过于稀少,这个时候给用户的体验不好,因此,在召回的结果为空或者过于稀少的情况下,往往还需要丢词和二次召回的操作。此外,有些词属于可省略词,或者对搜索产生干扰的词,也可以通过丢词来处理。

所谓丢词,就是把搜索词中相对不重要或者联系不紧密的词丢掉,再次召回。那么该如何衡量每个词的重要程度或者紧密程度?这里就需要引入了Term Weighting的模块,把每个词视为term,通过算法或规则计算每个term的weight,每个term的weight直接决定了term重要度和紧密度的顺序。例如,假设“云南”的term weight是0.2,“香格里拉”的term weight是0.8,那么如果需要丢词,就应该先丢“云南”,保留“香格里拉”。

7daa052a74bafeaabf5bfb768092de1e.jpeg

图1 搜索词义解析和Query理解步骤

传统的搜索意图识别会采用词表匹配,类目概率统计,加上人为设定规则。传统的Term Weighting同样会采用词表匹配和统计方法,比如根据全量商品的标题和内容统计出词的TF-IDF、前后词互信息、左右邻熵等数据,直接存成词典和分值,提供给线上使用,再根据一些规则辅助判断,比如行业专有名词直接给出较高的term weight,助词直接给出较低的term weight。

但是,传统的搜索意图识别和Term Weighting算法无法达到很高的准确率和召回率,特别是无法处理一些较为罕见的搜索词,因此需要一些新的技术来提升这两个模块的准确率和召回率,以及提升对罕见搜索词的适应能力。此外,因为访问频率较高,搜索词义解析需要非常快的响应速度,在旅游搜索场景下,响应速度往往需要达到接近个位数的毫秒级,这对于算法来说是一个很大的挑战。

二、 问题分析

为了提高准确率和召回率,我们采用深度学习来改进搜索意图识别和Term Weighting算法。深度学习通过样本的学习,可以有效解决各种情况下的意图识别和Term Weighting。此外,针对自然语言处理的大规模预训练语言模型的引入,可以进一步强化深度学习模型的能力,减少样本的标注量,使得原本标注成本较高的深度学习在搜索上应用成为可能。

但是深度学习面临的问题是,由于模型的复杂度较高,神经网络层数较深,响应速度没法满足搜索的高要求。因此我们采用模型蒸馏和模型压缩来减少模型的复杂度,在略微降低准确率和召回率的情况下减少深度学习模型的耗时,以此保证较快的响应速度和较高的性能。

三、意图识别

类目识别是意图识别的主要组成部分。意图识别中的类目识别是搜索词query经过分词后,对分词结果打上所属类目并给出对应概率值的方法。解析用户的搜索词的意图有利于分析用户的直接搜索需求,从而辅助提升用户体验。例如用户在旅游页面搜索 “云南香格里拉”,获取到用户输入的“香格里拉”对应的类目是“城市”,而不是“酒店品牌”,引导后续检索策略偏向城市意图。

在旅游场景下,用户输入的类目存在歧义的搜索词占总量约11%,其中包含大量无分词的搜索词。“无分词”是指经过分词处理后无更细化的切分片段,“类目存在歧义”是指搜索词本身存在多种可能的类目。例如用户输入“香格里拉”,无更细化的切分片段,且对应类目数据中存在“城市”、“酒店品牌”等多个类目。

如果搜索词本身是多个词的组合,则可以通过搜索词自身上下文明确类目,优先会以搜索词本身作为识别目标。如果单从搜索词本身不能明确所属类目,我们会优先追加该用户不相同的最近历史搜索词,以及最近商品类目点击记录,若无上述信息则追加定位站,作为补充语料。原始搜索词经过处理获得待识别的Query R。

最近几年,预训练语言模型在很多自然语言处理任务中大放光彩。在类目识别中,我们利用预训练模型的训练网络参数,获取含上下文语义的字特征Outputbert;使用字词转换模块,字特征结合位置编码:

a8aa5c55636c0083c78847701f612f30.png

获取到分词对应的字符片段,如:

6e8015c7e22e4d0afdda1f9e40f76c1d.png

代表第i个分词对应的长度为li的字特征。基于字符片段Wi,字词转换模块聚合出每个词的特征Hwi。聚合手段可以是最大值池化max-pooling、最小值池化min-pooling、均值池化mean-pooling等方式,实验得到最大池化效果最佳。模块输出为搜索词R的词特征OutputR;通过并行分类器对搜索词的词特征OutputR中各个片段给出类目数据库中涵盖的匹配类目,并给出对应类目的匹配概率。

9e6840549cc31d116b35032d1a36175f.png

图2 类目识别整体结构示意图

类目识别模型是基于BERT-base 12层模型,由于模型过大,不满足线上运行的响应速度要求,我们对模型进行了知识蒸馏(Knowledge Distillation),将网络从大网络转化成一个小网络,保留接近于大网络的性能的同时满足线上运行的延迟要求。

原先训练好的类目识别模型作为teacher网络,将teacher网络的输出结果 作为student网络的目标,训练student网络,使得student网络的结果p接近q ,因此,我们可以将损失函数写成:

42e6be2b705d8461ef899c1c7827b23f.png

这里CE是交叉熵(Cross Entropy),symmetricalKL是对称KL散度(Kullback–Leibler divergence),y是真实标签的one-hot编码,q是teacher网络的输出结果,p是student网络的输出结果。

1c8f8d26f27f22ad0d235faaf5e37340.png

图3 知识蒸馏示意图

经过知识蒸馏,类目识别最终仍然可以达到较高的准确率和召回率,同时可以做到整体响应时间的95线为5ms左右。

经过类目识别之后,还需要经过实体链接等步骤,完成最终的意图识别过程。具体内容可以参见《携程实体链接技术的探索及实践》一文,本文不再阐述。

四、 Term Weighting

对于用户输入的搜索词,不同的term对于用户的核心语义诉求有着不同的重要性。在搜索的二次召回排序中需要重点关注重要性高的term,同时在丢词的时候可以忽略重要性低的term。通过计算用户输入搜索词的各个term weight,来二次召回出最接近用户意图的产品,提升用户体验。

首先,我们需要寻找线上用户真实的反馈数据作为标注数据。用户在搜索框的输入和联想词点击情况一定程度上反映了用户对于搜索短语中词语的重视程度,因此我们选用联想词输入和点击数据,加以人工筛选和二次标注,作为Term Weighting模型的标注数据。

在数据预处理方面,我们所能获得的标注数据为短语及其对应的关键词,这里为了使权重的分配不过于极端,给定非关键词一定量小的权重,并将剩余权重分配给关键词的每个字上,如果某一短语在数据中出现了复数次,且对应的关键词不同,则会根据关键词的频率对这些关键词的权重进行分配,并进一步分配每个字的权重。

模型部分主要尝试BERT作为特征提取的方法,并进一步对每个term的权重进行拟合。对于给定的输入,将其转化为BERT所能接收的形式,将通过BERT后的张量再通过全连接层进行压缩,得到一维的向量后进行Softmax处理,并用该向量对结果的权重向量进行拟合,具体模型框架如下图所示:

d7cadb1bc72c35f89152d174cd631673.png

图4 Term Weighting模型框架

由于中文BERT基于字符,因此需要将每个term中的所有字的权重进行求和,从而最终得到term的权重。

在整个模型框架中,除去一些训练的超参数,能调整的部分主要包含两个部分:一是通过BERT产生Embedding时,可以选择BERT最后一层,或者综合BERT的第一层和最后一层的方式产生Embedding;二是在损失函数的选择上,除去使用MSE损失衡量预测权重与实际权重之间差距之外,也尝试使用非重要词的预测权重的和作为损失进行计算,但这种损失更适合只有单个关键词的情况使用。

模型最终是以小数的形式输出每个term weight,例如[“上海”、“的”、“迪士尼”]的term weight结果为[0.3433,0.1218,0.5349]。

该模型是为搜索服务的,有严格的响应速度要求。由于BERT模型整体比较大,在推理部分很难达到响应速度要求,因此类似于类目识别模型,我们对训练好的BERT模型进行进一步的蒸馏处理,以达到符合线上的要求。在此项目中,通过少数几层transformer去拟合BERT-base 12层transformer的效果,最后以损失可以接受的一部分性能的情况下,使得模型整体的推理速度快了10倍左右。最终,Term Weighting线上服务整体的95线可以达到2ms左右。

五、 未来与展望

采用深度学习后,旅游搜索对于较为罕见的长尾搜索词,词义解析能力有了较大的提升。在目前的线上真实搜索场景,深度学习方法一般选择与传统的搜索词义解析方法相结合,这样既可以保证头部常见搜索词的性能稳定,又可以加强泛化能力。

未来,搜索词义解析致力于给用户带来更好的搜索体验,随着硬件技术和AI技术的更新换代,高性能计算和智能计算越来越成熟,搜索词义解析的意图识别和Term Weighting未来会往更高性能的目标发展。此外,更大规模的预训练模型和旅游领域的预训练模型有助于进一步提升模型的准确率和召回率,更多用户信息和知识的引入有助于提升意图识别的效果,线上用户的反馈和模型迭代有助于提升Term Weighting的效果。这些都是我们后续会尝试的方向。

除了意图识别和Term Weighting之外,搜索的其他功能,比如词性标注、纠错等,在满足响应速度要求的前提下未来也可以采用深度学习技术,来实现更强大的功能和更优秀的效果。

【推荐阅读】

6b00ad5ba9191d91aff3e40762477418.jpeg

 “携程技术”公众号

  分享,交流,成长

内容概要:本文聚焦于不计电池储能寿命损耗的微电网经济调度问题,提出了一种融合电价型、激励型及可中断负荷型三类需求侧响应机制的优化调度模型。研究基于Matlab平台构建了包含光伏、风机、储能系统等多种分布式能源的微电网运行成本最小化模型,详细阐述了目标函数与约束条件的数学建模过程,并通过仿真验证了所提策略在降低系统运行成本、实现削峰填谷和提升能源利用效率方面的有效性。该模型强调需求侧资源的灵活调控能力,为微电网的经济高效运行提供了理论支持和技术路径。; 适合人群:电力系统、能源互联网及相关专业的高校研究生、科研人员,以及从事微电网优化调度、综合能源系统规划与运行的工程技术人员。; 使用场景及目标:①用于教学科研中深入理解微电网经济调度的核心原理、建模方法与求解流程;②为实际微电网项目中整合多类型需求侧响应资源、制定优化运行策略提供可复现的仿真工具与技术参考;③作为进一步研究更复杂场景(如计入储能寿命损耗、碳排放约束、不确定性因素等)的优化模型的基础框架。; 阅读建议:读者应具备电力系统基础理论知识和Matlab编程能力,建议结合文中模型逐步复现代码,通过调整负荷曲线、能源价格、响应参数等变量进行敏感性分析,以深化对调度机制的理解。需特别注意,本模型未考虑电池寿命损耗这一关键因素,在实际工程应用中应结合电池老化模型进行补充和完善,以获得更贴近现实的调度方案。
内容概要:本文提出了一种考虑阶梯式碳交易与供需灵活双响应的综合能源系统优化调度模型,并通过Matlab代码实现。该模型深度融合了阶梯式碳交易机制与电力系统中需求侧及供给侧的灵活响应能力,构建了一个涵盖电、热、气等多种能源形式耦合的综合能源系统框架。通过引入阶梯碳价机制,有效激励系统低碳运行,同时结合需求响应与供给调整的协同优化策略,显著提升了系统运行的经济性与环保性。研究采用先进的数学优化方法对模型进行求解,实现了对系统内各能源单元出力、储能设备调度、负荷转移等关键变量的全局最优配置,为实现能源高效利用与碳排放最小化的双重目标提供了科学支撑。; 适合人群:具备电力系统、能源系统建模或优化调度等相关背景的科研人员与工程技术人员,特别适合从事综合能源系统规划、低碳调度策略、碳交易机制设计等方向研究的研究生及高校教师。; 使用场景及目标:①深入研究阶梯式碳交易机制在综合能源系统中的建模方法与应用效果;②实现供需双侧灵活互动下的系统经济性与低碳化协同优化调度;③为区域能源系统的低碳转型提供量化分析工具与决策支持依据;④作为Matlab平台下能源系统优化建模的教学案例或科研复现参考。; 阅读建议:建议读者结合提供的Matlab代码逐行解析模型构建过程,重点掌握目标函数与约束条件的数学建模逻辑及其程序实现方式。在学习过程中应积极尝试调整碳价阶梯参数、改变负荷响应场景以观察系统优化结果的变化,从而深化对模型机理的理解。同时,可将本模型与单一碳价或其他需求响应模型进行对比分析,进一步拓展研究视野与创新思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值