搜索引擎基本原理

摘要:最近讀了《這就是搜索引擎:核心技術詳解》一書,簡要做個記錄。算法

__________________________________________________數據庫

目錄緩存

【1】搜索引擎概述服務器

【2】搜索引擎的基礎技術網絡

【3】搜索引擎的平臺基礎架構

【4】搜索結果的改善優化框架

__________________________________________________機器學習

【1】搜索引擎概述

過去的15年間,互聯網信息急劇膨脹,靠人工的方式去篩選獲取有用信息再也不可能,所以搜索引擎應運而生。根據其發展,能夠將其劃爲四個時代。分佈式

  • 分類目錄。yahoo是這個時期的表明,採用純人工方式收集,質量較高,但效率低。
  • 文本檢索。採用了經典的信息檢索模型,主要查詢用戶關鍵詞語網頁內容類似度,收錄容量增長,但質量不是很好。如,早期的AltaVista.
  • 連接分析。典型:Google的PageRank,極大擴充了網頁內容,質量有提升,隨之而來各類做弊方法。
  • 用戶爲中心?如今的大部分搜索引擎對相同查詢返回相同的結果,可是不一樣用戶可能關注不同,將來也許更多考慮用戶的差別性。

說到發展,不得不提搜索引擎的三個主要目標,不管它往何方發展,如下三個目標老是一個很好的評估標準:性能

  • 更全:如何把更多相關的網頁收錄?
  • 更快:如何從數以億計的網頁中迅速返回結果?
  • 更準:如何把用戶最感興趣的結果呈現?

搜索引擎工做原理總結

【2】搜索引擎的基礎技術

這一部分主要從如下四個部分來說述搜索引擎的基礎技術,這四個部分也是搜索引擎的重要環節。

  • 網絡爬蟲
  • 創建索引
  • 內容檢索
  • 連接分析

2.1 網絡爬蟲 

網絡爬蟲是搜索引擎的下載系統,它的做用是內容的獲取,手段就是在萬維網中經過連接不斷爬取收集各種網頁。可是互聯網的頁面浩如煙海,並且天天不斷有新的內容產生,根據爬取目標和範圍,能夠將爬蟲簡單分爲如下幾類: 

  • 批量性爬蟲:明確的抓取目標和範圍,達到即中止
  • 增量型爬蟲:應對網頁不斷更新的狀態,爬蟲須要及時反應。通用商業引擎通常都是這類
  • 垂直型爬蟲:只針對某個特定領域的爬蟲,根據主題過濾。

爬蟲在爬取網頁的時候,應該怎樣肯定下一步的目標呢?主要有如下策略:

  • 寬度優先:最簡單的方式,即將某個頁面中的連接依次加入待爬取隊列
  • 局部PageRank:PageRank是一種網頁重要性指標,這種方式根據必定時期內的局部PageRank值決定下一步爬取目標
  • OPIC:當下載當前網頁後,將其重要性平均分給包含的連接,每次選取最重要的頁面,不用迭代計算,速度較快
  • 大站優先:思想很簡單,以網站爲單位衡量頁面重要性。

接下來,簡要介紹一下搜索引擎中的一個重要問題:暗網抓取。所謂暗網,是指常規方式很難爬到的網頁,而在網絡中,這樣的網是大量存在的。有的網頁沒有外鏈,有的主要內容存儲於數據庫中(如攜程網),沒有連接指向這些記錄。暗網挖掘是商業搜索引擎的一大研究重點,Google是這樣,百度的「阿拉丁」計劃也在於此。

 2.2 創建索引

對於搜索引擎,索更是其中最重要的核心技術之一,面對海量的網頁內容,如何快速找到包含用戶查詢詞的全部網頁?倒排索引在其中扮演了關鍵的角色。

對於一個網頁,咱們把它看作一個文檔,其中的內容由一個個單詞組成。爲了對於用戶的搜索詞快速給出文檔結果,咱們要創建一個單詞-文檔的存儲結構。倒排索引是實現單詞—文檔矩陣的一種具體存儲形式。經過倒排索引,能夠根據單詞快速獲取包含這個單詞的文檔列表。倒排索引主要由兩個部分組成:單詞詞典和倒排文件。 

單詞詞典主要是兩種存儲方式:哈希加連接和樹形結構。

索引創建方法:

(1)兩遍文檔遍歷

  在第一遍掃描文檔集合時,該方法並無當即開始創建索引,而是收集一些全局的統計信息。好比文檔集合包含的文檔個數N,文檔集合內所包含的不一樣單詞個數M,每一個單詞在多少個文檔中出現過的信息DF。在得到了上述3 類信息後,就能夠知道最終索引的大小,因而在內存中分配足夠大的空間,用來存儲倒排索引內容。在第二遍掃描的時候,開始真正創建每一個單詞的倒排列表信息,即對某個單詞來講,得到包含這個單詞的每一個文檔的文檔ID,以及這個單詞在文檔中的出現次數TF

