淺談搜索引擎基礎(chǔ)(下)

鏈接分析

我們?cè)谧铋_(kāi)始說(shuō)過(guò),搜索引擎在查找能夠滿足用戶需求的網(wǎng)頁(yè)時(shí),主要會(huì)考慮兩方面的因素,一方面是用戶發(fā)出的查詢與網(wǎng)頁(yè)內(nèi)容的相關(guān)性得分,另一點(diǎn)就是通過(guò)鏈接分析方法計(jì)算獲得的得分,也即網(wǎng)頁(yè)的重要性。

PageRank算法

PageRank算法是Google創(chuàng)始人于1997年構(gòu)建早期搜索系統(tǒng)原型時(shí)提出的鏈接分析算法,目前很多重要的鏈接分析算法都是在PageRank算法基礎(chǔ)上衍生出來(lái)的。

對(duì)于某個(gè)網(wǎng)頁(yè)A來(lái)說(shuō),該網(wǎng)頁(yè)的PageRank計(jì)算基于以下兩個(gè)基本假設(shè):

  • 數(shù)量假設(shè):在Web圖模型中,如果一個(gè)頁(yè)面節(jié)點(diǎn)接收到的其他網(wǎng)頁(yè)指向的入鏈數(shù)量越多,那么這個(gè)頁(yè)面越重要。
  • 質(zhì)量假設(shè):指向頁(yè)面A的入鏈質(zhì)量不同,質(zhì)量高的頁(yè)面會(huì)通過(guò)鏈接向其他頁(yè)面?zhèn)鬟f更多的權(quán)重。所以越是高質(zhì)量的頁(yè)面指向頁(yè)面A,頁(yè)面A越重要。

PageRank計(jì)算得出的結(jié)果是網(wǎng)頁(yè)的重要性評(píng)價(jià),這和用戶輸入的查詢是沒(méi)有任何關(guān)系的。也即如果有一個(gè)搜索引擎完全基于PageRank,那用戶不論輸入什么查詢語(yǔ)句,返回的結(jié)果都是相同的,都是PageRank值最高的頁(yè)面。

PageRank計(jì)算

初始階段,每個(gè)頁(yè)面設(shè)置相同的PageRank值,通過(guò)若干輪的計(jì)算,每個(gè)頁(yè)面會(huì)收斂到最終的PageRank值。

在一輪PageRank得分的更新計(jì)算中,每個(gè)頁(yè)面將其當(dāng)前的PageRank值平均分配到本頁(yè)包含的出鏈上,這樣每個(gè)鏈接即獲得了相應(yīng)的權(quán)值。而每個(gè)頁(yè)面將所有指向本頁(yè)面的入鏈所傳入的權(quán)值求和,即可得到新的PageRank得分。當(dāng)每個(gè)頁(yè)面都獲得了更新后的PageRank值,就完成了一輪PageRank計(jì)算。

鏈接陷阱與遠(yuǎn)程跳轉(zhuǎn)

如果仔細(xì)思考一下就會(huì)發(fā)現(xiàn)上面的PageRank算法存在問(wèn)題。一個(gè)典型的例子就是鏈接陷阱,比如三個(gè)網(wǎng)頁(yè),相互鏈接指向,形成了一個(gè)環(huán)結(jié)構(gòu),這種結(jié)構(gòu)在計(jì)算PageRank的時(shí)候,該結(jié)構(gòu)將導(dǎo)致系統(tǒng)只會(huì)吸收傳入的分支,而不能將獲得的分值傳播出去,隨著PageRank一輪輪地連續(xù)計(jì)算,鏈接陷阱內(nèi)的頁(yè)面PageRank值將會(huì)越來(lái)越高。

遠(yuǎn)程跳轉(zhuǎn)是解決鏈接陷阱的通用方式,所謂遠(yuǎn)程跳轉(zhuǎn),即在網(wǎng)頁(yè)向外傳遞分值的時(shí)候,不限于向出鏈所指網(wǎng)頁(yè)傳遞,也可以以一定的概率向任意其他網(wǎng)頁(yè)跳轉(zhuǎn)。權(quán)值通過(guò)這種虛擬邊向外傳遞,以此來(lái)避免鏈接陷阱導(dǎo)致的問(wèn)題。

HITS算法(Hypertext Induced Topic Selection)

Hub頁(yè)面與Authority頁(yè)面

Hub頁(yè)面與Authority頁(yè)面是HITS算法最基本的兩個(gè)定義,所謂Authority頁(yè)面是指與某個(gè)領(lǐng)域或某個(gè)話題相關(guān)的高質(zhì)量網(wǎng)頁(yè);所謂Hub頁(yè)面,指的是包含了很多指向高質(zhì)量Authority頁(yè)面鏈接的網(wǎng)頁(yè)。

相互增強(qiáng)關(guān)系

HITS算法隱含并利用了兩個(gè)基本假設(shè):

  • 一個(gè)好的Authority頁(yè)面會(huì)被很多好的Hub頁(yè)面指向
  • 一個(gè)好的Hub頁(yè)面會(huì)指向很多好的Authority頁(yè)面

