首页 理论教育 布尔代数与搜索引擎:数学美的简洁

布尔代数与搜索引擎:数学美的简洁

时间:2023-11-04 理论教育 版权反馈
【摘要】:以下我们将从布尔代数和搜索引擎的索引来看数学美妙的简洁。布尔运算是针对二进制,尤其是二进制第二个特性的运算,它很简单,可能没有比布尔运算更简单的运算了。尽管今天每个搜索引擎都宣称自己如何聪明、多么智能,其实从根本上来讲都没有逃出布尔运算的框框。现代物理的研究成果表明,我们的世界实实在在是量子化的而不是连续的。早期的文献检索查询系统,严格要求查询语句符合布尔运算。

布尔代数与搜索引擎:数学美的简洁

以下我们将从布尔代数搜索引擎的索引来看数学美妙的简洁。

搜索引擎的原理其实非常简单,建立一个搜索引擎大致需要做这样几件事:自动下载尽可能多的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序。

腾讯内部升级搜索引擎时,首先要改进和统一的就是所有搜索业务的索引,否则提高搜索质量就如同浮沙建塔一样不稳固。我们介绍搜索要从索引出发,因为它是基础,也最重要。

(1)布尔代数

世界上不可能有比二进制更简单的计数方法了,它只有两个数字0和1。从单纯数学的角度讲,它甚至比我们的十进制更合理。但是我们人有10个手指,使用起来比二进制(或者八进制)方便得多,所以在进化和文明发展过程中人类采用了十进制。二进制的历史其实也很早,中国古代的阴阳学说可以认为是最早二进制的雏形。而二进制作为一个计数系统,公元前2—5世纪时由印度学者完成,但是他们没有使用0和1计数。到了17世纪,德国伟大的数学家莱布尼兹把它完善,并且用0和1表示它的两个数字,成为我们今天使用的二进制。二进制除了是一种计数方式外,它还可以表示逻辑的“是”与“非”。这第二个特性在索引中非常有用。布尔运算是针对二进制,尤其是二进制第二个特性的运算,它很简单,可能没有比布尔运算更简单的运算了。尽管今天每个搜索引擎都宣称自己如何聪明、多么智能,其实从根本上来讲都没有逃出布尔运算的框框。

