搜索意图识别浅析

此文已由做者赵斌受权网易云社区发布。
golang

欢迎访问网易云社区,了解更多网易技术产品运营经验。算法


对于搜索引擎来说,不少状况下只须要用户在搜索输入框内输入所须要查询的内容就能够了,其他的事情就所有交给搜索引擎去处理。理想的状况下,搜索引擎会优先返回用户想要的结果。理想很丰满,但总会存在一些骨感的现实,用户经过搜索没法找到最想要的结果。若是应用中压根不存在用户搜索的内容,倒还能够理解。反之的话,就是一个大写的尴尬。本文主要谈论和解决的是使人尴尬的问题。安全


为何会搜索不到


一、不一样的用户对同一种诉求的表达每每是有差异的,每每会存在一种比较常见的现象,用户输入的query并不能清晰准确的表达需求。session


二、搜索系统对用户query的理解能力较弱,没法挖掘出用户的真实需求。架构


三、召回结果集的排序不合理,可能用户需求的内容被排在后面而未曝光。机器学习


以上几点大概是用户没法找到需求内容的主要缘由,本文主要讨论的是前两点,主要是想解决如何更好的理解用户的需求并进行准确的召回,进而对第三点所涉及到的排序起到积极做用。学习


用户做为一个使用主体,其知识水平和表达能力会有差别,当不一样用户想搜索同一个商品时所输入的query会存在差异,具体以下所示:优化


Alt pic


可见,对于同一个商品每每会对应不一样的query,相对精确的有“蔓越莓胶囊欧洲”、“blackmore蔓越莓”;品牌优先的有“blackMores”;功效优先的有“女士痛经”,"泌尿系统感染";输入错误的有"蔓越梅",输入别名的有"圣洁莓";输入较模糊的有“妇科”,“炎症”。因此说用户的输入通常会存在表达差别,词汇差别,需求明确性差别等。网站


要想解决这些问题就须要经过用户输入的query来获取用户的真实需求,本文把对用户输入的理解称为QueryParser,包含:query切分(分词),query意图识别,query改写(query扩展/query纠错/query删除等),接下来本文主要针对query意图识别和query改写结合在考拉海淘搜索中的具体应用来和你们聊聊。搜索引擎


1.query意图识别


本文主要针对垂直搜索进行介绍,不一样的垂直引擎中的query会有本身的特色。像去哪儿网的日志中确定有不少“城市a到城市b的机票”这种pattern的query,而电商网站中确定大部分是“产品/品牌/型号/款式/价格”等类型数据的组合,音乐类应用中大部分应该是艺人和歌曲名相关的query。相比通用搜索而言,垂直搜索可能更针对性的挖掘用户的意图。


1.1意图识别的难点


一、输入不规范,前文中已有介绍,不一样的用户对同一诉求的表达是存在差别性的。


二、多意图,查询词为:"水",是矿泉水,仍是女生用的化妆水。


三、数据冷启动。当用户行为数据较少时,很难获取准确的意图。


四、没有固定的评价标准。pv,ipv,ctr,cvr这种能够量化的指标是对搜索系统整体的评价,具体到用户意图的预测上并无标准的量化指标。


1.2 意图识别的方法


1.2.1 词表穷举法


这种方法最简单暴力,经过词表直接匹配的方式来获取查询意图,同时,也能够加入比较简单而且查询模式较为集中的类别。


  • 查询词:德国[addr] 爱他美[brand] 奶粉[product] 三段[attr]

  • 查询模式:[brand]+[product];[product]+[attr];[brand]+[product]+[attr]


固然查询模式是能够作成无序的。这种意图识别的方式实现较为简单,可以较准确的解决高频词。因为query通常是知足20/80定律,20%的query占据搜索80%的流量。可是,80%得长尾query是没法经过这种方式来解决的,也就是说这种方式在识别意图的召回可能只占20%。同时,须要人工参与较多,很难自动化实现。


