觸屏版
全國服務(wù)熱線:0571-87205688
登錄
注冊
客戶中心
關(guān)注云客
基礎(chǔ)知識 一個簡單例子
假如有四個文檔,分別代表四部電影的名字:
The Shawshank Redemption Forrest Gump The Godfather The Dark Knight
如果我們想根據(jù)這四個文檔建立信息檢索,即輸入查找詞就可以找到包含此詞的所有電影,最直觀的實現(xiàn)方式是建立一個矩陣,每一行代表一個詞,每一列代表一個文檔,取值1/0代表該此是否在該文檔中。如下:
如果輸入是Dark,只需要找到Dark對應(yīng)的行,選出值為1對應(yīng)的文檔即可。當(dāng)輸入是多個單詞的時候,例如:The Gump,我們可以分別找到The和Gump對應(yīng)的行:1011和0100,如果是想做AND運算(既包括The也包括Gump的電影),1011和0100按位與操作返回0000,即沒有滿足查詢的電影;如果是OR運算(包括The或者包括Gump的電影),1011和0100按位與操作返回1111,這四部電影都滿足查詢。
實際情況是我們需要檢索的文檔很多,一個中等規(guī)模的bbs網(wǎng)站發(fā)布的帖子可能也有好幾百萬,建立這么龐大的一個矩陣是不現(xiàn)實的,如果我們仔細觀察這個矩陣,當(dāng)數(shù)據(jù)量急劇增大的時候,這個矩陣是很稀疏的,也就是說某一個詞在很多文檔中不存在,對應(yīng)的值為0,因此我們可以只記錄每個詞所在的文檔id即可,如下:
查詢的第一步還是找到每個查詢詞對應(yīng)的文檔列表,之后的AND或者OR操作只需要按照對應(yīng)的文檔id列表做過濾即可。實際代碼中一般會保證此id列表有序遞增,可以極大的加快過濾操作。上圖中左邊的每一個詞叫做詞項,整張表稱作倒排索引。
實際搜索過程
如果要實現(xiàn)一個搜索功能,一般有如下幾個過程
搜集要添加索引的文本,例如想要在知乎中搜索問題,就需要搜集所有問題的文本。
文本的預(yù)處理,把上述的收集的文本處理成為一個個詞項。不同語言的預(yù)處理過程差異很大,以中文為例,首先要把搜集到的文本做分詞處理,變?yōu)橐粋€個詞條,分詞的質(zhì)量對最后的搜索效果影響很大,如果切的粒度太大,一些短詞搜索正確率就會很低;如果切的粒度太小,長句匹配效果會很差。針對分詞后的詞條,還需要正則化:例如濾除停用詞(例如:的把并且的
根據(jù)上一步的詞項和文檔建立倒排索引。實際使用的時候,倒排索引不僅僅只是文檔的id,還會有其他的相關(guān)的信息:詞項在文檔中出現(xiàn)的次數(shù)、詞項在文檔中出現(xiàn)的位置、詞項在文檔中的域(以文章搜索舉例,域可以代表標(biāo)題、正文、作者、標(biāo)簽等)、文檔元信息(以文章搜索舉例,元信息可能是文章的編輯時間、瀏覽次數(shù)、評論個數(shù)等)等。因為搜索的需求各種各樣,有了這些數(shù)據(jù),實際使用的時候就可以把查詢出來的結(jié)果按照需求排序。
查詢,將查詢的文本做分詞、正則化的處理之后,在倒排索引中找到詞項對應(yīng)的文檔列表,按照查詢邏輯進行過濾操作之后可以得到一份文檔列表,之后按照相關(guān)度、元數(shù)據(jù)等相關(guān)信息排序展示給用戶。
相關(guān)度
文檔和查詢相關(guān)度是對搜索結(jié)果排序的一個重要指標(biāo),不同的相關(guān)度算法效果千差萬別,針對同樣一份搜索,百度和谷歌會把相同的帖子展示在不同的位置,極有可能就是因為相關(guān)度計算結(jié)果不一樣而導(dǎo)致排序放在了不同的位置。
基礎(chǔ)的相關(guān)度計算算法有:TF-IDF,BM25 等,其中BM25 詞項權(quán)重計算公式廣泛使用在多個文檔集和多個搜索任務(wù)中并獲得了成功。尤其是在TREC 評測會議上,BM25 的性能表現(xiàn)很好并被多個團隊所使用。由于此算法比較復(fù)雜,我也是似懂非懂,只需要記住此算法需要詞項在文檔中的詞頻,可以用來計算查詢和文檔的相關(guān)度,計算出來的結(jié)果是一個浮點數(shù),這樣就可以將用戶最需要知道的文檔優(yōu)先返回給用戶。
評論(0人參與,0條評論)
發(fā)布評論
最新評論