(2)排序法

  排序法對此作出了改進,該方法在創建索引的過程當中,始終在內存中分配固定大小的空間,用來存放詞典信息和索引的中間結果,當分配的空間被消耗光的時候,把中間結果寫入磁盤,清空內存裏中間結果所佔空間,以用作下一輪存放索引中間結果的存儲區。這種方法因爲只須要固定大小的內存,因此能夠對任意大小的文檔集合創建索引。

(3)歸併法

  在分配的內存定額被消耗光時,排序法只是將中間結果寫入磁盤,而詞典信息一直在內存中進行維護,隨着處理的文檔愈來愈多,詞典裏包含的詞典項愈來愈多,因此佔用內存愈來愈大,致使後期中間結果可用內存愈來愈少。歸併法對此作出了改進,即每次將內存中數據寫入磁盤時,包括詞典在內的全部中間結果信息都被寫入磁盤,這樣內存全部內容均可以被清空,後續創建索引可使用所有的定額內存。

索引更新策略:

  • 徹底重建
  • 再合併策略
  • 原地更新策略
  • 混合策略

2.3 內容檢索

內容檢索模型是搜索引擎排序的理論基礎,用來計算網頁與查詢的相關性。

經常使用的檢索模型

  • 布爾模型
  • 向量空間模型
  • 機率模型
  • 語言模型
  • 機器學習排序

檢索系統評價指標

  • 精確率:搜索結果中相關文檔的比例 A/(A+B)
  • 召回率:結果中相關文檔佔全部相關文檔的比例 A/(A+C)
  • P@10 : 前10個結果中相關查詢的數目
  • MAP指標 :對返回結果按次序加權,權值爲排名的倒數
  查詢相關 查詢無關
在搜索結果內 A B
不在搜索結果 C D

 

2.4 連接分析

搜索引擎在查找可以知足用戶請求的網頁時,主要考慮兩方面的因素:一方面是用戶發出的查詢與網頁內容的內容類似性得分,即網頁和查詢的相關性;另外一方面就是經過連接分析方法計算得到的得分,即網頁的重要性。連接分析就是經過網絡的連接結構去獲取網頁重要性的一類方法。

連接分析算法不少,從模型上看,主要分爲兩類:

  • 隨機遊走:從某個網頁以必定的機率跳轉到它所包含的連接
  • 子集傳播:給予某個子集必定的傳播,按照特定的條件,將權值傳給其餘網頁

經常使用算法:

  • PageRank
  • HITS
  • SALSA
  • 主題敏感PageRank
  • Hilltop

【3】搜索引擎的平臺基礎

這一部分主要是講搜索引擎的平臺支持,主要是雲存儲和雲計算模型。

對於商業搜索引擎,須要保存大量的數據,而且須要對這些大規模的海量數據進行處理。雲存儲和雲計算就是爲了這個問題提出的解決方案。

大量的數據不可能存在一臺服務器上,它必然是分佈式存儲的。當數據更新時,這就會產生多個服務器上數據不一致的狀況,以及如何選擇服務器的問題。

咱們首先先介紹一些基本原則

(1)CAP原則

CAP是Consistency,Availability,Partition Tolerance的簡稱,即一致性,可用性和分區容忍性。

對於一個數據系統,三個原則不能兼得。雲存儲每每關注CA,犧牲部分一致性。

(2)ACID原則

這是關係數據庫採起的原則。它是Atomicity,Consistency,Isolation,Durability的縮寫,即原子性,一致性,事務獨立,持久性。

(3)BASE原則

大多雲存儲系統採用,它和ACID不一樣,犧牲了強數據一致性換取高可用性。由於用戶可能對數據的變化沒有能不能提供服務敏感。

它的三個方面是:

  • 基本可用: Basically Available
  • 柔性狀態: Soft State,不要求隨時同步
  • 最終一致性: 即若數據一致性,只要在必定時間段內達到一致便可

Google的雲存儲和雲計算架構

雲存儲:

  • GFS文件系統:由主服務器(Master),Chunk服務器和GFS客戶端構成
  • Chubby鎖服務:針對分佈式系統粗粒度的鎖服務
  • BigTable:針對海量數據的結構或半結構的存儲模型,本質是三維映射表,由行主鍵,列主鍵以及時間構成
  • MegaStore:適合於實時交互,而GFS和BigTable適合後臺處理

雲計算

  • MapReduce
  • Percolator :增量模式,做爲對MapReduce的補充
  • Pregel:大規模圖計算模型

其它雲存儲系統

  • Dynamo : Amazon
  • PNUTS : Yahoo!
  • HayStack : Facebook

【4】搜索結果的改善優化

前面講過,搜索引擎追求的三個目標就是更快,更全,更準。可是要達到這些目標並非一件很輕鬆的工做,須要不少環節的處理。這一部分主要從如下一個方面來說講,怎樣提升搜索引擎的搜索結果,改善搜索質量,提高搜索性能。

4.1 做弊分析