1.2.2 规则解析法


这种方法比较适用于查询很是符合规则的类别,经过规则解析的方式来获取查询的意图。好比:


  • 北京到上海今天的机票价格,能够转换为[地点]到[地点][日期][汽车票/机票/火车票]价格。

  • 1吨等于多少公斤,能够转换为[数字][计量单位]等于[数字][计量单位]。


这种靠规则进行意图识别的方式对规则性较强的query有较好的识别精度,可以较好的提取准确信息。可是,在发现和制定规则的过程也须要较多的人工参与。


1.2.3 机器学习方法


意图识别其实能够看作是一个分类问题,针对于垂直产品的特色,定义不一样的查询意图类别。能够统计出每种意图类别下面的经常使用词,对于考拉海淘而言,能够统计出类目词,产品词,品牌词,型号词,季节时间词,促销词等等。对于用户输入的query,根据统计分类模型计算出每个意图的几率,最终给出查询的意图。 可是,机器学习的方法的实现较为复杂,主要是数据获取和更新较困难,数据的标注也须要较准确才能训练出较好地模型。


2. query意图识别在考拉海淘中的应用


考拉海淘是一个电商类的产品,目前其搜索意图相对单一为产品购买。本文主要讨论考拉海淘中用到的query改写,类目相关,命名实体识别和Term Weight等内容。 考拉的搜索系统有大量的用户访问,咱们但愿经过对用户query的意图分析来提升搜索体验,目前,考拉系统的架构包含下图所示的几个部分: Alt pic


2.1 实体词识别


经过对日志分析,将用户经常使用的搜索词分为如下四类:地址(澳洲),品牌词(爱他美),产品词(奶粉),属性词(三段)。当用户输入query时,若是能准确的识别每一个实体词,就能去索引里面精确匹配对应的字段,从而提升召回的准确率,在排序中也能够用到实体词进行优化。 举一个栗子:有一个商品的标题是”AYAM BRAND 雄鸡标 辣椒金枪鱼“,它的类目是“冷面/熟食/方便菜 其余熟食”。当用户搜“辣鸡面”的时候,经过单字逻辑召回这款商品。经过实体识别会获得这个商品的产品词是“金枪鱼”,而query要搜的产品词是“面”。这样就能够判断出其实这是一个误召回,进而能够将这个商品进行过滤或者是排序的时候放到较后的位置。


咱们的实体词识别模型是经过crf来进行训练的,语料是用户搜索的真实query,用一个相对准确的词典(品牌词/产品词/属性词/地址词)去标注语料。具体的标注预料以下所示:


  • 爱 B-brand 他 I-brand 美 I-brand 奶 B-product 粉 I-product 三 B-attr 段 I-attr


训练出的模型对于地址,品牌词,产品词的识别准确率平均95%左右,英文属性词的识别准确率还有待提升,crf模型还有一个比较好的地方是具备必定的泛化能力。另外,模型的训练是使用考拉平台上的商品数据,因此对非考拉平台的产品和品牌识别的准确率也不理想。可是,最重要的是识别本平台已有的实体,尽量准确的向用户展现最准确的商品搜索结果。


2.2 query改写


query改写包括:query纠错,query扩展,query删除,query转换。本文主要讨论在考拉中经常使用的query扩展,query删除和query转换。


2.2.1 query扩展


搜索召回依赖索引数据,商品数据依赖于编辑运营的录入,数据的完整性很可贵到保障,也就是说很难从各个角度来描述这个商品。


仍是用例子说明,一个商品的标题是“Fisher-Price 费雪 碎花儿童学步鞋”,因为用户输入的差别性存在,会有用户搜索"婴儿鞋","宝宝鞋"。很明显这个学步鞋偏偏用户所需的商品,可是由于数据的不完整性而没法被召回。这就是前文提到的有商品却没法展现给用户,这是最不但愿遇到的状况。这时候就须要用到query扩展,咱们会维护一个同义词扩展表,当用户输入一个query的时候,会进行同义词扩展,从而尽量召回全部与用户相关的商品。


