一篇文章告诉你搜索引擎是如何工做的

搜索的广泛流程

搜索,推荐,广告三兄弟,总体的技术栈,流程框架是比较类似的。主要区别在于业务逻辑上的细微不一样,可是能够确定的是,搜索是三兄弟中最重要的。web

搜索的总体流程一样是召回,排序两大块。可是除此以外,从一个完备的搜索引擎来看,要处理的事情远不止这么简单。整体来看,整个搜索能够看做这么几个阶段:算法

  • 数据预处理
  • query understanding
  • 召回模块
  • 排序模块
  • 后处理

数据预处理

对于输入 query 第一步须要预处理为方便操做的形式,以供后续的步骤能够有效进行。常见的操做有:微信

  • 无效内容的过滤:好比标点符号, emoji 表情,奇怪的字符等。
  • 简繁体转化。
  • 长度截断。
  • 数字转中文,中文数字转阿拉伯数字等。
  • 译名,别名等转化。
  • 禁搜词,禁搜内容等过滤。

在预处理后能够得到一个比较规整的 query 字段,接下来对相应的 query 进行逐步处理。框架

QU/query understanding

QU 部分的内容并不是一个搜索引擎必须的,但倒是一个想要作好作优秀的搜索引擎必须的。整个 QU 部分的效果会对召回和排序阶段都产生巨大影响,然后续的不管召回仍是排序都很依赖这一步的结果。机器学习

QU 部分的技术栈基本都是 nlp 的一些常见操做,整体来讲是比 nlp 要简单的,由于目的很清晰,用户的 query 确定是但愿获得某类结果。具体主要是如下内容:编辑器

  • 分词。这里也有常见的不一样方法,你们能够针对性去了解对应的内容。
  • 纠错。好比搜索周杰论,咱们可能须要给纠正成周杰伦。
  • 词干提取和词形还原。
  • 命名实体识别。得到每一个词的实体类型。
  • 意图识别。分析用户的搜索意图,这个也要针对业务进行分析,好比电商搜索,音视频的搜索,网页搜素都不相同。

对于整个 QU 部分来讲,为下游的工做起到一个相当重要的做用。这一步的效果在很大程度上决定了接下来的工做能作到的上限,若是你对 query 通过一系列处理,变得不好,那么后面的搜索步骤也没法取得好的效果。学习

召回模块

这里的方法其实主要是三类:大数据

  • MySQL,Redis 等 keyword 直接精确匹配。这种方法简单直接,可是局限性较大。
  • ElasticSearch,也就是咱们常常听到的 ES,一些不靠搜索吃饭的公司,基本上用 ES 就能够完成绝大多数需求了。
  • 对 query 进行 embedding,而后利用诸如 BM25 等方案进行类似性召回。若是想要作个性化的推荐,就同时也能够考虑用户的历史行为做为 embedding 信息,一块儿加入进来。

排序模块

有的工程里面,会将排序再拆分粗排,精排,重排等等,可是本质上都是同样的,就是将召回拿到的内容,按照用户输入的 query 进行一个排序,将用户可能感兴趣的排到前面去。搜索引擎

其实这里的内容是你们常常看论文比较常见到的部分,各类模型和结构,各类奇思妙想,都基本上是以排序为主。spa

排序的核心其实主要就是三方面,一个是 query 的 embedding,一个是 item 的embedding,第三个是如何判断它们之间的相关性。大多数模型的工做也集中在这三点上。

可是就个人经验来看,实际应用中,简单的 LR 之类的模型,就能够解决百分之八九十的问题了。要想精益求精,才是接下来须要模型的时候。

其它内容

在搜索的过程当中,一些其它辅助功能也很重要。首当其冲的是 suggest,对用户的输入进行提示和建议,这部分的内容也能够和纠错进行结合。

还有包括大数据分析的部分,毕竟搜索仍是以 bad case 为驱动的,不像推荐,用户的容忍度比较高,对于 bad case 的分析和解决也很重要。

总结

这篇文章简要的介绍了一下一个搜索引擎须要作的工做,可能不接触这方面的人认为,搜索主要都在作排序算法方向的研究。经过这篇文章能够帮助你们了解到整个过程须要涉及到的技术,想要尝试作一些搜索方面工做的小伙伴也能够对照参考补充加技能点。

总的来讲,搜索是一个对算法和工程能力都比较有要求的领域,不管是作算法仍是作开发的朋友,均可以向这方面进行涉猎,也是一个很锻炼人的方向。

后面有机会咱们再继续详细介绍相关的内容。


本文分享自微信公众号 - 机器学习与推荐系统(ml-recsys)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。