数学之美系列五 -- 简单之美:布尔代数和搜索引擎的索引
?數(shù)學(xué)之美系列五 -- 簡(jiǎn)單之美:布爾代數(shù)和搜索引擎的索引
[建立一個(gè)搜索引擎大致需要做這樣幾件事:自動(dòng)下載盡可能多的網(wǎng)頁(yè);建立快速有效的索引;根據(jù)相關(guān)性對(duì)網(wǎng)頁(yè)進(jìn)行公平準(zhǔn)確的排序。我們?cè)诮榻B Google Page Rank (網(wǎng)頁(yè)排名) 時(shí)已經(jīng)談到了一些排序的問(wèn)題,這里我們談?wù)勊饕龁?wèn)題,以后我們還會(huì)談如何度量網(wǎng)頁(yè)的相關(guān)性,和進(jìn)行網(wǎng)頁(yè)自動(dòng)下載。]
世界上不可能有比二進(jìn)制更簡(jiǎn)單的計(jì)數(shù)方法了,也不可能有比布爾運(yùn)算更簡(jiǎn)單的運(yùn)算了。盡管今天每個(gè)搜索引擎都宣稱自己如何聰明、多么智能化,其實(shí)從根本上講都沒(méi)有逃出布爾運(yùn)算的框框。
布爾(George Boole) 是十九世紀(jì)英國(guó)一位小學(xué)數(shù)學(xué)老師。他生前沒(méi)有人認(rèn)為他是數(shù)學(xué)家。布爾在工作之余,喜歡閱讀數(shù)學(xué)論著、思考數(shù)學(xué)問(wèn)題。1854 年“思維規(guī)律”(An Investigation of the Laws of Thought, on which are founded the Mathematical Theories of Logic and Probabilities)一書(shū),第一次向人們展示了如何用數(shù)學(xué)的方法解決邏輯問(wèn)題。
布爾代數(shù)簡(jiǎn)單得不能再簡(jiǎn)單了。運(yùn)算的元素只有兩個(gè)1 (TRUE, 真) 和 0(FALSE,假)?;镜倪\(yùn)算只有“與”(AND)、“或” (OR) 和“非”(NOT) 三種(后來(lái)發(fā)現(xiàn),這三種運(yùn)算都可以轉(zhuǎn)換成“與”“非” AND-NOT一種運(yùn)算)。全部運(yùn)算只用下列幾張真值表就能完全地描述清楚。
AND | 1 0
-----------------------
1 | 1 0
0 | 0 0
這張表說(shuō)明如果 AND 運(yùn)算的兩個(gè)元素有一個(gè)是 0,則運(yùn)算結(jié)果總是 0。如果兩個(gè)元素都是 1,運(yùn)算結(jié)果是 1。例如,“太陽(yáng)從西邊升起”這個(gè)判斷是假的(0),“水可以流動(dòng)”這個(gè)判斷是真的(1),那么,“太陽(yáng)從西邊升起并且水可以流動(dòng)”就是假的(0)。
OR | 1 0
-----------------------
1 | 1 1
0 | 1 0
這張表說(shuō)明如果OR運(yùn)算的兩個(gè)元素有一個(gè)是 1,則運(yùn)算結(jié)果總是 1。如果兩個(gè)元素都是 0,運(yùn)算結(jié)果是 0。比如說(shuō),“張三是比賽第一名”這個(gè)結(jié)論是假的(0),“李四是比賽第一名”是真的(1),那么“張三或者李四是第一名”就是真的(1)。
NOT |
--------------
1 | 0
0 | 1
這張表說(shuō)明 NOT 運(yùn)算把 1 變成 0,把 0 變成 1。比如,如果“象牙是白的”是真的(1),那么“象牙不是白的”必定是假的(0)。
讀者也許會(huì)問(wèn)這么簡(jiǎn)單的理論能解決什么實(shí)際問(wèn)題。布爾同時(shí)代的數(shù)學(xué)家們也有同樣的問(wèn)題。事實(shí)上在布爾代數(shù)提出后80 多年里,它確實(shí)沒(méi)有什么像樣的應(yīng)用,直到 1938 年香農(nóng)在他的碩士論文中指出用布爾代數(shù)來(lái)實(shí)現(xiàn)開(kāi)關(guān)電路,才使得布爾代數(shù)成為數(shù)字電路的基礎(chǔ)。所有的數(shù)學(xué)和邏輯運(yùn)算,加、減、乘、除、乘方、開(kāi)方等等,全部能轉(zhuǎn)換成二值的布爾運(yùn)算。
現(xiàn)在我們看看文獻(xiàn)檢索和布爾運(yùn)算的關(guān)系。對(duì)于一個(gè)用戶輸入的關(guān)鍵詞,搜索引擎要判斷每篇文獻(xiàn)是否含有這個(gè)關(guān)鍵詞,如果一篇文獻(xiàn)含有它,我們相應(yīng)地給這篇文獻(xiàn)一個(gè)邏輯值 -- 真(TRUE,或 1),否則,給一個(gè)邏輯值 -- 假(FALSE, 或0)。比如我們要找有關(guān)原子能應(yīng)用的文獻(xiàn),但并不想知道如何造原子彈。我們可以這樣寫(xiě)一個(gè)查詢語(yǔ)句“原子能 AND 應(yīng)用 AND (NOT 原子彈)”,表示符合要求的文獻(xiàn)必須同時(shí)滿足三個(gè)條件:
- 包含原子能
- 包含應(yīng)用
- 不包含原子彈
一篇文獻(xiàn)對(duì)于上面每一個(gè)條件,都有一個(gè)True 或者False 的答案,根據(jù)上述真值表就能算出每篇文獻(xiàn)是否是要找的。
早期的文獻(xiàn)檢索查詢系統(tǒng)大多基于數(shù)據(jù)庫(kù),嚴(yán)格要求查詢語(yǔ)句符合布爾運(yùn)算。今天的搜索引擎相比之下要聰明的多,它自動(dòng)把用戶的查詢語(yǔ)句轉(zhuǎn)換成布爾運(yùn)算的算式。當(dāng)然在查詢時(shí),不能將每篇文獻(xiàn)掃描一遍,來(lái)看看它是否滿足上面三個(gè)條件,因此需要建立一個(gè)索引。
最簡(jiǎn)單索引的結(jié)構(gòu)是用一個(gè)很長(zhǎng)的二進(jìn)制數(shù)表示一個(gè)關(guān)鍵字是否出現(xiàn)在每篇文獻(xiàn)中。有多少篇文獻(xiàn),就有多少位數(shù),每一位對(duì)應(yīng)一篇文獻(xiàn),1 代表相應(yīng)的文獻(xiàn)有這個(gè)關(guān)鍵字,0 代表沒(méi)有。比如關(guān)鍵字“原子能”對(duì)應(yīng)的二進(jìn)制數(shù)是0100100001100001...,表示第二、第五、第九、第十、第十六篇文獻(xiàn)包含著個(gè)關(guān)鍵字。注意,這個(gè)二進(jìn)制數(shù)非常之長(zhǎng)。同樣,我們假定“應(yīng)用”對(duì)應(yīng)的二進(jìn)制數(shù)是 0010100110000001...。那么要找到同時(shí)包含“原子能”和“應(yīng)用”的文獻(xiàn)時(shí),只要將這兩個(gè)二進(jìn)制數(shù)進(jìn)行布爾運(yùn)算 AND。根據(jù)上面的真值表,我們知道運(yùn)算結(jié)果是0000100000000001...。表示第五篇,第十六篇文獻(xiàn)滿足要求。
注意,計(jì)算機(jī)作布爾運(yùn)算是非常非常快的?,F(xiàn)在最便宜的微機(jī)都可以一次進(jìn)行三十二位布爾運(yùn)算,一秒鐘進(jìn)行十億次以上。當(dāng)然,由于這些二進(jìn)制數(shù)中絕大部分位數(shù)都是零,我們只需要記錄那些等于1的位數(shù)即可。于是,搜索引擎的索引就變成了一張大表:表的每一行對(duì)應(yīng)一個(gè)關(guān)鍵詞,而每一個(gè)關(guān)鍵詞后面跟著一組數(shù)字,是包含該關(guān)鍵詞的文獻(xiàn)序號(hào)。
對(duì)于互聯(lián)網(wǎng)的搜索引擎來(lái)講,每一個(gè)網(wǎng)頁(yè)就是一個(gè)文獻(xiàn)?;ヂ?lián)網(wǎng)的網(wǎng)頁(yè)數(shù)量是巨大的,網(wǎng)絡(luò)中所用的詞也非常非常多。因此這個(gè)索引是巨大的,在萬(wàn)億字節(jié)這個(gè)量級(jí)。早期的搜索引擎(比如 Alta Vista 以前的所有搜索引擎),由于受計(jì)算機(jī)速度和容量的限制,只能對(duì)重要的關(guān)鍵的主題詞建立索引。至今很多學(xué)術(shù)雜志還要求作者提供 3-5 個(gè)關(guān)鍵詞。這樣所有不常見(jiàn)的詞和太常見(jiàn)的虛詞就找不到了?,F(xiàn)在,為了保證對(duì)任何搜索都能提供相關(guān)的網(wǎng)頁(yè),所有的搜索引擎都是對(duì)所有的詞進(jìn)行索引。為了網(wǎng)頁(yè)排名方便,索引中還需存有大量附加信息,諸如每個(gè)詞出現(xiàn)的位置、次數(shù)等等。因此,整個(gè)索引就變得非常之大,以至于不可能用一臺(tái)計(jì)算機(jī)存下。大家普遍的做法就是根據(jù)網(wǎng)頁(yè)的序號(hào)將索引分成很多份(Shards),分別存儲(chǔ)在不同的服務(wù)器中。每當(dāng)接受一個(gè)查詢時(shí),這個(gè)查詢就被分送到許許多多服務(wù)器中,這些服務(wù)器同時(shí)并行處理用戶請(qǐng)求,并把結(jié)果送到主服務(wù)器進(jìn)行合并處理,最后將結(jié)果返回給用戶。
不管索引如何復(fù)雜,查找的基本操作仍然是布爾運(yùn)算。布爾運(yùn)算把邏輯和數(shù)學(xué)聯(lián)系起來(lái)了。它的最大好處是容易實(shí)現(xiàn),速度快,這對(duì)于海量的信息查找是至關(guān)重要的。它的不足是只能給出是與否的判斷,而不能給出量化的度量。因此,所有搜索引擎在內(nèi)部檢索完畢后,都要對(duì)符合要求的網(wǎng)頁(yè)根據(jù)相關(guān)性排序,然后才返回給用戶。
?
總結(jié)
以上是生活随笔為你收集整理的数学之美系列五 -- 简单之美:布尔代数和搜索引擎的索引的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数学之美系列 4 -- 怎样度量信息?
- 下一篇: 数学之美系列六 -- 图论和网络爬虫 (