本文讨论如何用深度学习系统来构造语义搜索引擎的问题。这里所谓的语义搜索,是指的能做用户查询和搜索网页之间的语义级别匹配,比如说,用户输入“Iphone”,虽然某篇文章讲到了“苹果公司正在试图做新型的手机”,但是没有明确说iphone的字样,那么即使如此也能够将这篇文章找出来。传统的搜索引擎对于这种情况是无能为力的,因为它们基本上还是基于字面匹配作为排序的基础的,没有任何字面匹配的结果是不会被搜索出来的,即使两者在语义上讲非常相关也不行。
搜索引擎大家平常都会用,所以这块不必说。但是从技术角度讲,搜索是在干什么事情?这个需要简单说明一下。所谓搜索,就是说我们手头假设有10亿个网页,形成文档集合D,用户想找一个信息,向搜索引擎发出用户查询Query。搜索引擎本质上就是计算文档集合D中每个网页和用户查询Query之间的相关程度,越相关的排在搜索结果前列,就形成了搜索结果。
所以本质上搜索就是对于两个信息:Query 和某篇文档Di,计算两者之间的相关程度。传统的方法是寻找两者之间的特征重合程度来判断的(此文我们不考虑链接关系等因素,纯考虑文本匹配角度),比如TF.IDF啊,查询词是否在标题出现啊等等特征。
也就是说,对于搜索来说,可以将其改造成句子对匹配的问题,即可以如下理解搜索问题:
意思是说,给定了用户查询和某篇文章,经过映射函数,给出两者相关还是不相关的判断,或者给出从1到5的不同相关程度的分类结果,1代表不相关,5代表非常相关:
就是说给定Doc和Query,利用神经网络构造映射函数,映射到1到5分值空间里面。
之前我们归纳过对于句子匹配问题常见的几种基于RNN的网络结构,而本文给出将搜索问题看做是典型的句子匹配问题以及将其看做是特殊的句子匹配问题的神经网络结构。我们可以将这种基于RNN构建出的语义搜索神经网络结构称之为NeuralSearch结构。就我的阅读视野范围来看,目前看到过CNN做搜索问题的,还没有看到RNN结构的。当然其实神经网络做搜索的工作相对来说不多,这可能跟查询太短文档太长有一定关系,至于这里介绍的方法是否有效我也不知道,本文只是把这个想法分享一下。
在给出后续的RNN结构前,先给出一个非常简单易行的非监督的语义搜索模型。
|一种非监督的简单语义搜索模型
其实你要想通过神