搜索引擎是如何工作的【简述】

ernestwang 1564 0

搜索的普遍流程

搜索,推荐,广告三兄弟,整体的技术栈,流程框架是比较相似的。主要区别在于业务逻辑上的细微不同,但是可以肯定的是,搜索是三兄弟中最重要的。

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

  • 数据预处理
  • 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 进行一个排序,将用户可能感兴趣的排到前面去。

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

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

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

其它内容

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

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

总结

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

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

我的博客即将同步至 OSCHINA 社区,这是我的 OSCHINA ID:osc_00948983,邀请大家一同入驻:https://www.oschina.net/sharing-plan/apply

标签: 算法 搜索算法

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~

复制成功
微信号: irenyuwang
关注微信公众号,站长免费提供流量增长方案。
我知道了