通過(guò)這種相互增強(qiáng)關(guān)系不斷迭代計(jì)算,即可找出哪些頁(yè)面是高質(zhì)量的Hub頁(yè)面和Authority頁(yè)面。

HITS算法流程

HITS算法與PageRank一個(gè)顯著的區(qū)別就是HITS算法與用戶輸入的查詢請(qǐng)求密切相關(guān),而PageRank算法是與查詢無(wú)關(guān)的全局算法。

HITS算法接收到了用戶查詢之后,會(huì)將查詢提交給某個(gè)現(xiàn)有的搜索引擎或是自己構(gòu)建的檢索模型,并在返回的搜索結(jié)果中,提取排名靠前的網(wǎng)頁(yè),得到一組與用戶查詢高度相關(guān)的初始網(wǎng)頁(yè)集合,這個(gè)集合被稱(chēng)為根集。

在根集的基礎(chǔ)上,凡是與根集網(wǎng)頁(yè)有直接鏈接指向關(guān)系(指向根集內(nèi)頁(yè)面/根集頁(yè)面有鏈接指向)的網(wǎng)頁(yè)都被擴(kuò)充進(jìn)擴(kuò)展網(wǎng)頁(yè)集合。HITS算法在這個(gè)擴(kuò)展網(wǎng)頁(yè)集合內(nèi)尋找好的Hub頁(yè)面與Authority頁(yè)面。

對(duì)于擴(kuò)展網(wǎng)頁(yè)集合,我們對(duì)每個(gè)頁(yè)面都設(shè)置兩個(gè)初始權(quán)值,一般將Hub權(quán)值和Authrity權(quán)值都初始化為1

之后可以根據(jù)前面的兩條基本假設(shè)不斷進(jìn)行迭代,直到權(quán)值收斂。

HITS算法存在主題漂移問(wèn)題,如果在擴(kuò)展網(wǎng)頁(yè)集合里包含部分與查詢主題無(wú)關(guān)的頁(yè)面,而且這些頁(yè)面之間有較多的相互鏈接指向,那么HITS算法很可能給給予這些無(wú)關(guān)網(wǎng)頁(yè)很高的排名,這種現(xiàn)象被稱(chēng)為緊密鏈接社區(qū)現(xiàn)象。

HITS算法計(jì)算效率較低,且較容易被作弊者操縱結(jié)果,而PageRank因?yàn)樵黾恿诉h(yuǎn)程跳轉(zhuǎn),機(jī)制上優(yōu)于HITS算法。

SALSA算法

SALSA算法融合了PageRank與HITS算法的基本思想,是目前效果最好的鏈接分析算法之一。

SALSA算法有兩個(gè)階段,首先是確定計(jì)算對(duì)象集合的階段,這一階段與HITS算法基本相同;第二階段是鏈接關(guān)系傳播過(guò)程,這一階段采納了PageRank的隨機(jī)游走模型。

首先SALSA算法像HITS算法一樣算出擴(kuò)展網(wǎng)頁(yè)集合。

之后,SALSA算法根據(jù)網(wǎng)頁(yè)鏈接關(guān)系,將擴(kuò)展網(wǎng)頁(yè)集合轉(zhuǎn)換為一個(gè)二分圖,一個(gè)子集合是Hub集合,另一個(gè)是Authroity集合,規(guī)則如下:

  • 如果一個(gè)網(wǎng)頁(yè)網(wǎng)頁(yè)包含出鏈指向擴(kuò)展網(wǎng)頁(yè)集合內(nèi)其他節(jié)點(diǎn),則這個(gè)網(wǎng)頁(yè)可以被歸入Hub集合
  • 如果一個(gè)網(wǎng)頁(yè)網(wǎng)頁(yè)包含擴(kuò)展網(wǎng)頁(yè)集合內(nèi)其他節(jié)點(diǎn)指向的入鏈,則這個(gè)網(wǎng)頁(yè)可以被歸入Authority集合

根據(jù)以上規(guī)則,如果某個(gè)網(wǎng)頁(yè)同時(shí)包含入鏈和出鏈,則可以同時(shí)歸入兩個(gè)集合。Hub集合內(nèi)網(wǎng)頁(yè)的出鏈組成了二分圖的邊。

與HITS算法不同,這里SALSA在形成二分圖之后,原來(lái)的有向邊不再保留方向,轉(zhuǎn)換為無(wú)向邊:


二分圖

接下來(lái)是鏈接關(guān)系傳播階段,SALSA算法舍棄了HITS的相互增強(qiáng)假設(shè),轉(zhuǎn)而采用PageRank隨機(jī)游走模型的思想。

SALSA算法假設(shè)存在某個(gè)瀏覽者,從子集合中隨機(jī)選擇一個(gè)節(jié)點(diǎn)出發(fā),如果節(jié)點(diǎn)包含多條邊,則以相等概率隨機(jī)選擇一條邊,從Hub(Authority)子集合跳到Authority(Hub)集合內(nèi)節(jié)點(diǎn),如此不斷在兩個(gè)子集之間轉(zhuǎn)移,形成了SALSA自身的鏈接關(guān)系傳播模式。

