想要优化打分过程,一个很自然的思路就是通过简化打分机制,来降低打分开销。但是简化之后,我们的排序结果就不精准了。这该怎么办呢?这个问题先不着急解决,我们先来看看不精准的排序结果对用户会有什么影响。
其实,在搜索引擎中,排在第一页的结果并不一定是分数最高的。但由于用户在搜索时,本来就没有明确的目标网页,所以只要第一页的网页内容能满足用户的需求,那这就是高质量的检索结果了。
不仅如此,在推荐引擎中也是一样。推荐系统会根据用户的历史行为进行推荐,可推荐的物品非常多。比如说,如果用户曾经购买过《C++ 程序设计》这本书,那接下来我们既可以推荐《C++ 编程实战》,也可以推荐《C++ 编程宝典》。无论我们推荐哪一本,可能对用户来说差别都不大。
我们发现,其实在很多实际的应用场景中,高质量的检索结果并不一定要非常精准,我们只需要保证质量足够高的结果,被包含在最终的 Top K 个结果中就够了。这就是 非精准 Top K 检索的思路。
实际上,在工业界中,我们会使用非精准 Top K 检索结合精准 Top K 检索的方案,来保证高效地检索出高质量的 结果。具体来说,就是把检索排序过程分为两个阶段:
● 第一阶段,我们会进行非精准的 Top K 检索,将所有的检索结果进行简单的初步筛选,留下 k1 个结果,这样处理代价会小很多(这个阶段也被称为召回阶段);
● 第二个阶段,就是使用精准 Top K 检索,也就是使用复杂的打分机制,来对这 k1 个结果进行打分和排序,最终选出 k2 个最精准的结果返回(这个阶段也被称为排序阶段)。
其实,这个流程你应该很熟悉。这就像我们在招聘时,会先根据简历筛选,再根据面试结果进行筛选。简历筛选的效率很高,但是不精准;面试比较耗时,但能更好地判断候选人的能力,这就属于精准挑选了。
再说回到工业界的检索方案,非精准 Top K 检索到底是怎么使用简单的机制,来加速检索过程的呢?加速的效果如何呢?我们一起来看看。