搜索引擎之美

搜索引擎之美_第1张图片

       

目录

一、网络爬虫

二、索引和布尔算法

三、网页排序算法


  技术分为两种:道和术,道是做事的原则和原理;术是具体的做事方法。  ——吴军《数学之美》

       如果把技术比喻成一颗参天大树,“”就是最底下的树干,而“”只是从树干延伸出去的一片片叶子,只有掌握了“道”,才能发展成一个个“术”。在深度学习中,算法有千千万万种,全世界有那么多的研究者,几乎每隔一星期就有人发表新的算法论文,想要把这些算法都学完是绝对不可能的。但是,这些让人看得眼花缭乱的算法,其最核心原理,都离不开深度神经网络、卷积神经网络等这些最基本的算法。所以,要研究技术,最重要还是要把其中的“道”给研究透了。接下来,我们就来讲下搜索引擎的“道”!

一、网络爬虫

        在搜索之前,我们需要把网络上的所有网页下载下来,那怎样让计算机自动地下载所有的网页呢?这就要用到著名的“网络爬虫”技术。我们知道,每个网页上都很多个有超链接按钮,点击这些超链接就会自动跳转到其他网页,因此,各网页之间就通过这些超链接形成了连接,整个互联网就形成了一张大网,每个网页代表这张网上的一个节点。有了超链接,那我们可以从一个网页出发,自动地访问每个网页并存起来,这是网络爬虫的基本概念。

           至于如何去遍历每个网页,就要利用“图论”中的方法了,目前主要有:广度优先搜索(BFS)和深度优先搜索(DFS)两种方法。假如我要从某门户网站的首页出发,那么与首页直接链接的网页,我先称呼它们为第一层网页,然后与第一层网页超链接的网页,称为第二层网页,以此类推。简单来说,BFS就是先遍历所有第一层网页,再遍历所有第二层网页,逐层深入;而DFS的方法恰好相反,我先访问首页的某个第一层网页,再访问该网页的某个第二层网页,最终访问到头后,再返回来访问另一个第一层网页,然后依次类推。当然,在遍历过程中,肯定会遇到之前下载过的网页,这时候我们就需要做一张“散列表”来记录已经下载的网页,避免重复下载。

二、索引和布尔算法

       假设现在我们已经把互联网上所有的网页下载下来了,那么接下来的工作就是研发一个搜索的算法了。但问题又来了,现在的网页数量已经达到万亿的量级,如果逐个网页去搜关键字,那将要花费大量的时间,怎么办呢?这时候有人就想了,如果把互联网的网页看做一个整体的话,我能不能提前做好一张,这个表的每一行对应一个关键词,而关键词后面跟着一串二进制数,每个数字就代表一个网页是否包含这个关键词,有就填1,没有就填0,所以最终整张表就是只有0和1的矩阵。这样的话,只要找到这个关键词所在的那一行,所有填1的网页就是搜索结果!这个有个专门的术语——索引,它把复杂且耗时的搜索网页问题,简化成了查表,是一种化繁为简的方法。

       假如我们的搜索条件再复杂一点,例如我想搜2019年的美剧,我就要输入两个查询词“2019年”和“美剧”,表示我要搜索同时包含这两个词的网页。那接下来就简单的多了,只需要计算机对这两个词对应的两行进行布尔运算的“”计算即可(布尔运算是最简单的逻辑运算,包括“与”、“或”、“非”三种算法)。

       看到这你也许就恍然大悟了,其实“搜索”的过程不就是索引布尔运算!当然,原理就是这么个原理,但要实现起来还是有困难的,为什么?我们假设常用的词汇大概有30万个,网页库有100亿个网页,那么整个索引的大小就是3000万亿,一台服务器是绝对放不下这么大体量的索引的,所以我们必须把索引分成很多份,分别放到不同的服务器里,这涉及到分布式服务器的搭建。尤其是在现今的互联网时代,网页的数量每秒都在增加,面对如此巨大的搜索压力,Google还得根据网页重要性、访问频率、网页质量等制作不同级别的索引,常用的索引访问速度更快。

三、网页排序算法

       好了,现在我们输入关键词,就能得到成千上万个网页的搜索结果,那接下来的问题就是怎么对这些结果进行排序,把用户最想要的结果排在前面呢?

         决定网页排序的一个很重要因素就是网页本身的质量。那如何去衡量网页的质量呢?Google采用的是PageRank算法。这算法类似于民主表决,就是网页被其他网页链接(投票)得越多,它的质量就越好,排名越前。但是,每个网页的可靠程度是不一样的,不妨把每个网页都看作是股东,那占股80%的股东投出去的票的比重肯定比占股1%的股东要大,网页也是一样,网页的可靠度越低,其投票的占比就越低,那怎么来衡量网页的可靠度呢?还是得按网页的排名。这似乎进了一个死循环!!没事,可以用迭代的方法,先假设每个最开始网页的排名都是相同的,根据排名初始值算出各网页第一次迭代排名,再根据第一次迭代排名算出第二次迭代排名,以此类推,事实上迭代10次左右就能得到真正的排名了。而这种迭代算法的实现其实就是简单的二维矩阵相乘,具体公式见《数学之美》P102-103。值得一提的是,这个网页排序算法(PageRank)是Google创始人拉里佩奇提出的,这个算法也让佩奇在30岁就当选了美国工程院的院士!

       决定网页排序的另外一个因素就是网页和查询词的相关性。那如何度量这个相关性呢?一般采用TF-IDF作为衡量标准。TF就是词频(Term Frequency),它等于每个网页,关键词的出现次数除以网页总字数。IDF逆文本频率指数(Inverse Document Frequency),名字很复杂,但公式很简单,如下所示(其中,是互联网上的网页总数,是出现关键词的网页数):

                                                                                

       如果有某次查询三个关键词,那么各网页与这个查询的相关性为: 

                                            

       词频其实不难理解,词频越大,表示关键词出现在网页中出现的比例越大,但为什么还要乘以一个IDF呢?可以这么理解,在所有网页中,出现某关键词的网页数越少,关键词的权重越大。举个例子,假如我的查询词是“2019年的美剧”,那就包含了三个关键词:“2019年”、“”和“美剧”,那这三个词的权重肯定是不同的,“的”这个词几乎在每个网页都会出现,它对搜索结果的影响应该是最小的,那分配给它的权重应该最小;“美剧”对搜索结果的影响最大,它的权重应该比“”要大得多,而出现“美剧”的网页数肯定比出现“”要小得多。现在假设网页总数是10亿,含“2019年”的网页有7千万,所有网页都包含“”这个词,含“美剧”的网页有3千万,根据公式就可以得到这三个关键词的IDF分别是1.15、0、1.5,搜索的结果就比较合理了。我们也可以证明,网页与查询词的相关性越大,查询词在网页中的信息量越大(这里需要用到前面信息熵的概念)。因此,根据以上两种衡量标准,网页的综合排名可等于PageRank得到的网页排名乘以相关性TF-IDF

       以上便是搜索引擎的最基本原理,佩服吴军老师,能把如此复杂的道理说得简单易懂。

笔记内容来源:吴军《数学之美》8-11章

你可能感兴趣的:(精读笔记)