這個(gè)隨機(jī)游走模型看起來(lái)與PageRank不同,但實(shí)際上『以相等概率隨機(jī)選擇一條邊』與『每個(gè)頁(yè)面將其當(dāng)前的PageRank值平均分配到本頁(yè)包含的出鏈上』是等價(jià)的。而HITS算法屬于權(quán)值廣播模式,即將節(jié)點(diǎn)本身的權(quán)值完全傳播給有鏈接指向的節(jié)點(diǎn),并不根據(jù)鏈接多少進(jìn)行分配。

之后我們要將二分圖轉(zhuǎn)化為Authority節(jié)點(diǎn)關(guān)系圖。

得到Authority節(jié)點(diǎn)關(guān)系圖要去掉原二分圖中的Hub節(jié)點(diǎn),只保留Authority節(jié)點(diǎn),并新建Authority節(jié)點(diǎn)之間的鏈接關(guān)系,Authority節(jié)點(diǎn)之間的鏈接關(guān)系繼承自二分圖中原有的鏈接關(guān)系。簡(jiǎn)單舉個(gè)例子,Authority節(jié)點(diǎn)A到B的鏈接概率為原二分圖中所有A到B的間接路徑的概率和,而每條間接路徑的概率通過(guò)這條路徑上所有子路徑的概率乘積計(jì)算得出,每條子路徑的概率根據(jù)所屬節(jié)點(diǎn)出鏈的個(gè)數(shù)平均分配。最后得到的Authority節(jié)點(diǎn)關(guān)系圖如下:


可以發(fā)現(xiàn)節(jié)點(diǎn)1是獨(dú)立的,是因?yàn)樵谠謭D中并不存在由節(jié)點(diǎn)1到節(jié)點(diǎn)3/5/6的任何間接路徑。(其實(shí)Authority節(jié)點(diǎn)關(guān)系圖在后面起到的作用只是判斷哪些節(jié)點(diǎn)之間是連通的,轉(zhuǎn)移概率并沒(méi)有用到)

建好Authority節(jié)點(diǎn)關(guān)系圖之后,即可根據(jù)隨機(jī)游走模型來(lái)計(jì)算每個(gè)節(jié)點(diǎn)的Authority權(quán)值。在實(shí)際計(jì)算過(guò)程中,SALSA將搜索結(jié)果排序問(wèn)題進(jìn)一步轉(zhuǎn)換為求Authority節(jié)點(diǎn)矩陣的主秩問(wèn)題,矩陣的主秩即為每個(gè)節(jié)點(diǎn)的相應(yīng)Authority權(quán)值得分,按照Authority得分由高到低排列,即可得到最終的搜索排序結(jié)果。

簡(jiǎn)單說(shuō)一下,我們根據(jù)Authority節(jié)點(diǎn)關(guān)系圖得知節(jié)點(diǎn)3、5、6是連通的,1是獨(dú)立的,然后我們根據(jù)如下公式計(jì)算每個(gè)Authority節(jié)點(diǎn)的Authority權(quán)值得分:


這個(gè)式子很好理解,第一部分就是當(dāng)前節(jié)點(diǎn)所在的子連通圖的節(jié)點(diǎn)個(gè)數(shù)占總節(jié)點(diǎn)個(gè)數(shù)的百分比,也即當(dāng)前節(jié)點(diǎn)所在子連通圖對(duì)于整個(gè)Authority節(jié)點(diǎn)關(guān)系圖的重要程度;第二部分是當(dāng)前節(jié)點(diǎn)的入鏈個(gè)數(shù)占當(dāng)前節(jié)點(diǎn)所在子連通圖入鏈個(gè)數(shù)的百分比,也即當(dāng)前節(jié)點(diǎn)在當(dāng)前節(jié)點(diǎn)所在子連通圖的重要程度。從式子中也可以看出,所有Authority節(jié)點(diǎn)的權(quán)值之和為1。

舉個(gè)例子,節(jié)點(diǎn)3的權(quán)重最后計(jì)算結(jié)果為0.25,3/4乘2/6。

另外,如果整個(gè)Authority節(jié)點(diǎn)關(guān)系圖是連通的,那么SALSA算法退化為根據(jù)節(jié)點(diǎn)入鏈個(gè)數(shù)決定排序順序的算法。

SALSA算法不需要像HITS算法一樣進(jìn)行不斷的迭代,所以計(jì)算效率要快于HITS算法,也同時(shí)解決了HITS算法的主題漂移問(wèn)題(一是因?yàn)槿サ袅薍ub頁(yè)面,二是傾向于取Authority中重要連通圖中重要的子Authority節(jié)點(diǎn))。SALSA算法是目前效果最好的鏈接分析算法之一。

主題敏感 PageRank(Topic Sensitive PageRank)

PageRank算法與查詢無(wú)關(guān),只能作為相似度計(jì)算的一個(gè)因子體現(xiàn)作用,無(wú)法獨(dú)立使用。而主題敏感PageRank是查詢相關(guān)的,可單獨(dú)作為相似度計(jì)算公式使用。

主題敏感 PageRank 主要有兩個(gè)計(jì)算步驟,第一個(gè)是離線的分類(lèi)主題PageRank數(shù)值計(jì)算;第二步是在線利用算好的主題PageRank分值,來(lái)評(píng)估網(wǎng)頁(yè)和用戶查詢的相似度。

