AI内参_149_142_数据科学家必备套路之一搜索套路
你好,我是洪亮杰。
今天我和你分享的主题是数据科学家必备套路之一。
搜索套路。
到目前为止,我们已经完整的介绍了搜索推荐和广告的主流技术,为你呈现了这些产品技术方向的整个生态系统。
在这些系列的分享里,我们重点介绍了这些技术方向的基本模型。
其括花了不少篇幅讲如何评测模型的好坏,包括如何进行线下评测以及线上评测。
同时我们从传统的经典模型讲到,最近几年利用深度学习对这些技术方向的提升,帮助你理顺了这些技术发展的脉络。
尽管我们已经在之前的文章中分享了这些技术的方方面面,但是对于很多经验较少的数据科学家或者人工智能工程师来说,依然会感到无法得心应手的把这些模型和知识给应用到真实场景中。
尽管出现这种情况,一方面是个人经验积累的脉络,毕竟从初学者到能够熟练应用各种模型工具,应对实际产品的需要,是一个长时间磨练结果。
然而另一方面也是因为搜索、推荐和广告这些产品场景其实有一些套路,在没有接触到这些套路的时候,往往会觉得不得要领。
而在慢慢熟悉了这些套路之后,进步就会慢慢加快。
那么在接下来的三篇文章里,我就有针对性的来分享这三个领域里一些常见套路。
今天我们首先从搜索产品套路说起。
第一个就是多轮打分套路。
我们前面已经介绍过多轮打分的系统架构了当我们想要构建任何一个搜索引擎时,就应该立刻想到多轮打分这个架构,这是一个基本套路。
我们先来回顾一下多轮打分最基本的模式。
针对一个搜索关键词,我们首先从索引中找到第一批,也是数目相对比较多的相关文档,这就是第一轮打分。
然后我们再根据一个相对比较复杂的模型,对剩余的文档进行打分套序,这是第二轮打分。
很多时候,两轮打分就已经能够满足需求了,可以直接给用户返回。
结果集。
当然了,我们也常常进入第三轮打分,这个时候经常是实现一个商业逻辑层,可以针对最后的搜索结构,加上一些商业规则。
多轮打分这个套路之所以关键是因为它其实影响了一系列的技术决定。
首先只有第一轮是直接作用在索引上的这一轮往往可以并行化,并且不需要太多考虑文档之间的顺序。
我来举个例子,说明,在一个大型搜索引擎的架构下,假设我们有一亿个文档,每五百万个文档存放在一个数据节点上。
如果我们有一个关键词是人工智能,那么就要到这二十个数据节点上分别查找包含这个关键词的文档。
当我们把所有的文档汇集起来以后,排序取出前一千个文档,这个时候就进入第二轮。
最简单的第二轮打分是在一个计算节点上进行的。
而且这个时候我们只针对一千个文档进行打分,对计算时间的要求就大幅度降低了。
那么在这样的情况下,第二轮打分使用的模型可以是比较复杂的模型,后面每一轮打分所针对的文档往往是越来越少,因此模型的复杂度就可以越来越高。
从解决问题的的角度上来说,第轮轮索引上的打分是要解决召回的问题。
这一轮有可能是从非常多,甚至是成千上万的文档中返回几百到几千不等的文档。
因此,一旦一些文档没有在这一轮中被返回,就无法在后面的轮数中被重新筛选出来。
所以我们要理清这么一个思路,那就是如果你认定系统有召回的问题,也就是说本该搜出来的东西完全搜索不出来,那肯定是在第一轮打分就出了问题。
第二轮以后的打分,解决的就是精度的问题了。
同时我们可以看到什么时候解决召回问题,什么时候解决精度问题,这其实是取决于具体的业务场景。
对于精度非常看重的搜索场景,比如说网页的信息类关键词。
例如,特朗普、比尔盖茨等,人们往往只关注前十位,甚至是前三位的搜索结果。
那么很明显我们可以先有一个比较简单的第一轮架构,比如就是文字匹配,而把功夫都下在第二轮以后的打分上。
而对于召会比较看重场景,比如说法律文档搜索,那必须要做好的就是第一轮的打分。
这个时候可能需要采用简单的文字直接匹配和语义的模糊匹配。
刚开始接触搜索产品的朋友往往会有一个困惑,那就是不知道该如何提升一个搜索产品,有一种无从下手的感觉。
那么对于搜索产品的提高,有没有什么套路可言呢?从而比较基本的套路就是把搜索关键词按照某种频率或者是流量分为高频关键词和长尾关键词,从而为这两类不同的关键词设计排序算法。
为什么要把关键词按照频率分开呢?我来介绍一下最主要的思路。
对于很多搜索网站来说,一些高频的关键词往往占据了相对来说比较大的流量。
而很多长尾的关键词,也就是仅仅出现过几次的关键词,则并没有太多人搜。
因此,如果我们先解决了高频的关键词,也就解决了大部分的搜索问题,从而可以把精历留下来,慢慢解决低频的长尾关键词。
而实际上,高频关键词因为有足够多的数据量,反而往往比较容易得以解决。
而低频关键词因为数据的匮乏,往往需要更多的精力和时间。
所以说从投资回报的角度来看,我们也需要做区分。
首先来解决高频的搜索关键词。
刚才我们提到了高频关键词的一个特点,就是有足够多的用户数据。
那么这里有一种非常简单的思路,或者说还没有较好模型的时候,可以首先使用的一种方法。
那就是每天记录下高频关键词文档的用户点击数据。
然后我们可以直接按照点击率或者是文档的转换率排序,并且把这个排序存在某种存储中。
当用户在这一天搜索这些高频关键词的时候,我们甚至可以直接从存储中调出事先算好的排序。
结果更加极端的做法就是手工对高频词进行更频繁的标注,这种做法往往是非常有效的。
例如我们刚才说的特朗普的例子,我们可以手工标注好前十名的结果。
然后存下来只需要每几天更新一下这个标注。
我们甚至不需要使用任何模型,就可以提供非常高质量的搜索结果。
当然,使用这种方法显然无法对几百万的搜索关键词都这么一一处理。
不过我们这里针对的主要是高频关键词,所以即便是针对最高频的一千个关键词进行手工标注,也会对整体的搜索效果有非常明显的提升。
相反,长尾的关键词往往需要花比较多的心思。
对于长尾来说,我们还可以细分。
比如对于有一定数据量的关键词,我们可以尝试针对这些关键词,单独训练一个模型。
之所以要单独训练一个模型,原因也很简单。
如果针对所有的关键词只有一个模型的话,高频的关键词因为流量大,往往就会让模型偏重于去解释高频的信息,而忽略了这些中低频的关键词的作用。
因此,先把高频词单独处理了,然后就可以针对依然可以训练的中频关键词,再选取一个单独的模型。
而针对非常低频的关键词,我们往往需要借助其他的方法来挖掘这些关键词的信息。
例如利用同类的其他关键词的数据,或者利用外界的知识库知识图谱的信息等。
除了分开处理高频和长尾关键词以外,搜索模型的提升。
还有一个非常简单的三大模型套路。
我们构建一个搜索引擎,从最原始的简单系统慢慢的比较复杂的,以至于到后期非常复杂的系统,从模型上来说要跨越三个台阶。
在这里,我们主要针对第二轮的打分系统进行讨论。
第一个台阶是使用线性模型。
当我们设置好了最基本的第一轮打分系统以后,首先要做好的是能够利用线性模型对文档进行排序。
这一步其实往往是搜索系统,从无人工智能到有人工智能的第一步。
这一步对搜索效果性能的提升可能会有百分之十到百分之二十。
第二个台阶是使用配对法线性模型。
一般来说,这一步搜索效果会有百分之二到百分之五的提升。
第三个台阶是使用树模型,特别是GBDT模型。
这步搜索效果的提升和第二步相似,约有百分之二到百分之五的提升。
然而,要从第二个台阶到达这个步骤,模型的特性可能会发生不小的变化。
这一个台阶可以算是一个比较困难的台阶。
从工程研发的角度来说,可以采用一年一个台阶的做法,在已经穷尽了当前台阶所有可能用到的特性以后,再进入到下一个台阶。
也就是说尽可能的榨干当前台阶模型效果的养分。
今天我为你介绍了做搜索产品的几个套路,一起来回顾一下要点。
第一,我们回顾和总结了多轮打分系统的架构套路。
第二,我们介绍了区分高频关键词和长尾关键词的套路。
第三,我们简单讨论了三大模型套路跨越三个台阶,逐步提升搜索效果。
最后给你留一个思考题,为什么不鼓励直接采用深度学习模型呢?欢迎你给我留言,和我一起讨论。