主流搜索引擎算法【查詢(xún)】

主要有下面三種查詢(xún)處理機(jī)制。

一次一文檔(Doc at a Time)

以倒排列表中包含的文檔為單位,每次將其中某個(gè)文檔與查詢(xún)的最終相似性得分計(jì)算完畢,然后開(kāi)始計(jì)算另外一個(gè)文檔的最終得分,直到所有文檔的得分計(jì)算完畢為止。然后根據(jù)文檔得分進(jìn)行大小排序,輸出得分最高的K個(gè)文檔作為搜索結(jié)果輸出,即完成了一次用戶(hù)查詢(xún)的響應(yīng)。實(shí)際實(shí)現(xiàn)中,只需在內(nèi)存中維護(hù)一個(gè)大小為K的優(yōu)先級(jí)隊(duì)列。輸出 top K 個(gè)文檔。

虛線箭頭標(biāo)出查詢(xún)處理計(jì)算的前進(jìn)方向。查詢(xún)時(shí),對(duì)于文檔1而言,因?yàn)閮蓚€(gè)單詞的倒排列表中都包含這個(gè)文檔,所以可以根據(jù)各自的TF和IDF等參數(shù)計(jì)算文檔和查詢(xún)單詞的相似性,之后將兩個(gè)分?jǐn)?shù)相加得到文檔1和用戶(hù)查詢(xún)的相似性得分Score1。其他的也是類(lèi)似計(jì)算。最后根據(jù)文檔得分進(jìn)行大小排序,輸出得分最高的K隔文檔作為搜索結(jié)果輸出。

一次一單詞(Term at a Time)

首先將某個(gè)單詞對(duì)應(yīng)的倒排列表中的每個(gè)文檔ID都計(jì)算一個(gè)部分相似性得分

接著計(jì)算下一個(gè)單詞倒排列表中包含的文檔ID,即進(jìn)行縱向計(jì)算,如果發(fā)現(xiàn)某個(gè)文檔ID已經(jīng)有了得分,則在原先得分基礎(chǔ)上累加。當(dāng)所有單詞都處理完畢后,每個(gè)文檔最終的相似性得分計(jì)算結(jié)束,之后按照大小排序,輸出得分最高的K個(gè)文檔作為搜索結(jié)果。?

跳躍指針(Skip Pointers)

基本思想:

1. 將一個(gè)倒排列表數(shù)據(jù)化整為零,切分為若干個(gè)固定大小的數(shù)據(jù)塊,一個(gè)數(shù)據(jù)塊作為一組,

2. 對(duì)于每個(gè)數(shù)據(jù)塊,增加元信息來(lái)記錄關(guān)于這個(gè)塊的一些信息。

這樣即使是面對(duì)壓縮后的倒排列表,在進(jìn)行倒排列表合并的時(shí)候也能有兩個(gè)好處:

1、無(wú)須解壓所有倒排列表項(xiàng),只解壓部分?jǐn)?shù)據(jù)即可

2、無(wú)須比較任意兩個(gè)文檔ID。

從上面的查找過(guò)程可知,在查找數(shù)據(jù)時(shí),只需要對(duì)其中一個(gè)數(shù)據(jù)塊進(jìn)行解壓縮和文檔編號(hào)查找即可獲得結(jié)果,而不必解壓所有數(shù)據(jù),很明顯加快查找速度,并節(jié)省內(nèi)存空間。

缺點(diǎn):增加指針比較操作的次數(shù)。

實(shí)踐表明:假設(shè)倒排列表的長(zhǎng)度為L(zhǎng)(即包含L個(gè)文檔ID),使用根號(hào)L作為塊大小,則效果較好。

多字段索引

即對(duì)文檔的多個(gè)字段進(jìn)行索引。

多字段索引的方式:多索引方式、倒排列表方式和擴(kuò)展列表方式。

1、多索引方式

針對(duì)每個(gè)不同的字段【標(biāo)題、摘要、正文等】,分別建立一個(gè)索引,當(dāng)用戶(hù)指定某個(gè)字段作為搜索范圍時(shí),可以從相應(yīng)的索引里提取結(jié)果。當(dāng)用戶(hù)沒(méi)有指定特定字段時(shí),搜索引擎會(huì)對(duì)所有字段都進(jìn)行查找并合并多個(gè)字段的相關(guān)性得分,這樣效率較低。

2、倒排列表方式