第一步是參考ODP網(wǎng)站,ODP網(wǎng)站定義了16個(gè)大的主題類(lèi)別,每個(gè)主題類(lèi)別下有人工收集的精選高質(zhì)量網(wǎng)頁(yè)地址。然后以這16類(lèi)主題類(lèi)型的網(wǎng)頁(yè)為基礎(chǔ),計(jì)算PageRank分值,即每個(gè)網(wǎng)頁(yè)會(huì)被賦予16個(gè)主題相關(guān)的PageRank分值。不像普通的PageRank算法,所有的權(quán)值都被初始化為1,人工收集的精選高質(zhì)量網(wǎng)頁(yè)地址會(huì)被賦予較高的權(quán)值,然后由它們根據(jù)鏈接關(guān)系向其它網(wǎng)頁(yè)傳遞權(quán)值。

第二步是在線相似度計(jì)算,首先要根據(jù)用戶查詢分類(lèi)器對(duì)查詢進(jìn)行分類(lèi),計(jì)算用戶屬于定義好的各個(gè)類(lèi)別的概率分別是多少,然后再相應(yīng)的乘以待計(jì)算相似度的網(wǎng)站每個(gè)類(lèi)別的PageRank值,最終得到相似度。

主題敏感PageRank的機(jī)制非常適合作為個(gè)性化搜索的技術(shù)方案,比如在計(jì)算用戶查詢的類(lèi)別時(shí),不僅考慮用戶當(dāng)前輸入的查詢?cè)~,也考慮用戶過(guò)去的搜索記錄等個(gè)性化信息,就能更精準(zhǔn)的提供搜索服務(wù)。

網(wǎng)頁(yè)反作弊

出于商業(yè)利益驅(qū)使,很多人會(huì)通過(guò)特殊手段將網(wǎng)頁(yè)的搜索排名提高到與其網(wǎng)頁(yè)質(zhì)量不相稱(chēng)的位置,這樣會(huì)嚴(yán)重影響搜索引擎用戶的搜索體驗(yàn)。

常見(jiàn)的作弊方法包括:內(nèi)容作弊、鏈接作弊、隱藏作弊等,這里均簡(jiǎn)單介紹一下。

內(nèi)容作弊比如在網(wǎng)頁(yè)中重復(fù)關(guān)鍵詞、放置無(wú)關(guān)查詢?cè)~、在圖片alt標(biāo)簽以及網(wǎng)頁(yè)標(biāo)題等重要標(biāo)簽放置關(guān)鍵詞等,或者用一些低質(zhì)量的內(nèi)容搞內(nèi)容農(nóng)場(chǎng)。

鏈接作弊有鏈接農(nóng)場(chǎng),就是大量互相緊密鏈接的網(wǎng)頁(yè)集合,還有利用鏈接描述性文字的谷歌轟炸等等。

頁(yè)面隱藏作弊有IP地址作弊、HTTP請(qǐng)求作弊來(lái)欺騙爬蟲(chóng)。

反作弊的方法比如信任傳播模型,篩選出一些肯定不會(huì)作弊的白名單頁(yè)面,給予一定信任分值,然后白名單內(nèi)節(jié)點(diǎn)通過(guò)鏈接關(guān)系將信任度分值向外擴(kuò)散傳播,然后確定一個(gè)信任度閾值;或者反過(guò)來(lái)用黑名單做不信任傳播模型;還有異常發(fā)現(xiàn)模型,傾向于去發(fā)現(xiàn)作弊網(wǎng)頁(yè)不同于正常網(wǎng)頁(yè)的特征。

用戶查詢意圖分析

用戶之所以會(huì)產(chǎn)生搜索行為,往往是在解決任務(wù)時(shí)遇到自己不熟悉的概念或問(wèn)題,由此產(chǎn)生了對(duì)特定信息的需求,之后用戶會(huì)在頭腦中逐步形成描述需求的查詢?cè)~,將查詢?cè)~交給搜索引擎,然后對(duì)搜索結(jié)果進(jìn)行瀏覽,找到滿足自身需求的信息或者根據(jù)搜索結(jié)果的啟發(fā),修正自己的查詢關(guān)鍵詞重新搜索。

上面的問(wèn)題在于,從用戶產(chǎn)生信息需求到最終形成用戶查詢,中間有很大的不確定性,用戶用的查詢語(yǔ)句與用戶的信息需求很難一開(kāi)始就是完全等價(jià)的。因此用戶會(huì)改寫(xiě)自己的需求,比如抽象化改寫(xiě)、具體化改寫(xiě)及同義重構(gòu)改寫(xiě)。

用戶搜索意圖分類(lèi)

有人將用戶的意圖分為三個(gè)大類(lèi):導(dǎo)航型、信息型、事務(wù)型。

這讓我想到了有篇文章,阿里小蜜將用戶的意圖分為三種:問(wèn)答型、任務(wù)型語(yǔ)聊型

  • 問(wèn)答與信息型相同,都是希望獲取某種信息,知道某種知識(shí)。
  • 任務(wù)型與事務(wù)型相同,都是希望完成一個(gè)目標(biāo)明確的任務(wù)。
  • 導(dǎo)航型搜索引擎獨(dú)有,用戶希望查找某個(gè)網(wǎng)頁(yè),但又不知道URL,所以借助搜索引擎。
  • 語(yǔ)聊型chatbot獨(dú)有,畢竟沒(méi)人會(huì)和一個(gè)搜索引擎閑聊吧。

