Bengxy
Little steps lead to great distances.
聊一聊Query的改写
2017-06-17 Leave a comment

在目前的搜索环境中,通常根据item的文本进行分词,建立倒排索引,供用户检索。

这种方法检索速度快,逻辑实现简单灵活,同时搜索出的结果可解释性较强。但是,在这种场景下,对检索词的匹配程度要求较高。

比如用户搜索“浙江大学“,那么文本中含有浙江大学的内容就会展示出来,但是像“ZJU、浙大”这样的缩写就难以捕获了。

比如

Query: 浙江大学 -> 浙江大学、ZJU、浙大、紫金港校区

对于下列文章的倒排索引

Doc1: 浙江大学卖校区,拍出地王。 【匹配】

Doc2: 浙大开学。 【不匹配】

Doc3: I love ZJU校庆活动。 【不匹配】

类似的: 老人机 -> 老年机、老人手机、老年人手机

如果不做Query改写,Query和Item描述之间的文本差异会导致大量满足用户意图的文本无法被召回。

解决这一问题,Query改写应运而生,Query的改写工作主要包括两个方面:

  • 多种描述改写
  • 意图预测改写(重点

多种描述改写

传统用于发现多种描述的方法是人工挖掘同种item的多种表述,没有太多可讲,真实场景下,相似度有几种衡量维度。

  1. 文本相似度: 比如老人机老年人手机的映射,后者的字符完全覆盖前者,因此可以设定一个公式用来度量他们的score,并设定一个阈值用来约束改写的程度,后期运营去除bad case,基本得到可用版本。常用的有基于编辑距离,N-gram等方法)。
  2. 跨语言匹配:比如阿迪达斯Adidas,或者是拼音的改写,这部分映射传统上需要依赖词表或人工构建,目前NLP领域有一些知识图谱的工作和翻译系统的工作,可以作为进阶版本。

意图预测改写

现在更加常用的是基于意图预测的改写,包括以下几种

  • word2vec相似召回
  • 基于item相似度的query协同
  • Seq2Seq

Word2Vec相似查找

一些基于词向量的方法,通过训练word embedding,把词映射的高维空间,接着直接查找最近的词向量,是一个简单有效的方法。

缺点有几个:

  1. 可解释性不强,无法解释为什么词和词相近
  2. 受限于语料库的质量,语料库差的时候会有一些难以解释的bad case,(比如连衣裙被改写成防晒霜)
  3. 依赖高维空间的向量化近邻检索

基于item协同抽取相似query term的方式。

对于一个搜索引擎,每日都有百万甚至上亿的请求,同时也产生了丰富的行为数据供我们挖掘分析。在用户的一次搜索Sesison里,会有一连串的搜索点击行为,点击的这些item通常具有相似性。那么我们就可以把其他item上的词移花接木,作为当前query的改写,扩充这次的query请求。

举个例子,用户搜索了运动鞋,并点击了以下商品

  • 耐克官方跑步鞋AJ运动鞋2019
  • 阿迪达斯官方女运动鞋Pure跑步鞋
  • 匹克态极减震跑鞋运动鞋女透气
  • Jordan子运动鞋气垫跑步

我们发现,通过对商品标题的分词,发现跑步鞋是高度协同出现的词,因此,我们可以用跑步鞋作为我们的补充。

稍等!

仔细想一想,我们用跑步鞋去召回似乎还说得通,但是用去召回,就有点太勉强了,更何况并不是跑步鞋的另一种表述,这肯定会召回很多男装或其他男鞋(如皮鞋)成为bad case。

这是因为,跑步鞋运动鞋频繁的关联出现,而和其他的query几乎不怎么出,(比如跑步鞋几乎不会和衬衫一起出现),但是这个词却和其他诸多的query有着关联。

要解这个问题很简单

  1. 我们可以用TF-IDF进行词频的重要性分析。关于TF-IDF,这里不多说,网上有很多博客介绍
  2. 我们还可以定义一个信息熵公式用来度量改写词对原有词的贡献$-\sum_i p(t, s_i) log(p(t,s_i))$。 这里$s_i$是所有改写词的集合,$t$是原来的主体词。$p(t,s_i)$表示两个词协同的概率。我们可以选出协同的Top-k作为过滤条件。

缺点在于,但凡基于i2i,都会面临长尾无覆盖的问题,因此需要针对中长尾特殊处理。

Seq2Seq方法

首先把query向量化,接着借助Seq2Seq的方法预测相关联的词组。

假设用户的点击序列是$(s_1, s_2, … , s_n)$,用滑动窗口获取子串$(s_{t-1}, s_t, s_{t+1})$,encoder是中间$s_t$的词序列RNN,decoder是两边$s_{t-1}$和$s_{t+1}$的次序列RNN。这样就可以学到对应单词和上下文的关联。

Seq2Seq依赖海量数据,以及漫长的训练和收敛过程。

Seq2Seq

跨媒体补充

跨媒体主要是根据Query的text embedding,用相近media的embedding向量补充,提高检索在media领域,如图片、视频上的检索能力。

比如搜索图片时,我们希望搜索一副色彩鲜艳的桌面壁纸,通过跨媒体的向量匹配,可以获得色彩鲜艳<->图片像素之间的关联,更好的反馈检索结果。

跨领域搜索是比较热门的方向,现在的做法是通过vector相似度,比如word2vecvgg16 embedding 之间计算关联。但是计算开销大。

此外还有很多tag based方法,速度快,是目前主流使用的方法。这类算法需要先人工对图片、视频打上tag,耗人力,但是效果好,像优酷、爱奇艺、壁纸应用等通常都是用这种方法。

本文作者:Bengxy

本文采用署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)协议

本文链接:http://blog.bengxy.com/posts/7133a858/

Rank NLP Query Rewrite