Query改写笔记

  • 提出的前提
    用户搜索query时,搜索系统一般会先对query进行分词,如果query分词的term命中倒排索引,则相应的doc即可被召回。 这种方法简单有效,一般情况下相对准确,但也有明显的不足:
    相同的意图往往有不同的query表达方式,仅依靠字面分词匹配,会损失一定的召回。 在候选量有限的情况下非常容易出现空结果或少召回的情况。电商领域中常见的关键词堆砌问题虽然可以缓解少召回的问题,但召回结果往往出现语义漂移;
    搜索系统有非常多的方法解决上述问题,比较典型的包括:多粒度分词增加索引命中概率、语义向量匹配、Query改写等。

query改写的方式

  • query归一:
    通过简单的字符串处理进行query改写,如去空格、大小写转换、特殊字符处理等,为最简单的query改写方式。
  • query纠错:
    对有拼写错误的query进行主动纠错,减少误召回,提升召回数量和准确性。
  • query丢词:
    对于空结果、少结果query进行非关键词的丢弃,一般用于二次召回,提高召回数量。
  • query拓展:
    根据query语义或意图进行拓展,找到与源query意图一致的一组query,并与源query一同进行检索,进而丰富搜索召回的结果。
    对于各种模式的query改写都有相应的方式方法,篇幅原因,这里先行介绍改写空间最大的query拓展(下文的query改写如不做特殊说明,则特指query拓展)。

具体的,与类目预测的总体框架类似,Query改写也可抽象为两个步骤,包括改写候选召回、改写判别(如果召回控制较准,可省略判别过程)。相应地,改写候选召回经典策略包括:

  • 基于同义词:直接通过同义词表映射对query进行改写,简单准确(下文不作专门讨论)。
  • 基于行为统计:基于用户点击行为等统计信息找相似query,参考协同过滤或Swing方法。
  • 基于内容:对query进行内容理解,如word2vec、向量召回,找相似query。
    基于session:同session内作为一个序列,参考word2vec,训练query向量度量query相似度;或者根据用户session内换更换query的统计特征进行query改写候选召回。
  • 而改写判别则一般基于人工标注的训练数据,进行特征工程训练二分类判别模型,如GBDT或DNN模型等。判别模型依赖的特征可以使用改写召回过程中的中间特征,也可以是直接对源query和候选query进行语义匹配进行建模,最终得到置信度最高的改写结果。

整体过程如下所示:
在这里插入图片描述

改写召回和改写判别的一般方法。

改写召回

  • 基于行为统计
    基于行为统计的query改写召回的核心思路比较简单,即:共同点击同一个item的query可能为意图一致的query。具体实操可参考经典的推荐i2i召回算法,如协同过滤方式:先构建query到doc的点击矩阵,得到query稀疏表示,进而通过表示距离计算得到源query的相似query;再如swing算法:将query id看作user id,计算相应点击商品的swing,得到类似i2i的q2i。该类方法适用对点击行为丰富的头部query进行改写。

  • 基于内容
    基于内容的方法核心是通过语义理解的方式,对源query拓展出相同语义的query,主要有匹配和生成两种方式:

    • 基于语义匹配的query改写:
      通过构建<query, query>的相似pair对作为训练数据,训练深度语义匹配模型(一般为双塔结构,方便向量方式召回候选),而相似pair对的构建可以基于上述行为统计的方法,也可直接训练query-item的语义匹配,间接也可得到query2query的语义度量模型。
    • 基于生成的query改写:
      通过seq2seq的模型架构,直接进行query2query的生成,训练数据仍可来源于行为统计的query pair对;另一种思路可以借鉴Skip-Thought Vectors,将一个session内的query作为一个序列(q_1, q_2, …, q_n),可以采样得到一条训练样本(q_i-1, q_i, q_i+1),在seq2seq架构下,通过encoder对q_i进行编码,decoder解码出q_i-1和q_i+1。这样得到的encoder输出的context向量即可作为query的表示向量,并可用于相似query召回。
      上述方法中,构造query pair对样本以及匹配/生成的方法还有很多,如引入比较流行的预训练+微调的方法。这类基于内容的query改写策略,可以将对头部query语义的理解泛化到用户行为不足的长尾query,提升长尾query的改写效果。
  • 基于session
    基于session的方法的query改写可以从两个思路出发,1是用户同一个session内query往往意图相似;2是将用户session内所有行为看作一个doc,query看作doc中的词,类似地,相同上下文的query很可能具有相同的语义。第一个思路的具体实现可简单通过频率统计的方法,第二个思路则可参考word2vec或上文所述的生成模型方法。

改写判别
这里以GBDT特征融合方法来介绍改写判别的一般方式,具体地,先经过特征工程得到源query和候选改写query的统计和语义相似度特征,再基于标注数据对特征进行融合,改写候选进行置信判别。除了改写召回阶段的中间特征可以直接利用外,还可进一步构造出更多的统计或匹配特征,如:

  • term重合率、实体term重合率、去停用词或引入term weighting的term重合率
  • 各种字面匹配距离,如编辑距离特征:
  • 基于频率或tf-idf的词袋模型表示的向量cosine距离。
  • word2vec表示距离、bert语义向量表示距离。
  • 点击doc集合的重合度、点击类目集合的分布差异距离(如Jaccard相似度,KL散度)。
  • 核心必要属性是否共同包含。
  • query pair对的基础特征,如term数、核心属性数等。

    基于众多特征,经过特征融合,可以得到更加准确的改写结果。

其他改写方式
除了上述常规的query改写,还可以将query直接映射到意图ID,如类目ID、商品CPV ID等。该类改写常应用于类目、属性(年龄、尺码、型号等)等维度的搜索。如query"裙子"可以映射到“连衣裙”类目ID、“女式手表”改写为“CPV:3214221 AND 手表”,其中3214221为属性性别-女的ID。直接将query映射到意图ID一种常用的方式是使用规则映射,而映射规则一般来源于数据挖掘得到的词或短语到ID的映射。

https://zhuanlan.zhihu.com/p/351084105添加链接描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值