意圖識(shí)別可以采取一些通用的分類(lèi)器,比如SVM、決策樹(shù)等完成。

搜索日志挖掘

搜索引擎是搜索引擎對(duì)用戶行為的記錄,一般記載了查詢、發(fā)出查詢的用戶ID,發(fā)出查詢的時(shí)間、點(diǎn)擊網(wǎng)頁(yè)的網(wǎng)址及這條網(wǎng)址在搜索記錄中的排名情況。

查詢會(huì)話

比如在搜索日志中,我們可以找出用戶在較短時(shí)間段內(nèi)發(fā)出的連續(xù)多個(gè)查詢,這樣的一段日志被稱(chēng)作一個(gè)查詢會(huì)話,一個(gè)查詢會(huì)話中的用戶查詢語(yǔ)句往往會(huì)有語(yǔ)義上的相關(guān)性。比如我們可以依此來(lái)構(gòu)建查詢圖,用來(lái)表示查詢之間的這種相互關(guān)系。

點(diǎn)擊圖

點(diǎn)擊圖是非常有價(jià)值的信息,我們可以認(rèn)為搜索結(jié)果里被點(diǎn)擊過(guò)的網(wǎng)頁(yè)與用戶查詢更相關(guān)。

相關(guān)搜索

相關(guān)搜索也常被稱(chēng)作查詢推薦,就是百度搜索頁(yè)面拉到底的那些推薦查詢?cè)~。

搜索引擎計(jì)算相關(guān)查詢的方法基本有兩種,基于查詢會(huì)話的方法和基于點(diǎn)擊圖的方法。

基于查詢會(huì)話,就是將其他用戶包含當(dāng)前查詢語(yǔ)句的查詢會(huì)話中的其他查詢語(yǔ)句推薦給用戶?;邳c(diǎn)擊圖的方法是,如果兩個(gè)查詢各自對(duì)應(yīng)的點(diǎn)擊網(wǎng)址中,有很大比例是相同的,那么說(shuō)明這兩個(gè)查詢?cè)谡Z(yǔ)義上緊密相關(guān),可以作為相互推薦的相關(guān)查詢。

查詢糾錯(cuò)

說(shuō)查詢糾錯(cuò)之前我想先說(shuō)一下查詢預(yù)測(cè),《淺談機(jī)器學(xué)習(xí)基礎(chǔ)》中的Apriori算法就是用來(lái)發(fā)現(xiàn)頻繁項(xiàng)集并在用戶輸入查詢?cè)~時(shí)推薦給用戶的。

查詢糾錯(cuò)其實(shí)分為兩步,一是錯(cuò)誤識(shí)別,而是錯(cuò)誤糾正。

大多數(shù)錯(cuò)誤識(shí)別機(jī)制是基于詞典的,即將用戶輸入的查詢分詞后查找詞典,如果在詞典里沒(méi)有找到,那么這很可能是一個(gè)錯(cuò)誤輸入。

至于錯(cuò)誤糾正,主要的方法有兩種,一個(gè)是編輯距離,另一個(gè)是噪聲信道模型。

編輯距離其實(shí)在《淺談自然語(yǔ)言處理基礎(chǔ)》中自動(dòng)機(jī)那部分應(yīng)該提到的,但是省略了,這里簡(jiǎn)單說(shuō)一下。編輯距離通常使用有限狀態(tài)自動(dòng)機(jī)來(lái)實(shí)現(xiàn),編輯距離的意義是衡量?jī)蓚€(gè)字符串的拼寫(xiě)差異有多大,也即對(duì)于某個(gè)字符串來(lái)說(shuō),可以通過(guò)進(jìn)行幾次操作,來(lái)逐步將其轉(zhuǎn)換成另一個(gè)字符串,這些操作可以是刪除字符、添加字符、更改字符以及交換字符順序。與原錯(cuò)誤串編輯距離較小的正確串很有可能就是用戶所想要輸入的字符串。

噪聲信道模型在《淺談自然語(yǔ)言處理基礎(chǔ)》的漢語(yǔ)自動(dòng)分詞的N-最短路徑方法那里提到過(guò),當(dāng)時(shí)講的是,假設(shè)一串有分詞符號(hào)的字符串經(jīng)過(guò)噪聲信道,丟失了分詞符號(hào),我們要根據(jù)其輸出反推,找出概率最大的輸入,也即完成了分詞過(guò)程。

這里也是類(lèi)似,我們假設(shè)正確串W是輸入,錯(cuò)誤串V是輸出,那么對(duì)于多個(gè)候選正確答案,我們就要找到概率最大的作為錯(cuò)誤串V對(duì)應(yīng)的正確查詢串。具體的計(jì)算要用貝葉斯公式,需要找出最大的P(W|V)所對(duì)應(yīng)的那個(gè)W,根據(jù)貝葉斯公式,P(W|V)=P(V|W)*P(W)/P(V),P(V)都是相同的就不考慮了,關(guān)鍵還是求P(V|W)*P(W),P(V|W)是正確串W被誤寫(xiě)為V的概率,P(W)是正確串W的出現(xiàn)概率,這兩個(gè)概率都需要通過(guò)訓(xùn)練語(yǔ)料統(tǒng)計(jì)出來(lái)。

