知乎中的“近义词”(三):让搜索更智能

之前为了方便对知识的搜索,做了个搜索引擎。但是其中的算法非常基础,经常在需要装逼的时候搜不到,比如有次想搜火车的座位排布,结果搜“火车”,或者“铁路”,弄死搜不到。这真是令人尴尬。后来过了好久才发现其实那个答案里面提到的是“高铁”。从那以后就在想,要是搜索引擎能更智能一点,哪怕你输入的关键字是“火车”,也能搜到“高铁”就好了。最近做了一些针对知乎“近义词”的工作,正好可以用到搜索里面来。

老规矩,先上demo。zhihu.grapeot.me/retrie

这个demo用的是一个非常小的数据库,只有150个文档。文档的具体内容在这里:zhihu.grapeot.me/text.t。主要是想演示一下如果我们用A做关键字,在A不太能搜到的情况下,能不能把和A相关的B关键字也匹配上。

试试看搜索“火车”,现在能出来和高铁相关的内容了!

而如果搜索“痛苦”的话(链接),也会出现含有“绝望”,“苦难”等字眼的文档。


这个搜索引擎还有一个比较意外的功用是,可以搜索一些相对模糊或者抽象的关键字,把相关的内容全部搜出来。比如如果我们搜索语言(链接),可以看到结果里包含了汉语,英语,日语,甚至满语和象形文字的内容。而更神奇的是,大部分结果都并没有“语言”这个词。知乎官方最近做的话题索引功能,其实非常适合用这个东西来自动抓取,供人工迅速编辑呢。

总的来说,相比于传统的按词匹配的搜索引擎,加入了神经网络以后的智能搜索引擎可以在词-文档,文档-文档乃至标签-文档之中建立更为紧密的联系。这一方面可以帮助用户在不太记得关键字的情况下仍然完成搜索,一方面可以构建一个知识网络,从而进行很多其他的智能应用。现在我们的demo系统还有一些问题,比如用户搜索“英语”,我们会返回和搜索“语言”完全相同的结果。这是因为语料库以及模型规模还太小,没有学出来"英语"和"语言"其实是不同的东西。在实际的大语料库中可以比较简单地改善。

这个系统目前已经在一些投资公司里应用了。比如看项目书,看到无人机的项目,这个引擎会自动推荐更多的无人机的项目,帮助横向比较。这样基金经理就可以在不丧失系统性的情况下,大量浏览项目书,得出一个整体印象。类似的应用还有很多,我们也已经开发出了一个汉语Search Engine as a Service的服务。用户提交一个文本文件,我们就可以自动进行索引,并提供智能搜索服务。有意思的应用以及前景都是很广阔的。

编辑于 2016-11-21

文章被以下专栏收录