以上,都是在用户输入正确搜索词时的查询分析。那如果用户的输入有误,比如说,将「极客时间」输成了「即可时间」,或者是「级可时间」,搜索引擎又会怎么办呢?这个时候,我们就需要用到查询纠错功能和查询推荐功能了。
我们先来说一说查询纠错功能是如何使用的。查询纠错的过程一般会分为三个步骤,分别是错误判断、候选召回和打分排序。
一般来说,在错误判断阶段,我们会根据人工编辑以及对搜索日志进行数据挖掘,得到常见字典和混淆字典。然后,我们使用哈希表或者字典树等结构来对字典进行索引,使得这两个字典具有高效的检索能力。如果某个分词后的检索词,我们无法在常用字典中查询到,或者它出现在了混淆字典中,那就说明这个词很可能是错误的。因此,我们还需要启动后续的候选召回和打分排序步骤。
不过,近年来,基于语言模型和机器学习的错误判断方式被广泛地使用。这种判断方式具体来说就是,我们会在用户输入检索词后,先对其进行置信度判断,如果得分过低,再进入后续的纠错过程。这能帮助我们更好地进行纠错。为什么这么说呢?我们来看一个例子,如果我们将「极客」错误地输入成了「级可」,通过检索常用字典和混淆字典,我们是有可能发现这个错误的。但如果我们错输成「即可」,由于「即可」本身也是一个合理的词,因此我们就需要使用基于语言模型和机器学习的方法,计算「即可」这个词出现在这个上下文中的置信度,才能发现有错。
在错误判断完成之后,就进入候选召回阶段了。在候选召回中,我们会预估查询词出错的每种可能性,提前准备好可能的正确结果。一般情况下,中文输入有 2 种常见的出错情况。
第 1 种,拼音相同但是字不同。这时,我们就要将相同拼音的词作为候选集,以拼音为 Key 进行检索。第 2 种是字形相似,那我们就生成一个相似字型的词典,通过该词典召回候选集。此外,还有根据编辑距离进行相似召回,根据机器学习得到候选集进行召回等。通过这些不同的纠错方式,我们就能得到可能的纠错结果集合了。
最后,我们要对众多的纠错结果进行打分排序。在这个过程中,我们可以使用各种常见的机器学习和深度学习算法进行打分判断(你可以回忆一下 11 讲,我们讲过的那些方法),将得分最高的纠错结果返回。这样就完成了整个查询纠错过程。
好了,到这里,我们就把查询纠错的过程说完了。至于查询推荐,则更多的是分析搜索日志的结果,用「查询会话」「点击图」等技术,来分析哪些检索词之间有相关性。比如说,如果检索「极客时间」和检索「极客邦」的用户都会浏览相同的网页,那么「极客邦」就很有可能出现在「极客时间」的相关推荐中。
因此,查询推荐可以提供出更多的关键词,帮助搜索引擎召回更多的结果。它一般会在关键词不足的场景下被启用,或是作为补充提示出现。所以,关于查询推荐我就不再多说了,你只要记住查询推荐的原理就可以了。
总的来说,通过查询分析、查询纠错、查询推荐的过程,搜索引擎就能对用户的意图有一个更深入的理解。那接下来,我们就通过得到的一系列关键词,也就是【极客、时间、极客时间】,去查询倒排索引了。