2.2.2 query删除


query删除通常的应用场景是在当用户输入query过多时致使没法正常召回,能够经过丢词的方式来筛选用户的query,从而召回与query最相关的商品。


依旧用例子说明,当用户的query为"卡乐比水果麦片"时,因为这款商品可能被下架,或者商品种类较少,经过query删除,能够把原query改写为“水果麦片”,进而能够召回其余品牌的水果麦片。query删除是须要用到实体识别的,由于要决定query中的哪些数据被删除才能对用户原意图形成的影响最小。像"卡乐比水果麦片",经过意图识别获得”卡乐比“是品牌,”水果麦片“是产品,显然用户更须要的是水果麦片,而不是“卡乐比”其余类型的麦片。


2.2.3 query转换


会存在这样一种状况,确实没有商品是知足用户的明确需求。 好比,用户搜索"祖马龙",考拉海淘并无这款商品。也没法经过query同义词扩展和query删除来对原query进行处理。经过session数据能够发现,用户搜索“祖马龙”后会伴随着“香水”这个query出现,利用用户行为数据是能够挖掘出“祖马龙”和"香水"这两个query是相关的。当用户搜索"祖马龙"而没法召回时,是能够把query转换为"香水"来尽量知足用户的需求。


2.3 类目相关


当用户搜索“Adidas”的时候,是想要搜索“运动鞋”,仍是“衣服”,又或者是“沐浴露”。固然,你可能说不一样的用户有不一样的需求,这就涉及到个性化搜索的内容了,暂时不在本文的讨论范围内。若是用户行为数据足够多,直接使用统计分析就能够找到query对应的类目相关程度。固然,统计算法也是机器学习的一种。可是,仍有一部分问题是须要机器学习算法来完成的。


经过对用户行为数据的挖掘,发现“Adidas”对应的类目相关性排序为:运动鞋>衣服>沐浴露。当用户搜索“Adidas”的时候,会按照类目相关性的顺序,将运动鞋排在最前面。固然,考虑到多样性,排序时会经过类目打散将衣服和沐浴露适当的掺杂在运动鞋中。


query的类目相关性是经过用户行为数据进行挖掘的,一些长尾的类目虽然与query相关,因为马太效应却没法被挖掘。好比query“面膜”所挖掘出的相关性类目为“男士面膜”/“女士面膜”/“面膜粉”等,而“孕妇面膜”这个类目却一直处于不相关的状态。其实,“男士面膜”/"女士面膜"/"面膜粉"/“孕妇面膜”在"面膜"这个维度都是相关的,咱们经过虚拟类目的作法来解决这种长尾问题。离线将这四个类目归一为一个虚拟类目,当用户的query落在虚拟类目中的大部分类目时,认为这个query与虚拟类目包含的其余类目也具备相关性。


2.4 Term Weight


中文天然语言处理的第一步就是分词,分词的结果中,每一个词的重要性显然应该时候区别的。Term Weight就是为了给这些词不一样的打分,根据分值就能够判断出核心词,进而能够应用到不一样的场景。好比,有一个商品的标题为“碗装保温饭盒套装”,经过Term Weight能够获得核心词为“饭盒”。当用户搜"碗"召回这个商品的时候,是能够根据term weight来进行排序降权的。


经过以上几点能够看出,query意图识别在一个搜索系统中是必不可少的,能够说query意图识别的精确程度高低决定着一次搜索质量的优劣。



免费体验云安全(易盾)内容安全、验证码等服务

11.1—11.15云计算基础服务全场5折起

更多网易技术、产品、运营经验分享请点击


相关文章:
【推荐】 从golang的垃圾回收提及(下篇)

相关文章
相关标签/搜索