作者简介
携程旅游研发部大数据与AI研发团队,为旅游事业部提供丰富的AI技术产品和技术能力。
一、背景介绍
搜索是电商最重要的门面之一,大部分用户通过搜索来找到他们想要的商品,因此搜索是用户表达意图最直接的方式,也是转化率最高的流量来源之一。绝大部分的电商搜索是通过搜索框输入搜索词(Query)来完成,因此,搜索词的词义解析和意图理解成为了搜索中的重要一环。
主流的搜索词义解析和Query理解需要经过纠错、同义词替换、分词、词性标注、实体识别、意图识别、词重要度权重、丢词等步骤。以旅游场景下的搜索举例,如图1所示,当用户在搜索框输入“云南香各里拉”作为Query的时候,首先搜索引擎需要对该搜索词进行纠错,这是为了便于后续步骤正确解析出用户想要搜索的内容;如果有必要,还会进行同义词替换。然后,对搜索词进行分词和词性标注,识别出“云南”是省,“香格里拉”是城市或者酒店品牌,紧接着会做实体识别,召回“云南”和“香格里拉”在后台数据库里对应的实体id。
这个时候,出现了一个分歧,“香格里拉”既可能是城市,又可能是酒店品牌。在用户进行搜索的时候,是否能够预测出正确的类别和实体,对于搜索结果的精准展示和提升用户体验有重要的意义。因此,我们必须识别出用户真正想要搜的是什么类别,并找到对应的实体,否则可能在搜索列表页前排会给出用户不想要的结果。从人的先验知识来看,用户搜索“云南香格里拉”,很大可能性是想要搜城市。意图识别步骤,就是为了实现这个功能,识别出用户真正的搜索意图是代表城市的“香格里拉”。
后续就可以进入搜索的召回步骤,召回主要负责的是把和搜索词意图相关的商品或内容找出来。前面的步骤获取了“云南”和“香格里拉”的id,就可以很方便的召回和“云南”和“香格里拉”都相关的商品或内容。但是,有些时候,召回的结果为空或者过于稀少,这个时候给用户的体验不好,因此,在召回的结果为空或者过于稀少的情况下,往往还需要丢词和二次召回的操作。此外,有些词属于可省略词,或者对搜索产生干扰的词,也可以通过丢词来处理。
所谓丢词,就是把搜索词中相对不重要或者联系不紧密的词丢掉,再次召回。那么该如何衡量每个词的重要程度或者紧密程度?这里就需要引入了Term Weighting的模块,把每个词视为term,通过算法或规则计算每个term的weight,每个term的weight直接决定了term重要度和紧密度的顺序。例如,假设“云南”的term weight是0.2,“香格里拉”的term weight是0.8,那么如果需要丢词,就应该先丢“云南”,保留“香格里拉”。