圖解|通用搜索引擎背后的技術(shù)點(diǎn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1. 寫在前面
今天準(zhǔn)備和盆友們一起學(xué)習(xí)下關(guān)于通用搜索引擎的一些技術(shù)點(diǎn)。
鑒于搜索引擎內(nèi)容非常多,每一部分都夠?qū)懞脦灼恼碌乃员疚闹皇菕伌u引玉,深入挖掘還得老鐵們親力親為。
通過本文你將對通用搜索引擎的基本原理和組成有一個(gè)較為清晰的認(rèn)識,用心讀完,肯定有所收獲!
廢話不說,各位抓緊上車,沖鴨!
2. 初識搜索引擎
2.1 搜索引擎分類
搜索引擎根據(jù)其使用場景和規(guī)模,可以簡單分為兩大類:
-
通用搜索引擎
通用搜索又稱為大搜,諸如谷歌、百度、搜狗、神馬等等都屬于這一類。
-
垂直搜索引擎
垂直搜索又稱為垂搜,是特定領(lǐng)域的搜索,比如用QQ音樂搜周杰倫的歌等。
2.2 搜索和推薦
搜索和推薦經(jīng)常被相提并論,但是二者存在一些區(qū)別和聯(lián)系。
-
共同點(diǎn)
宏觀上來說,搜索和推薦都是為了解決用戶和信息之間的隔離問題,給用戶有用的/需要的/喜歡的信息。 -
區(qū)別點(diǎn)
搜索一般是用戶主動(dòng)觸發(fā),按照自己的意圖進(jìn)行檢索,推薦一般是系統(tǒng)主動(dòng)推送,讓用戶看到可能感興趣的信息。
2.3 搜索引擎評價(jià)標(biāo)準(zhǔn)
我們每天都和搜索引擎打交道,評價(jià)一個(gè)搜索引擎的好壞可簡單概括為:精準(zhǔn)性、時(shí)效性、響應(yīng)速度、權(quán)威性等。
換句話說,搜索引擎懂得用戶真正想要找什么,可以快速準(zhǔn)確地展示出來,對于一些熱點(diǎn)突發(fā)信息也可以及時(shí)收錄展示,就能很好地博得用戶。
這個(gè)目標(biāo)需要搜索引擎多個(gè)模塊協(xié)作處理,是個(gè)復(fù)雜的系統(tǒng)工程,并非易事。
3. 通用搜索引擎的整體概覽
3.1 搜索引擎的基本流程
大白嘗試用樸實(shí)的語言來整體表達(dá)下,通用搜索引擎大致是怎么工作的:
1. 網(wǎng)絡(luò)蜘蛛爬蟲每天不辭辛苦地收錄網(wǎng)頁,然后存儲(chǔ)起來,這樣各個(gè)站點(diǎn)的頁面就有了一份份鏡像,這個(gè)規(guī)模是百億/千億級的。
2. 單純地鏡像也不能直接用,需要加工處理,把一個(gè)個(gè)網(wǎng)頁進(jìn)行分詞,建立搜索詞和網(wǎng)頁的對應(yīng)關(guān)系,這樣用戶搜索某個(gè)東西時(shí),才會(huì)拿到很多相關(guān)的網(wǎng)頁。
3. 比如"搜索隱秘的角落"可能會(huì)有100個(gè)相關(guān)網(wǎng)頁被找到,但是網(wǎng)頁和檢索詞的關(guān)聯(lián)性肯定有強(qiáng)有弱,因此還需要進(jìn)行網(wǎng)頁的排序,排序策略有很多,最終把優(yōu)質(zhì)的網(wǎng)頁排在前面展示給用戶。
用戶看到相關(guān)結(jié)果之后,進(jìn)行點(diǎn)擊或者跳過,搜索引擎根據(jù)用戶的相關(guān)動(dòng)作進(jìn)行調(diào)整,實(shí)現(xiàn)整個(gè)閉環(huán)過程。
4. 為了能更好地理解用戶的真實(shí)用途,需要進(jìn)行檢索詞的意圖理解、詞條切分、同義詞替換、語法糾錯(cuò)等處理,再根據(jù)這些檢索詞去獲取數(shù)據(jù),為用戶找到心中所想的網(wǎng)頁。
比如檢索詞為"老鷹",可能是自然界的老鷹,也可能是NBA的一只球隊(duì):
3.2 搜索引擎的基本組成
我們從整體簡單看下基本組成以及各個(gè)模塊的主要功能:
-
網(wǎng)絡(luò)爬蟲模塊
搜索引擎中的網(wǎng)絡(luò)爬蟲就是網(wǎng)頁的搬運(yùn)工,負(fù)責(zé)將互聯(lián)網(wǎng)上允許被抓取的網(wǎng)頁進(jìn)行下載,如果把搜索引擎看作一家餐廳,網(wǎng)絡(luò)爬蟲模塊就是餐廳的采購員。 -
內(nèi)容處理模塊
負(fù)責(zé)將網(wǎng)絡(luò)爬蟲下載的頁面進(jìn)行內(nèi)容解析、內(nèi)容清洗、主體抽取、建立索引、鏈接分析、反作弊等環(huán)節(jié)。 -
內(nèi)容存儲(chǔ)模塊
存儲(chǔ)模塊是搜索引擎的堅(jiān)強(qiáng)后盾,將抓取的原始網(wǎng)頁、處理后的中間結(jié)果等等進(jìn)行存儲(chǔ),這個(gè)存儲(chǔ)規(guī)模也是非常大的,可能需要幾萬臺(tái)機(jī)器。 -
用戶解析模塊
用戶模塊負(fù)責(zé)接收用戶的查詢詞、分詞、同義詞轉(zhuǎn)換、語義理解等等,去揣摩用戶的真實(shí)意圖、查詢重點(diǎn)才能返回正確的結(jié)果。 -
內(nèi)容排序模塊
結(jié)合用戶模塊解析的查詢詞和內(nèi)容索引生成用戶查詢結(jié)果,并對頁面進(jìn)行排序,是搜索引擎比較核心的部分。
接下來,我們將粗淺地介紹幾個(gè)模塊的基本內(nèi)容和技術(shù)點(diǎn)。
4. 網(wǎng)絡(luò)爬蟲模塊簡介
網(wǎng)絡(luò)爬蟲模塊是通用搜索引擎非常的基礎(chǔ)組件,一般都會(huì)采用分布式爬蟲來實(shí)現(xiàn),我們來看看這個(gè)搬運(yùn)工是如何實(shí)現(xiàn)海量網(wǎng)頁發(fā)掘的:
網(wǎng)絡(luò)爬蟲的基本流程:
-
將熱門站點(diǎn)的優(yōu)質(zhì)URL作為種子,放到待抓取的URL隊(duì)列中 -
讀取待抓取URL獲取地址進(jìn)行下載 -
將下載的網(wǎng)頁內(nèi)容進(jìn)行解析,將網(wǎng)頁存儲(chǔ)到hbase/hdfs等,并提取網(wǎng)頁中存在的其他URL -
發(fā)掘到新的URL進(jìn)行去重,如果是未抓取的則放到抓取隊(duì)列中 -
直到待抓取URL隊(duì)列為空,完成本輪抓取
在抓取過程中會(huì)有多種遍歷策略:深度優(yōu)先遍歷DFS、廣度優(yōu)先遍歷BFS、部分PageRank策略、OPIC在線頁面重要性計(jì)算策略、大站優(yōu)先策略等。
在工程實(shí)踐中需要根據(jù)自身情況和搜索引擎特點(diǎn)進(jìn)行選擇某種策略或者多種策略組合。
網(wǎng)絡(luò)爬蟲需要遵循Robots協(xié)議(網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)),這是網(wǎng)絡(luò)爬蟲和站點(diǎn)之間的君子協(xié)定,站點(diǎn)通過協(xié)議告訴網(wǎng)絡(luò)爬蟲哪些可以抓哪些不可以。
網(wǎng)絡(luò)爬蟲同時(shí)需要考慮抓取頻率,防止給站點(diǎn)造成過重負(fù)擔(dān),總之,搜索引擎的網(wǎng)絡(luò)爬蟲需要是個(gè)謙謙君子。
5. 網(wǎng)頁內(nèi)容處理模塊
爬蟲模塊將網(wǎng)頁內(nèi)容存儲(chǔ)之后,網(wǎng)頁內(nèi)存處理模塊開始解析網(wǎng)頁內(nèi)容,主要工作包括:數(shù)據(jù)清洗、網(wǎng)頁內(nèi)容分詞、建立正排索引、建立倒排索引等。
5.1 數(shù)據(jù)清洗
一般來說,網(wǎng)頁中除了具體內(nèi)容還會(huì)有很多無關(guān)的東西,比如html標(biāo)簽、推廣等,這些在實(shí)際搜索引擎中都是無用的。
內(nèi)容處理模塊會(huì)將無用數(shù)據(jù)、標(biāo)簽清洗掉,為后續(xù)的分詞做準(zhǔn)備。
5.2 中文分詞
將清洗完成的內(nèi)容進(jìn)行分詞提取關(guān)鍵詞,比如一個(gè)網(wǎng)頁內(nèi)容有1000字,分詞之后大約有50個(gè)詞,相當(dāng)于提取了網(wǎng)頁的主干,并且會(huì)對標(biāo)題、摘要、正文等不同部分的內(nèi)容做不同權(quán)重處理。
分詞過程中會(huì)剔除停用詞、虛詞等,比如"的、得、地"等,從而極力還原網(wǎng)頁的主干內(nèi)容。
我們用在線網(wǎng)頁分詞工具和真實(shí)網(wǎng)頁來模擬下這個(gè)過程:
網(wǎng)頁分詞在線工具:http://www.78901.net/fenci/
抓取網(wǎng)頁:https://tech.huanqiu.com/article/3zMq4KbdTAA
可以看到分詞后可以標(biāo)注詞頻,這些都是后續(xù)作為網(wǎng)頁排序的重要來源,但是中文是很復(fù)雜的,因此分詞算法會(huì)有很多種,常見的包括:
-
基于字符串匹配的分詞算法 -
基于概率統(tǒng)計(jì)的分詞算法 -
基于語義規(guī)則的分詞算法 -
其他算法
5.3 正排索引
假定我們將每個(gè)網(wǎng)頁進(jìn)行唯一編號docid,經(jīng)過前面的分詞一個(gè)網(wǎng)頁將被分成不同權(quán)重的多個(gè)實(shí)體詞。
所謂正排就是根據(jù)docid可以拿到屬于該網(wǎng)頁的所有內(nèi)容,是一個(gè)符合我們思維的正向過程,相對而言會(huì)有倒排索引。
我們以一篇《隱秘的角落》劇情簡介的頁面為例,模擬分詞情況,大致如下(本分詞結(jié)果純屬腦補(bǔ),以實(shí)際為準(zhǔn)):
5.4 倒排索引
假如我們對10000個(gè)網(wǎng)頁進(jìn)行了分詞,其中包含了一些公共檢索詞:微山湖、智取威虎山、三十而立、隱秘的角落等,因此我們匯總之后將建立檢索詞->網(wǎng)頁的映射關(guān)系。
那么對于檢索詞"隱秘的角落"出現(xiàn)很多個(gè)網(wǎng)頁,倒排索引就相當(dāng)于從一個(gè)詞能拉取到多少文章的過程。
就如同我們提到美食就想到:火鍋、燒烤、烤鴨、炒菜等等,是一個(gè)從點(diǎn)到面的過程,這種逆向過程在搜索引擎中非常重要。
5.5 本章小結(jié)
內(nèi)容處理模塊將抓取到的網(wǎng)頁進(jìn)行清洗、提前新URL給爬蟲模塊、內(nèi)容分詞、建立正排索引和倒排索引,是個(gè)承上啟下的中間環(huán)節(jié)。
特別地,提一下正排索引和倒排索引,字面上并不直觀,其實(shí)道理并不難理解:
正排索引:具體到一篇網(wǎng)頁有多少關(guān)鍵詞,特指屬于該網(wǎng)頁本身的內(nèi)容集合,是一個(gè)網(wǎng)頁。
倒排索引:一個(gè)檢索關(guān)鍵詞對應(yīng)多少相關(guān)聯(lián)的網(wǎng)頁,也就是可備選網(wǎng)頁集合,是一類網(wǎng)頁。
6. 網(wǎng)頁排序和用戶模塊
6.1 網(wǎng)頁排序的必要性
由于存儲(chǔ)的網(wǎng)頁是百千億級的,那么一個(gè)檢索詞可能對于幾萬、幾十萬甚至更多相關(guān)的網(wǎng)頁。
網(wǎng)頁排序需要綜合考慮:相關(guān)性、權(quán)威性、時(shí)效性、豐富度等多個(gè)方面。
搜索引擎要展示優(yōu)質(zhì)的強(qiáng)關(guān)聯(lián)網(wǎng)頁給用戶,并且放在靠前的位置,否則搜索效果將會(huì)很差,用戶并不買賬。
事實(shí)上也是如此,比如搜索引擎返回了10頁結(jié)果,每頁10條,總結(jié)100條,一般用戶點(diǎn)擊到1-3頁之后的網(wǎng)頁大概率就不再點(diǎn)擊了,因此排序的頭部內(nèi)容對于搜索結(jié)果至關(guān)重要。
我們?nèi)匀灰詸z索"隱秘的角落"為例,百度共計(jì)返回了10頁,其中1-2頁的內(nèi)容是強(qiáng)關(guān)聯(lián)的,是個(gè)比較不錯(cuò)的檢索結(jié)果了:
6.2 網(wǎng)頁排序的常見策略
網(wǎng)頁排序策略是個(gè)不斷優(yōu)化和提升的演進(jìn)過程,我們來一起看下都有哪些排序策略:
-
基于詞頻和位置權(quán)重的排序
這是早期搜索引擎常采取的方法,相對簡單但是效果還不錯(cuò)。
簡單來說就是根據(jù)網(wǎng)頁中關(guān)鍵詞的出現(xiàn)頻率以及出現(xiàn)位置作為排序依據(jù),因?yàn)槠毡檎J(rèn)為:檢索詞出現(xiàn)次數(shù)越多、位置越重要,網(wǎng)頁的關(guān)聯(lián)性越好,排名越靠前。
詞頻并不是單純的統(tǒng)計(jì)次數(shù),需要有全局觀念來判斷關(guān)鍵詞的相對次數(shù),這就是我們要說的TF-IDF逆文檔頻率,來看下百度百科的解釋:
TF-IDF (term frequency–inverse document frequency)是一種用于信息檢索與數(shù)據(jù)挖掘的常用加權(quán)技術(shù)。
TF是詞頻(Term Frequency),IDF是逆文本頻率指數(shù)(Inverse Document Frequency)。
TF-IDF是一種統(tǒng)計(jì)方法,用以評估一字詞對于一個(gè)文件集或一個(gè)語料庫中的其中一份文件的重要程度。
字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時(shí)會(huì)隨著它在語料庫中出現(xiàn)的頻率成反比下降。
舉個(gè)栗子:
網(wǎng)頁中"吃飯"這個(gè)詞出現(xiàn)了10次,雖然次數(shù)很多,但是"吃飯"這個(gè)詞過于普通,因?yàn)樵诤芏嗥渌W(wǎng)頁都出現(xiàn)了,因此"吃飯"這個(gè)檢索詞的重要性就相對下降了。
-
基于鏈接分析的排序
鏈接分析排序認(rèn)為:網(wǎng)頁被別的網(wǎng)頁引用的次數(shù)越多或者越權(quán)威的網(wǎng)頁引用,說明該網(wǎng)頁質(zhì)量越高。
基于鏈接分析的排序算法有很多種,其中最有名的PageRank算法被谷歌廣泛采用,是其核心排序算法。
來看下PageRank算法的基本思想:
網(wǎng)頁的重要程度用PageRank值來衡量,網(wǎng)頁的PageRank值體現(xiàn)在兩個(gè)方面:引用該網(wǎng)頁其他網(wǎng)頁個(gè)數(shù)和引用該頁面的其他頁面的重要程度。
假定一個(gè)網(wǎng)頁A被另一個(gè)網(wǎng)頁B引用,網(wǎng)頁B就將PageRank值分配給網(wǎng)頁B所引用的網(wǎng)頁,所以越多引用網(wǎng)頁A則其PageRank值也就越高。
另外網(wǎng)頁B越重要,它所引用的頁面能分配到的PageRank值就越多,網(wǎng)頁A的PageRank值也就越高越重要。
其實(shí)這個(gè)算法說起來非常簡單:比如寫公眾號,有大V轉(zhuǎn)載就相當(dāng)于引用了,越多其他公眾號轉(zhuǎn)載,說明你的公眾號內(nèi)容質(zhì)量越高。
PageRank算法也存在一定的問題,比如對新頁面不友好,新頁面暫時(shí)沒有被大量引用,因此PageRank值很低,并且PageRank算法強(qiáng)調(diào)網(wǎng)頁之間的引用關(guān)系,對網(wǎng)頁本身的主題內(nèi)容可能重視程度不夠,也就是所謂的主題漂流問題。
與PageRank算法類似于的還有一些其他算法來彌補(bǔ)主題關(guān)聯(lián)問題,包括:HillTop算法、Topic-Sensitive PageRank算法、HITS算法等,本文就不再展開了。
6.3 網(wǎng)頁反作弊和SEO
搜索引擎也存在二八原則,頭部的網(wǎng)頁占據(jù)了大量的點(diǎn)擊流量,也意味著巨大的商業(yè)價(jià)值。
這里就要提到SEO,先看下百度百科對SEO的定義:
搜索引擎優(yōu)化又稱為SEO,即Search Engine Optimization,它是一種通過分析搜索引擎的排名規(guī)律,了解各種搜索引擎怎樣進(jìn)行搜索、怎樣抓取互聯(lián)網(wǎng)頁面、怎樣確定特定關(guān)鍵詞的搜索結(jié)果排名的技術(shù)。
搜索引擎采用易于被搜索引用的手段,對網(wǎng)站進(jìn)行有針對性的優(yōu)化,提高網(wǎng)站在搜索引擎中的自然排名,吸引更多的用戶訪問網(wǎng)站,提高網(wǎng)站的訪問量,提高網(wǎng)站的銷售能力和宣傳能力,從而提升網(wǎng)站的品牌效應(yīng)。
道高一尺魔高一丈,只有魔法可以打敗魔法。
網(wǎng)頁反作弊是搜索引擎需要解決的重要問題,常見的有內(nèi)容反作弊、鏈接分析反作弊等。
-
網(wǎng)頁內(nèi)容作弊
比如在網(wǎng)頁內(nèi)容中增加大量重復(fù)熱詞、在標(biāo)題/摘要等重要位置增加熱度詞、html標(biāo)簽作弊等等,比如在一篇主題無聯(lián)系的網(wǎng)頁中增加大量"隱秘的角落"熱度詞、增加<strong> 等強(qiáng)調(diào)性html標(biāo)簽。 -
鏈接分析作弊
構(gòu)建大量相互引用的頁面集合、購買高排名友鏈等等,就是搞很多可以指向自己網(wǎng)頁的其他網(wǎng)頁,從而構(gòu)成一個(gè)作弊引用鏈條。
6.4 用戶搜索意圖理解
用戶模塊直接和用戶交互,接收用戶的搜索詞,準(zhǔn)確理解用戶的搜索意圖非常重要。
實(shí)際上用戶的輸入是五花八門的,偏口語化,甚至有拼寫錯(cuò)誤、并且不同背景的用戶對同一個(gè)檢索詞的需求不一樣、無爭議檢索詞的使用目的也不一樣。
-
檢索詞為:美食宮保雞丁
這個(gè)檢索詞算是比較優(yōu)質(zhì)了,但是仍然不明確是想找飯店去吃宮保雞???還是想找宮保雞丁的菜譜?還是想查宮保雞丁的歷史起源?還是宮保雞丁的相關(guān)評價(jià)?所以會(huì)出現(xiàn)很多情況。 -
檢索詞為:你說我中午遲點(diǎn)啥呢?
口語化檢索詞并且存在錯(cuò)別字,其中可能涉及詞語糾錯(cuò)、同義詞轉(zhuǎn)換等等,才能找到準(zhǔn)確的檢索詞,進(jìn)而明確檢索意圖,召回網(wǎng)頁。
7. 全文總結(jié)
搜索引擎是個(gè)非常復(fù)雜的系統(tǒng)工程,涉及非常多的算法和工程實(shí)現(xiàn),本文旨在和大家一起簡單梳理搜索引擎的基本組成和運(yùn)行原理,算是科普文章了。
搜索引擎中每一個(gè)模塊做好都不容易,也是互聯(lián)網(wǎng)產(chǎn)品中技術(shù)含金量的典型代表,深挖一個(gè)模塊都受益匪淺。
有問題需要交流的盆友可以掃碼添加大白微信:
水平有限,暫時(shí)就寫這么多吧!最后依然是感謝各位盆友的傾情閱讀。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請聯(lián)系我們,謝謝!