將字段信息存儲(chǔ)在某個(gè)關(guān)鍵詞對(duì)應(yīng)的倒排列表內(nèi),在倒排列表中每個(gè)文檔索引項(xiàng)信息的末尾追加字段信息,這樣在讀出用戶(hù)查詢(xún)關(guān)鍵詞的倒排列表的同時(shí),就可以根據(jù)字段信息,判斷關(guān)鍵詞是否在某個(gè)字段出現(xiàn),以此來(lái)進(jìn)行過(guò)濾。倒排列表方式示意圖如下:

3、擴(kuò)展列表方式

為每個(gè)字段建立一個(gè)列表,該列表記錄了每個(gè)文檔這個(gè)字段對(duì)應(yīng)的出現(xiàn)位置信息。比如第一項(xiàng)<1,(1,4)>,代表對(duì)于文檔1而言,其標(biāo)題的位置為從第一個(gè)單詞到第4個(gè)單詞這個(gè)范圍,其他項(xiàng)含義類(lèi)似。

如下圖:


對(duì)于查詢(xún)而言,假設(shè)用戶(hù)在標(biāo)題字段搜索”搜索引擎“,通過(guò)倒排列表可以知道文檔1、3、4包含這個(gè)查詢(xún)?cè)~,接下來(lái)需要判斷這些文檔是否在標(biāo)題字段中出現(xiàn)過(guò)查詢(xún)?cè)~?

短語(yǔ)查詢(xún)

短語(yǔ)查詢(xún)的本質(zhì)是如何在索引中維護(hù)單詞之間的順序關(guān)系或者位置信息。

較常見(jiàn)的支持短語(yǔ)查詢(xún)技術(shù)包括:位置信息索引、雙詞索引和短語(yǔ)索引。也可將三者結(jié)合使用。

1.位置信息索引(Position Index)

在索引中記錄單詞位置信息,可以很方便地支持短語(yǔ)查詢(xún)。但是其付出的存儲(chǔ)和計(jì)算代價(jià)很高。

分別按照詞進(jìn)行查詢(xún);再比較查詢(xún)結(jié)果之間是不是同文檔、是不是相鄰

2. 雙詞索引(Nextword Index):首詞+下詞

統(tǒng)計(jì)數(shù)據(jù)表明,二詞短語(yǔ)在短語(yǔ)中所占比例最大,因此針對(duì)二詞短語(yǔ)提供快速查詢(xún),能解決短語(yǔ)查詢(xún)的問(wèn)題。但是這樣做的話(huà)倒排列表個(gè)數(shù)會(huì)發(fā)生爆炸性增長(zhǎng)。

? ??2個(gè)詞典:首詞、下詞 詞典

????查詢(xún)方法:短語(yǔ)查詢(xún),“我的父親” =>我_的 + 的_父親?

? ? ?缺點(diǎn):雙詞索引會(huì)使得索引急劇增大,一般實(shí)現(xiàn)并非對(duì)所有單詞都建立雙詞索引,而是只對(duì)計(jì)算代價(jià)高的短語(yǔ)建立雙詞索引。

3.短語(yǔ)索引(Phrase Index)

? ? 詞典中加入多次短語(yǔ)并維護(hù)短語(yǔ)的倒排列表。

? ??查詢(xún)方法:先短語(yǔ)查找,再詞典查找

? ??缺點(diǎn):就是不可能事先將所有短語(yǔ)都建好索引。通用做法就是挖掘出熱門(mén)短語(yǔ)。下圖是加入短語(yǔ)索引后的整體索引結(jié)構(gòu):

4、混合方法

首先在短語(yǔ)索引中查找,如果找到則返回結(jié)果,否則在雙詞索引中查找,如果找到則返回結(jié)果,否則從常規(guī)索引中對(duì)短語(yǔ)進(jìn)行處理,充分發(fā)揮各自的優(yōu)勢(shì)。

短語(yǔ)查詢(xún)用來(lái)對(duì)熱門(mén)短語(yǔ)和高頻短語(yǔ)進(jìn)行索引,雙詞索引對(duì)包含停用詞等高代價(jià)短語(yǔ)進(jìn)行索引。

對(duì)于查詢(xún),系統(tǒng)首先在短語(yǔ)索引中查找,如果找到則返回結(jié)果,否則在雙詞索引中查找,如果找到則返回結(jié)果,否則從常規(guī)索引中對(duì)短語(yǔ)進(jìn)行處理,這樣就充分發(fā)揮各自的優(yōu)勢(shì)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容