Query 改写
步骤:候选召回、改写判别
候选召回
-
基于同义词
- 直接通过同义词表映射对query进行改写
-
基于行为统计
-
核心思路 :-> 基于用户点击行为等统计信息找相似query,共同点击同一个item的query可能为意图一致的query。
-
具体实现
-
推荐i2i召回算法,如协同过滤方式:#card
-
先构建query到doc的点击矩阵,得到query稀疏表示,
-
进而通过表示距离计算得到源query的相似query;
-
-
swing算法 #card
-
将query id看作user id,计算相应点击商品的swing,得到类似i2i的q2i。
-
该类方法适用对点击行为丰富的头部query进行改写。
-
-
-
-
基于内容
-
对query进行内容理解,如word2vec、向量召回,找相似query。
-
基于语义匹配的query改写 #card
-
通过构建<query, query>的相似pair对作为训练数据,训练深度语义匹配模型(一般为双塔结构,方便向量方式召回候选),
-
而相似pair对的构建可以基于上述行为统计的方法,也可直接训练query-item的语义匹配,间接也可得到query2query的语义度量模型。
-
-
基于生成的query改写:#card
-
通过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 #card
-
同session内作为一个序列,参考word2vec,训练query向量度量query相似度;或者根据用户session内换更换query的统计特征进行query改写候选召回。
-
1是用户同一个session内query往往意图相似;
- 可简单通过频率统计的方法
-
2是将用户session内所有行为看作一个doc,query看作doc中的词,类似地,相同上下文的query很可能具有相同的语义。
- 可参考word2vec或上文所述的生成模型方法
-
-
改写判别
- 一般基于人工标注的训练数据,进行特征工程训练 二分类判别 模型,如GBDT或DNN模型等。
- 这里以GBDT特征融合方法来介绍改写判别的一般方式,具体地,先经过特征工程得到源query和候选改写query的统计和语义相似度特征,再基于标注数据对特征进行融合,改写候选进行置信判别。除了改写召回阶段的中间特征可以直接利用外,还可进一步构造出更多的统计或匹配特征,如:#card
-
term重合率、实体term重合率、去停用词或引入term weighting的term重合率
-
各种字面匹配距离,如编辑距离特征:
-
基于频率或tf-idf的词袋模型表示的向量cosine距离。
-
word2vec表示距离、bert语义向量表示距离。
-
点击doc集合的重合度、点击类目集合的分布差异距离(如Jaccard相似度,KL散度)。
-
核心必要属性是否共同包含。
-
query pair对的基础特征,如term数、核心属性数等。
-
除了上述常规的query改写,还可以将query直接映射到意图ID,如类目ID、商品CPV ID等。该类改写常应用于类目、属性(年龄、尺码、型号等)等维度的搜索。#card
-
如query"裙子"可以映射到“连衣裙”类目ID、“女式手表”改写为“CPV:3214221 AND 手表”,其中3214221为属性性别-女的ID。
-
直接将query映射到意图ID一种常用的方式是使用规则映射,而映射规则一般来源于数据挖掘得到的词或短语到ID的映射。