網(wǎng)頁(yè)去重

最開(kāi)始也提到過(guò),互聯(lián)網(wǎng)頁(yè)面中有相當(dāng)大比例的內(nèi)容是完全相同或者大體相同的,內(nèi)容重復(fù)可以歸結(jié)為以下4種類(lèi)型:

  • 內(nèi)容、布局均相同
  • 內(nèi)容相同、布局不同
  • 部分重要的內(nèi)容相同,布局相同
  • 部分重要的內(nèi)容相同,布局不同

如果我們能夠找出這些重復(fù)網(wǎng)頁(yè),那首先我們能夠節(jié)省一部分存儲(chǔ)空間,其次能夠提高網(wǎng)頁(yè)的收集速度。而且鏡像多的網(wǎng)頁(yè),往往比較重要。另外,如果用戶點(diǎn)擊了一個(gè)死鏈接,可以將用戶引導(dǎo)到一個(gè)內(nèi)容相同的頁(yè)面。

通用去重算法框架

通用去重算法框架

對(duì)于給定的文檔,首先通過(guò)一定的特征抽取手段,從文檔中抽取出一系列能夠表征文檔主題內(nèi)容的特征集合。這一步往往有其內(nèi)在要求,即盡可能保留文檔重要信息,拋棄無(wú)關(guān)信息,以加快計(jì)算速度。

在文檔轉(zhuǎn)換成特征集合后,為了進(jìn)一步加快計(jì)算速度,很多高效實(shí)用的算法會(huì)在特征集合的基礎(chǔ)上,對(duì)信息進(jìn)一步壓縮,采用信息指紋相關(guān)算法,將特征集合壓縮為新的數(shù)據(jù)集合,其包含的元素?cái)?shù)量遠(yuǎn)小于特征集合數(shù)量,有時(shí)甚至只有唯一的一個(gè)文檔指紋。

把文檔壓縮為文檔指紋之后,即可開(kāi)始通過(guò)相似性計(jì)算來(lái)判斷哪些網(wǎng)頁(yè)是近似重復(fù)頁(yè)面。這里常用的方法有Jaccard相似度,Jaccard相似度在《淺談推薦系統(tǒng)基礎(chǔ)》中提到過(guò),就是交集比上并集。

Shingling算法

與上面說(shuō)的通用去重算法框架相同,Shingling算法由兩個(gè)大步驟組成,第一步是從文檔中抽取能夠代表文檔內(nèi)容的特征,第二步則是根據(jù)兩個(gè)文檔對(duì)應(yīng)特征集合的重疊程度來(lái)判斷文章是否近似重復(fù)。

第一步用一張圖就能說(shuō)清楚:


文本文檔轉(zhuǎn)化為特征集合

把文檔按照上述方法拆分為若干個(gè)單詞片段,并對(duì)每個(gè)片段進(jìn)行哈希,即得到文檔內(nèi)容的特征集合,這樣的一個(gè)特征就叫做一個(gè)shingle,進(jìn)一步,如果單詞片段長(zhǎng)度為k,就叫做k-shingle。

另外,還有另一種基于詞的shingle,這樣的形式被證明在新聞報(bào)道近似重復(fù)檢測(cè)中非常有效。對(duì)于新聞報(bào)道的重復(fù)檢測(cè),將shingle定義為一個(gè)停用詞(the/for/a等)加上后續(xù)的兩個(gè)詞。

然后通過(guò)Jaccard相似度就可以計(jì)算兩篇文章之間的相似度,這是原始的Shingling算法,k的選擇依賴(lài)于文檔的典型長(zhǎng)度以及典型的字符表大小,如果k太小,很有可能會(huì)導(dǎo)致所有網(wǎng)頁(yè)之間都有較高的Jaccard相似度??傊?,k應(yīng)該選擇的足夠大,以保證任意給定的shingle出現(xiàn)在任意文檔中的概率較低。

有人提出了針對(duì)原始Shingling算法的優(yōu)化算法,因?yàn)樵糞hingling算法對(duì)于不同的網(wǎng)頁(yè),特征集合的長(zhǎng)度也不同,而且往往長(zhǎng)度都較大。優(yōu)化后的Shingling算法不再采用一個(gè)哈希函數(shù)對(duì)所有的單詞片段進(jìn)行哈希,而是隨機(jī)選擇m種哈希函數(shù),對(duì)所有的原始單詞片段進(jìn)行哈希,但是我們只保留每種哈希函數(shù)所有的結(jié)果里面,最小的那個(gè),這樣文檔就能被轉(zhuǎn)換為固定大小m的最小哈希簽名。之后,我們就可以根據(jù)Jaccard相似度計(jì)算方法,計(jì)算最小哈希簽名的相似度了。

I-Match算法