做弊方法

  • 內容做弊:設置無關關鍵字,內容農場 (大量低質量內容)
  • 連接做弊:連接農場,互相連接...
  • 頁面隱藏做弊:欺騙爬蟲,隱藏無關關鍵字,重定向。。。
  • WEB2.0做弊

反做弊總體思路

  • 信任傳播
  • 不信傳播
  • 異常發現

(1)所謂信任傳播模型,基本思路以下:在海量的網頁數據中,經過必定的技術手段或者人工半人工手段,從中篩選出部分徹底值得信任的頁面,也就是確定不會做弊的頁面(能夠理解爲白名單),算法以這些白名單內的頁面做爲出發點,賦予白名單內的頁面節點較高的信任度分值,其餘頁面是否做弊,要根據其和白名單內節點的連接關係來肯定。白名單內節點經過連接關係將信任度分值向外擴散傳播,若是某個節點最後獲得的信任度分值高於必定閾值,則認爲沒有問題,而低於這一閾值的網頁則會被認爲是做弊網頁。

(2)不信任傳播模型從框架上來說,其和信任傳播模型是類似的,最大的區別在於:初始的頁面子集合不是值得信任的頁面節點,而是確認存在做弊行爲的頁面集合,即不值得信任的頁面集合(能夠理解爲黑名單)。賦予黑名單內頁面節點不信任分值,經過連接關係將這種不信任關係傳播出去,若是最後頁面節點的不信任分值大於設定的閾值,則會被認爲是做弊網頁。

(3)異常發現模型也是一個高度抽象化的算法框架模型,其基本假設認爲:做弊網頁必然存在有異於正常網頁的特徵,這種特徵有多是內容方面的,也有多是連接關係方面的。而制定具體算法的流程每每是先找到一些做弊的網頁集合,分析出其異常特徵有哪些,而後利用這些異常特徵來識別做弊網頁。

  只要操縱搜索引擎搜索結果可以帶來收益,那麼做弊動機就會始終存在,尤爲是在網絡營銷起着愈來愈重要宣傳做用的時代尤爲如此。做弊與反做弊是相互抑制同時也是相互促進的一個互動過程,「道高一尺,魔高一丈」的故事不斷重演。前述內容主要是以技術手段來進行反做弊,而事實上純粹技術手段目前是沒法完全解決做弊問題的,必須將人工手段和技術手段相互結合,才能取得較好的反做弊效果。技術手段能夠分爲相對通用的手段和比較特殊的手段,相對通用的手段對於可能新出現的做弊手法有必定的預防能力,可是由於其通用性,因此針對性不強,對特殊的做弊方法效果未必好。而專用的反做弊方法每每是過後諸葛亮,即只有做弊行爲已經發生而且比較嚴重,纔可能概括做弊特徵,採起過後過濾的方法。人工手段則與技術手段有很強的互補性,能夠在新的做弊方式一出現就被人發現,能夠看作一種處於做弊進行時的預防措施。因此從時間維度考慮對做弊方法的抑制來講,通用反做弊方法重在預防,人工手段重在發現,而專用反做弊方法重在過後處理,其有內在的聯繫和互補關係存在。

4.2 分析用戶意圖

 準確分析用戶的搜索意圖是目前搜索引擎的重點研究方向。

用戶的意圖能夠初略分爲

  • 導航型
  • 信息型
  • 事物型

搜索日誌是挖掘用戶意圖的重要數據來源

  • 點擊圖:用戶在查詢結果出來後點擊的連接可能更是他但願的結果
  • 查詢回話:用戶在短期的連續查詢詞存在相關性
  • 查詢圖:構建用戶查詢之間的結構關係

用戶在搜索時可能想不到合適的搜索詞,或者關鍵詞輸入錯誤,這時候就須要幫助用戶澄清搜索意圖。

常見的方法是:

  • 相關搜索
  • 查詢糾錯

 4.3 網頁去重

通過統計,網絡中有至關比例的網頁是近似相同或者徹底相同的,高達29%。若是搜索返回大量類似網頁,顯然下降了搜索結果質量。針對這一現象,網頁去重就顯得十分必要。

網頁去重通常是在爬蟲抓取到網頁後,對其創建索引以前。去重算法應該兼顧準確性和運行效率。

典型的網頁去重算法:

  • 特徵抽取
  • 文檔指紋生成
  • 類似性計算

幾種典型的去重算法:

  • Shingling算法:將文檔中連續的單詞序列做爲特徵
  • I-Match算法:先統計一個全局的特徵詞典,而後用單文檔的特徵與其比較
  • SimHash算法:多是目前最優秀的去重算法
  • SpotSig算法

4.4 緩存機制

緩存機制能夠加快用戶相應速度,節省計算資源

緩存系統的目標是最大化緩存命中率和保持緩存與索引的一致性

緩存的對象主要是網頁搜索結果和查詢詞對應的倒排列表

緩存淘汰策略主要有動態策略和混合策略

相關文章
相關標籤/搜索