CS 的陋室

搜索系统中的纠错问题

浅谈搜索系统中 Query 理解和分析

为什么要做意图识别

意图识别算是 query 理解中比较上有的位置,对 query 进行意图识别,是指分析用户的核心搜索需求,例如是要找电影、找小说,还会想问百科知识,还有查快递、市政办公等需求,这些需求在底层的检索策略会有很大的不同,错误的识别几乎可以确定找不到能满足用户需求的内容,导致产生非常差的用户体验,因此精准的意图识别非常重要。

来举一个例子,用户输入唐人街探案,一般是电影、网剧、网评之类的需求,退一步可能是比较弱的新闻、明星之类的意图,而肯定不是汽车、体育、快递之类的意图。而在底层的检索策略,只有我们识别到了电影意图,我们才会去电影的数据库里面检索,里面就不会有汽车、体育、快递,换言之,没有识别到电影意图,压根就不可能出现唐人街探案的电影的卡片甚至咨询,而如果我们错误的识别到了汽车,那我们就只会在这个意图下出汽车的相关内容了。可想而知,错误的意图识别会带来多大的负面影响。

意图识别的具体内容

其实从上面的描述可以看到,意图识别是对 query 进行意图的分类,因此总体思路上采用文本分类的方式进行,这个相信大家能想的明白。而在架构上,也需要对意图识别的逻辑进行设计。

意图识别的架构设计

考虑搜索场景的下面这些原因,进行意图识别的架构设计:

  • 用户输入内容模糊或者涵盖内容广,因此经常会出现多意图,如“苹果”(手机、水果)、“长城”(景点、电影、汽车)、口罩(医疗、购物)。
  • 多个意图不可能同时开发上线,必须一个一个开发迭代。
  • 开发一个意图时要求独立,尽可能不影响其他意图的计算。
  • 虽然每个意图独立,但是要求意图之间尽可能可比(例如意图强弱打分),这个信息需要传导到排序层。
  • 每一个意图的识别算法可能会不同,需要分别设计。

当然上面的所有很难兼顾,我们一般根据搜索系统当前的情况进行设计,按照《美团机器学习》的建议,采用多个二分类器并联的方法能够较好的保证框架拓展的完整性,一个新意图的上线对其他意图的影响降到最低,但是在可比性上可能会较欠缺。

意图识别的方法

虽说是文本分类,但是大家千万不要把这个分类限制在基于深度学习和机器学习的文本分类里面了,在搜索场景下,这些方法很可能会失效。大家拓宽思路,也多想想没有深度学习之前大家可以怎么做意图识别,手里多几把武器,刀子切菜,斧头砍柴,锤子锤钉子,能解决的问题就多了。

基于词典和规则的方法

基于词典和规则的方法在搜索中最为常见,好的词典一般能够解决超过 80% 甚至以上的问题,而准确率也能达到 90% 甚至以上,这应该是搜索领域最应该首先想到的方法。

  • 搜索 query 绝大部分很短,没有上下文、特征词,识别非常困难,如“都挺好”(电视剧),用户就这么输入,没有额外信息,除了词典难以处理。
  • 词汇含义变化很快,随着一些热点信息的变化,需要快速上下线,词典可以处理,如“少年的你”,识别到是新电影,马上更新词典,意图就可出。
  • 语义信息有的时候反而是误导。“少年的你”是一部电影,“年轻的你”可就不是了。
  • 部分的搜索要求有限保高准确,低召回可接受,词典就是为了这个场景