I-Match算法是先根據(jù)大規(guī)模語(yǔ)料進(jìn)行統(tǒng)計(jì),記錄語(yǔ)料中的所有單詞,然后去除掉一定比例IDF得分過(guò)高以及過(guò)低的單詞,剩下的作為特征詞典。

對(duì)于需要去重的網(wǎng)頁(yè),采用特征詞典過(guò)濾,保留在特征詞典中出現(xiàn)過(guò)的單詞,然后對(duì)所有單詞進(jìn)行一次哈希,得到一個(gè)唯一的數(shù)值,通過(guò)比較該數(shù)值是否相同,來(lái)判定兩個(gè)網(wǎng)頁(yè)是否近似重復(fù)。

我們還可以進(jìn)一步優(yōu)化,就是不再只使用一個(gè)特征詞典,而是使用多個(gè)大致相同而又有微小差異的詞典,來(lái)避免I-Match算法對(duì)于增刪單詞過(guò)于敏感的問(wèn)題。

SimHash算法

SimHash算法可能是目前最優(yōu)秀的去重算法之一,是局部敏感哈希的一種。

第一步是文檔指紋計(jì)算,首先從文檔內(nèi)容中抽取一批能表征文檔的特征,然后將這些特征映射為固定長(zhǎng)度的二進(jìn)制表示,再利用權(quán)值改寫(xiě)特征的二進(jìn)制向量,形成一個(gè)實(shí)數(shù)向量,之后將所有特征對(duì)應(yīng)的實(shí)數(shù)向量相加,最后再將實(shí)數(shù)向量轉(zhuǎn)換為二進(jìn)制向量,方式為,如果對(duì)應(yīng)位置數(shù)字大于0,則設(shè)置為1,小于等于0,則設(shè)置為0:


比如舉個(gè)例子(本例不涉及權(quán)重):

  • 選擇simhash的位數(shù),請(qǐng)綜合考慮存儲(chǔ)成本以及數(shù)據(jù)集的大小,比如說(shuō)32位
  • 將simhash的各位初始化為0
  • 提取原始文本中的特征,一般采用各種分詞的方式。比如對(duì)于"the cat sat on the mat",采用兩兩分詞的方式得到如下結(jié)果:{"th", "he", "e ", " c", "ca", "at", "t ", " s", "sa", " o", "on", "n ", " t", " m", "ma"}
  • 使用傳統(tǒng)的32位hash函數(shù)計(jì)算各個(gè)word的hashcode,比如:"th".hash = -502157718
    ,"he".hash = -369049682,……
  • 對(duì)各word的hashcode的每一位,如果該位為1,則simhash相應(yīng)位的值加1;否則減1
  • 對(duì)最后得到的32位的simhash,如果該位大于1,則設(shè)為1;否則設(shè)為0

第二步是相似文檔查找,SimHash的基本思想是這樣的:將索引網(wǎng)頁(yè)根據(jù)文檔指紋進(jìn)行分類(lèi),新網(wǎng)頁(yè)只在部分分組內(nèi)進(jìn)行匹配,以減少新文檔和索引網(wǎng)頁(yè)的比較次數(shù)。


基本思路如上圖所示。先通過(guò)分組匹配找到與新網(wǎng)頁(yè)A/B/C/D塊對(duì)應(yīng)位置范圍內(nèi)完全相同的網(wǎng)頁(yè),再一一匹配查找是否存在完全相同的文檔指紋,當(dāng)然我們也可以不以完全相同為標(biāo)準(zhǔn),比如海明距離3以內(nèi)即可。

搜索引擎緩存機(jī)制

搜索引擎通常通過(guò)緩存,也即在高速內(nèi)存硬件設(shè)備內(nèi)開(kāi)辟一塊數(shù)據(jù)存儲(chǔ)區(qū),用來(lái)容納常見(jiàn)的用戶查詢及搜索結(jié)果(或者索引數(shù)據(jù)及搜索的中間結(jié)果),同時(shí)采取一定的管理策略來(lái)維護(hù)存儲(chǔ)區(qū)內(nèi)的數(shù)據(jù)。

搜索引擎緩存系統(tǒng)架構(gòu)

緩存系統(tǒng)包含兩個(gè)部分,即緩存存儲(chǔ)區(qū)及緩存管理策略。緩存存儲(chǔ)區(qū)是高速內(nèi)存中的一種數(shù)據(jù)結(jié)構(gòu),可以存放某個(gè)查詢對(duì)應(yīng)的搜索結(jié)果,也可以存放搜索中間結(jié)果,比如一個(gè)查詢單詞的倒排列表。緩存管理策略又包含兩個(gè)子系統(tǒng),即緩存淘汰策略和緩存更新策略。

對(duì)于一個(gè)優(yōu)秀的緩存系統(tǒng)來(lái)說(shuō),應(yīng)該最大化緩存命中率以及保持緩存內(nèi)容與索引內(nèi)容一致

常見(jiàn)的緩存對(duì)象可以是搜索結(jié)果,或者查詢?cè)~匯對(duì)應(yīng)的倒排列表。對(duì)于搜索結(jié)果型緩存來(lái)說(shuō),用戶查詢的響應(yīng)速度非??欤欢古帕斜硇途彺娴拿新矢?。有時(shí)候我們還可以保存兩個(gè)經(jīng)常搭配出現(xiàn)單詞的倒排列表的交集,以這種中間結(jié)果形式作為緩存內(nèi)容。