布尔(George Boole,1815—1864)是19世纪英国的一位中学数学老师,还创办过一所中学,后来在爱尔兰科克(Cork)的一所学院当教授。生前没有人认为他是数学家,虽然他曾经在剑桥大学数学杂志(《Cambridge Mathematical Journal》上发表过论文。布尔在工作之余,喜欢阅读数学论著,思考数学问题。1854年,布尔的《思维规律》(An Investigation of the Laws of Thought,on which are founded the Mathematical Theories of Logic and Probabilities)一书,第一次向人们展示了如何用数学的方法解决逻辑问题。在此之前,人们普遍的认识是数学和逻辑属两个不同学科,今天联合国教科文组织依然将它们严格分开。

布尔代数简单到不能再简单了。运算的元素只有两个:1(TRUE,真)和0 (FALSE,假)。基本运算只有“与”(AND)、“或”(OR)和“非”(NOT)3种(后来发现,这3种运算都可以转换成“与非”AND-NOT一种运算)。全部运算只用下列几张真值表(表7-1~表7-3)就能完全描述清楚。

表7-1 与运算真值表

表7-1说明,如果AND运算的两个元素有一个是0,则运算结果总是0。如果两个元素都是1,则运算结果是1。例如,“太阳从西边升起”这个判断是假的(0),“水可以流动”这个判断是真的(1),那么“太阳从西边升起并且水可以流动”是假的(0)。

表7-2 或运算真值表

表7-2说明,如果OR运算的两个元素有一个是1,则运算结果总是1。如果两个元素都是0,则运算结果是0。比如说,“张三是比赛第一名”这个结论是假的(0),“李四是比赛第一名”是真的(1),那么“张三是比赛第一名或者李四是比赛第一名”就是真的(1).

表7-3 非运算真值表

表7-3说明,NOT运算把1变成0、把0变成1。如果“象牙是白的”是真的(1),那么“象牙不是白的”必定是假的(0)。

也许有很多人会问这么简单的理论问题能解决什么实际问题。和布尔同时代的数学家们也有同样的疑问。事实上,在布尔代数提出后的80多年里,它确实是没有什么像样的应用,直到1938年香农在他的硕士论文中指出用布尔代数来实现开关电路,才使得布尔代数成为数字电路的基础。所有的数学和逻辑运算,加、减、乘、除、乘方、开方等,全部都能转换成二值的布尔运算。我们知道,数学的发展实际上是不断地抽象和概括的过程,这些抽象了的方法看似离我们的生活越来越远,但是它们最终都能找到适用的地方,布尔代数便是如此。

现在来看文献检索和布尔运算的关系。对于一个用户输入的关键词,搜索引擎要判断每篇文献是否含有这个关键词。如果一篇文献含有它,我们相应地给这篇文章一个逻辑值——真(TURE或1);否则,给一个逻辑值——假(FALSE或0)。比如,要找有关原子能应用的文献,但并不想知道如何制造原子弹,可以这样写一个查询语句——原子能AND应用AND(NOT原子弹),表示符合要求的文献必须同时满足3个条件:

包含原子能,包含应用,不包含原子弹(www.xing528.com)

一篇文献对于上面每一个条件,都有一个TURE或者FALSE的答案。根据上述真值表就能算出每篇文献是否是要找的,这样逻辑推理和计算就合二为一了。

布尔代数对于数学的意义等同于量子力学对于物理的意义,它们将我们对世界的看法从连续状态扩展到离散状态。在布尔代数的世界里,万物都是可以量子化的,从连续的变成一个个的,它们的运算“与、或、非”也就和传统的代数运算完全不同了。现代物理的研究成果表明,我们的世界实实在在是量子化的而不是连续的。我们的宇宙的基本粒子数目是有限的,而且远比古高尔(10100)要小得多。

(2)索引

大部分使用搜索引擎的人都会吃惊为什么它能在零点零几秒中找到成千上万甚至上亿的搜索结果。显然,如果是扫描所有的文本,计算机扫描的速度再快也不可能做到这一点,这里面一定暗藏技巧。这个技巧就是建索引。这就如同我们科技读物书后的索引,或者图书馆的索引。如果用图书馆的索引卡片作类比,每个网站就像图书馆里的一本书,我们不可能在图书馆书架上一本本地找,而是要通过搜索卡片找到它的位置,然后直接去书架上拿书。图书馆的索引卡片当然无法进行复杂的逻辑运算。但是,当信息检索进入计算机时代后,图书的索引便不再是卡片,而是基于数据库。数据库的查询语句(SQL)支持各种复杂的逻辑组合,但是背后的基本原理是基于布尔运算的,至今如此。早期的文献检索查询系统,严格要求查询语句符合布尔运算。相比之下,今天的搜索引擎要聪明得多,它会自动把用户的查询语句转换成布尔运算的算式,但其基本原理不变。

最简单的索引结构是用一个很长的二进制数来表示一个关键字是否出现在每篇文献中。有多少篇文献,就有多少位数,每一位对应一篇文献,1代表相应的文献有这个关键字,0代表没有。比如关键字“原子能”对应的二进制数是0100100011000001…,表示第二、第五、第九、第十、第十六篇文献包含这个关键字。上述过程其实就是将一篇篇千差万别的文本进行量化的过程。注意,这个二进制数很长。同样,假定“应用”对应的二进制数是0010100110000001…,那么要找到同时包含“原子能”和“应用”的文献时,只要将这两个二进制数进行布尔运算AND。根据上面的真值表,我们知道运算结果是0000100000000001…,表示第五篇、第十六篇文献满足要求。

注意,计算机做布尔运算是极快的。现在最便宜的微机都可以在一个指令周期进行32位布尔运算,一秒钟进行数十亿次以上。当然,由于这些二进制数中的绝大部分位数都是0,只需要记录那些等于1的位数即可。于是,搜索引擎的索引就变成了一张大表:表的每一行对应一个关键词,而每一个关键词后面跟着一组数字,是包含该关键词的文献序号

对于互联网的搜索引擎来讲,每一个网页就是一个文献。互联网的网页数量是巨大的,网络中所用的词也非常非常多。因此,这个索引是巨大的,在万亿字节这个量级。早期的搜索引擎(比如Alta Vista以前的所有搜索引擎),由于受计算机速度和容量的限制,只能对重要的关键的主题词建立索引。至今很多学术杂志还要求作者提供3~5个关键词,这样所有不常见的词和太常见的虚词就找不到了。现在,为了保证对任何搜索都能提供相关的网页,主要的搜索引擎都是对所有的词进行索引。但是,这在工程上却是一件很有挑战性的事情。

假如互联网上有100亿2个有意义的网页,而词汇表的大小是30万(也是保守估计的数字),那么这个索引的大小至少是100亿×30万=3000万亿。考虑到大多数词只出现在一部分文本中,压缩比为100:1,也是30万亿的量级。为了网页排名方便,索引中还需要有大量的附加信息,诸如每个词出现的位置、次数等。因此,整个索引就变得非常之大,显然,这不是一台服务器的内存能够存下的。所以,这些索引需要通过分布式的方式存储到不同的服务器上。普遍的做法就是根据网页的序号将索引分成很多份(Shards),分别存储在不同的服务器中。每当接受一个查询时,这个查询就被分发到许许多多服务器中,这些服务器同时并行处理用户请求,并把结果送到主服务器进行合并处理,最后将结果返回给用户。

随着互联网上内容的增加,尤其是互联网2.0时代,用户产生的内容越来越多,即使是Google这样的服务器数量近乎无限的公司,也感到了数据增加的压力。因此,根据需要网页的重要性、质量和访问的频率建立常用和非常用等不同级别的索引。常用的索引需要访问速度快,附加的信息多,更新也要快;而非常用的要求就低多了。但是不论搜索引擎的索引在工程上如何复杂,原理上依然非常简单,即等价于布尔运算。

(3)小结

布尔代数非常简单,但是它对数学和计算机的发展意义重大,它不仅把逻辑和数学合二为一,而且还给了我们一个全新的视角来看待世界,开创了今天的数字化时代。在此,让我们用伟大的科学家牛顿的一句话来结束这一章:“(人们)发觉真理在形式上从来是简单的,而不是复杂和含混的。”(Truth is ever to be found in simplicity,and not in the multiplicity and confusion of things.)

法国数学家庞加莱说:“数学家非常重视他们的方法和理论是否优美,这并非华而不实的做作。那么到底是什么使我们感到一个解答、一个证明优美呢?那就是各部分之间的和谐、对称,恰到好处的平衡……”

【思考题】

数学美之我见。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