搜索query理解简述

  query理解系统通常以Pipline的形式搭建,大致的流程为预处理、分词/词性标注、改写、实体识别、term权重分析、意图识别。从功能上可以划分为query解析、query改写、query意图识别。

  搜索是一个复杂的系统,用户发起的一次搜索需要经过query理解、doc召回、排序至少三个模块、此外还要针对业务需求重排最终输出的结果。一个能快速响应的搜索系统、需要每个模块上都是高效的,本着20%的query能满足80%的搜索需求,所以高频query搜索结果的缓存、query理解中各模块的离线挖掘的词典都在解决响应时间的问题。

一、query解析

1、预处理

  query的预处理包含英文字符大小写转换、繁简体转换、无意义的字符剔除、query截断等等。

2、分词/词性识别

  分词技术通常基于词典进行前后向最大匹配来实现,可以使用开源的分词工具,如jieba、LTP等,在垂直领域中还可以引入领域词典辅助分词。基于词典的分词无法处理OOV的问题,可以配合新词发现技术迭代更新词典,也可以使用HMM、CRF、BERT-CRF等机器学习或者深度学习的技术自动发现新词。

  分词时可能需要提供不同粒度的分词结果,使用时按粗粒度到细粒度召回doc。

  很多分词工具都附带了词性识别的功能,在分词的同时可以直接提供词性信息。

3、实体识别

  搭建不同领域的实体词典,基于前缀树+最大前后向匹配等识别实体,也可以构建实体识别的模型。

4、词权重/term权重

  在使用文本召回时,query中不同的词应该有不同的权重,权重高的词召回的doc相关性高,权重低的词召回的doc相关性低。

  词权重最简单的方法是计算词的tf-idf值,通常query的长度比较短,只需要idf值即可。或者使用textrank计算词的重要性分数,textrank效果上较tf-idf要好一些,但时间成本上会比较高。

  可以使用gbdt等模型构建分类或回归任务,特征可以使用词法、句法、统计信息等,如term的词性、长度、位置、数目、是否数据、是否英文、TF-IDF、前后词互信息、左右熵等等。数据集构造可以使用用户行为数据,如统计点击同一个doc的不同query中term的频率作为term的权重分数构造回归模型,也可以按分数划分成几个类别转换成分类任务。

  还可以基于embedding来判断词的重要性,如用term的向量减去query的pooling向量,diff越小则词的重要性越高。又或者通过seq2seq模型 + attention分数来表示term weight,可以在搜索日志中选品query和相关性高的doc,构造query和doc的seq2seq模型,利用doc对query中每个term求attention的特点,使用attention分数来表示query中每个term的权重,这种方案适合离线计算好一些query的term weight。

二、query改写

1、query纠错

  纠错系统可以分为召回和排序两个模块,另外纠错的力度不可以太大,可以通过编辑距离控制纠错的力度。

  在搭建纠错的召回系统时,要先分析错误通常来源于哪些方面,一类常见的错误有英文拼写错误、拼音错误、简拼、拼音和文本的混合使用;另一类常见的错误是漏词、多词、谐音词、模糊音、形近词等等。针对每一种类型的错误需要构建相应地召回模块,大多都是离线构造好映射词典,如拼音到词的映射、形近词的映射,此外梳理好标准的query库,可以使用编辑距离召回相应的query,解决漏字、多字、颠倒等问题。

  纠错的排序模型可以使用n-gram的统计语言模型,或者基于rnn的深度学习语音模型来打分排序,也可以使用gbdt,显示地构造特征来打分排序。

  纠错系统通常在分词后面就要跟上。

2、query扩展

  query扩展是基于当前用户输入的query提供相似的query给到用户,在用户输入一次query无法完成搜索时,可以通过点击推荐的扩展query完成搜索,扩展query也可以用来弥补召回不足的情况。query扩展可以离线挖掘一批高频的query对,也可以构建query匹配模型,匹配相关的query。

  query对的也可以从行为数据中挖掘,如一个session内,前后变换的query一般存在相关性;此外将一个搜索session看作是一个句子,一个query对应到句子中的一个词,具有相同上下文的query具有相关性,这样就可以通过训练query2vec将query向量化,进而通过embedding相似度得到query对。

3、query归一

  query归一也是改写的一种,主要是解决同义词的问题,将不常见的同义词归一到高频的标准词上,也提高召回的内容,同义词的挖掘比较困难,可以使用已有的开源同义词库作为基础同义词库,后面逐步挖掘领域内的同义词,由人工确认后添加到同义词库中,同义词库是需要慢慢迭代维护的。

三、query意图识别

  query属于短文本,在构建意图分类、槽值抽取时因信息量过少,得到的结果准确性不高,一是可以引入用户的特征数据辅助识别意图、二是输出模糊的意图,如各类别的分数等等。但对于长尾的query的意图识别,由于缺乏足够的用户行为数据,还是比较难处理得很好,所以建立query之间的关系,或者通过丢词等做法关联到头部query上,都有可能解决部分意图识别不准的问题。

posted @ 2023-04-11 14:31  微笑sun  阅读(517)  评论(0编辑  收藏  举报