搜索引擎緩存的結(jié)構(gòu)設(shè)計(jì)可以有多種選擇,最常見(jiàn)的是單級(jí)緩存,也可以設(shè)計(jì)為二級(jí)甚至是三級(jí)緩存結(jié)構(gòu),比如二級(jí)緩存,就可以第一級(jí)緩存是搜索結(jié)果型緩存,第二級(jí)是倒排列表型緩存,這就兼有了響應(yīng)速度快和命中率高這兩個(gè)優(yōu)點(diǎn)。

緩存淘汰策略

緩存淘汰策略和操作系統(tǒng)中的內(nèi)存管理策略有相似的地方。

動(dòng)態(tài)策略

動(dòng)態(tài)策略的緩存數(shù)據(jù)完全來(lái)自于在線用戶查詢請(qǐng)求,這種緩存策略的基本思路是:對(duì)緩存項(xiàng)保留一個(gè)權(quán)重值,這個(gè)權(quán)重值根據(jù)查詢命中情況動(dòng)態(tài)調(diào)整,當(dāng)緩存已滿的情況出現(xiàn)時(shí),優(yōu)先淘汰權(quán)重值最低的那個(gè)緩存項(xiàng)。

比如LRU策略,就是最近最少使用策略,淘汰掉最近最少使用的緩存內(nèi)容。Landlord策略是一種加權(quán)緩存策略,計(jì)算出緩存項(xiàng)目的性價(jià)比,然后如果緩存已滿,淘汰掉性價(jià)比低的緩存內(nèi)容。還有SLRU策略,這是對(duì)LRU策略的改進(jìn),緩存被分為了保護(hù)區(qū)和非保護(hù)區(qū),每個(gè)區(qū)域的緩存都按使用頻度由高到低排序,如果緩存未命中,則放入非保護(hù)區(qū)高頻端(MRU),如果命中了,則放入保護(hù)區(qū)高頻端,這樣保護(hù)區(qū)的記錄最少要被訪問(wèn)兩次。

混合策略

混合策略是指其緩存數(shù)據(jù)一方面來(lái)自于用戶查詢,另一方面來(lái)自于搜索日志等歷史數(shù)據(jù)。

比如SDC策略:靜態(tài)動(dòng)態(tài)混合緩存策略(Static and Dynamic Caching),靜態(tài)緩存就事先根據(jù)搜索日志統(tǒng)計(jì)出最高頻的那部分查詢請(qǐng)求,動(dòng)態(tài)就結(jié)合LRU或者SLRU這些動(dòng)態(tài)策略來(lái)搞。SDC策略是目前效果最好的緩存策略之一。還有AC策略,這里就不詳細(xì)說(shuō)了。

緩存更新策略

目前的緩存更新策略可以分為兩種:緩存--索引密切耦合策略和緩存--索引非耦合策略。

緩存--索引密切耦合策略就是在索引和緩存之間增加一種直接的變換通知機(jī)制,一旦索引內(nèi)容發(fā)生變化則通知系統(tǒng)緩存,然后系統(tǒng)緩存將改變的內(nèi)容進(jìn)行更新。

緩存--索引非耦合策略就是給每個(gè)緩存項(xiàng)設(shè)置一個(gè)過(guò)期值,隨著時(shí)間流逝,緩存項(xiàng)會(huì)逐漸過(guò)期。

當(dāng)然如果內(nèi)容更新不頻繁,也可以簡(jiǎn)單的,等到夜深人靜的時(shí)候統(tǒng)一更新緩存就是了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評(píng)論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,676評(píng)論 3 419
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,730評(píng)論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,118評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,873評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,266評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評(píng)論 3 443
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,482評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,036評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,846評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,025評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,279評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,684評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,953評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,751評(píng)論 3 394
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,016評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容

  • 這個(gè)系列的第六個(gè)主題,主要談一些搜索引擎相關(guān)的常見(jiàn)技術(shù)。 1995年是搜索引擎商業(yè)公司發(fā)展的重要起點(diǎn),《淺談推薦系...
    我偏笑_NSNirvana閱讀 6,687評(píng)論 3 24
  • 引言 推薦教材 關(guān)注搜索引擎的原因 互聯(lián)網(wǎng)上最重要的應(yīng)用系統(tǒng) 人類(lèi)歷史上最大規(guī)模的信息集散平臺(tái) 學(xué)術(shù)界重要的研發(fā)平...
    Ycres閱讀 3,467評(píng)論 2 10
  • soure code 一:Pagerank:PageRank是Google用于衡量特定網(wǎng)頁(yè)相對(duì)于搜索引擎索引中的其...
    SamDing閱讀 1,458評(píng)論 0 1
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,669評(píng)論 25 708
  • 1. 紅色與黑色 紅色與黑色搭配是較為穩(wěn)妥的選擇。黑色的沉穩(wěn)搭配紅色的熱情,既能凸顯出紅色的質(zhì)感,又帶入了神秘。 ...
    彼岸花M閱讀 460評(píng)論 0 3