首先,什麼是詞頻?詞頻就是一篇文件包含乙個詞的次數。
舉個例子,如果一篇文件d中「cat」這個詞出現了5詞,那麼我們就說「cat」的詞頻為5,記做tf(cat)=5。
那麼,什麼是文件頻?這個概念也是對於乙個詞來說的。通俗來說文件頻就是包含乙個詞的文件數目。
那麼什麼叫做逆文件頻呢?idf表示逆文件頻,檢索庫中一共有n篇文件,那麼idf=log(n/df),例如上例,「cat」的逆文件頻記做idf(cat)=log(n/df(cat))=log(n/100)。麼為什麼需要逆文件頻的概念我們後面將會介紹。
為什麼需要這幾個概念呢?我們下面就說一說。直觀上想像,乙個搜尋引擎應該如何工作呢?
1:首先使用者輸入查詢詞。
2:搜尋引擎根據查詢詞查詢相應的文件。
3:搜尋引擎把查詢結果以一定的方式顯示給使用者。
我們知道搜尋引擎還無法做到語義檢索,它只會根據一篇文件包不包含查詢詞來判斷這個文件是否符合使用者需要。那麼顯而易見乙個能說得通的假設是:乙個文件包含查詢詞的次數越多,就認為該文件越符合使用者的需要。
例如:使用者查詢「cat」,a文件包含「cat」10次,b文件包含「cat」1次,搜尋引擎更可能把a文件返回使用者。
所以,詞頻對於搜尋引擎來說是乙個非常重要的資訊。
通過這個例子也說明,包含文件頻較高的詞的文件的排序位置會放在包含文件頻較低的文件的後面,即詞的重要程度和該詞的文件頻成反比。所以,逆文件頻這個資訊對於搜尋引擎來說也是非常重要的。
為什麼逆文件頻要表現成這個樣子?為什麼不是簡單的表示成1/df?我當時也有這個疑問,後來到網上查,再加上自己的理解,我得出了下面的看似合理其實我又說不太明白的原因:
假設使用者輸入k個查詢詞,那麼一篇文件相對於這個查詢的重要性可以用下面的式子表示
dw=tf1*idf1+tf2*idf2+……+tfk*idfk。其中tfi是第i個查詢詞對於d的詞頻,idfi是第i個查詢詞的逆文件頻。
通常,對於乙個詞來說它的tf可能會遠遠小於df。idf主要表示乙個詞的重要程度,idf=1/df這種形式的逆文件頻不怎麼好, df即使不用很大, idf就已經比較小了,如果df很大的話,計算上的精度無法保證,並且這個詞和其它詞相比可有可無,這顯然也不是我們想要的,我們並不想由於其文件頻過高而忽視它。那麼又有idf=n/df,其中n為文件總數。這種形式也不怎麼好,比如當df=1時,那麼這個詞的重要程度將會出奇的大,以至於掩蓋了其它所有詞的價值。所以人們又提出了這種形式的逆文件頻idf=log(n/df),由於log函式增長相對緩慢,所以表現的比較溫和,而且實際上用這個值去計算效果也要比其它的要好。所以綜上所述,這種形式是乙個經驗性的結果。當然上面的想法是我自己的,做不得準。吳軍博士的《數學之美》上對這個東西有了乙個詳盡的介紹。根據他所言,idf的形式是早在2023年就有斯巴克.瓊斯提出來了,但是提出者也沒有說idf為啥長成這個樣子,之後的科學家們就嘗試解釋這個東西,直到2023年才有人給出了正確的解釋,解釋過程相當複雜,用了18頁的篇幅。
上面說到,搜尋引擎會把不同的文件放在結果列表的不同位置上來彰顯乙個文件符合使用者需要的程度,所以檢索技術還有乙個很重要的部分就是搜尋引擎的結果排序,即文件排序。為什麼需要排序呢?這主要是因為,搜尋引擎返回給使用者的文件數目會非常之多,可能會有幾十萬甚至幾百萬之多。如果毫無章法的返回給使用者,那麼使用者將會再一次陷入文件的汪洋大海之中,只不過這個大海的規模由幾百億個文件變成幾十萬個文件而已,但是人哪有那麼多經歷去翻閱這幾十萬篇文件呢?搜尋引擎把自己認為最符合使用者需求的文件放到列表靠前的位置,這樣人們只要順次檢視少許文件就能夠獲取到滿意文件。那麼文件按照什麼指標排序這些問題都要解決。而要解決這些問題就需要介紹一下檢索模型以及相似度等概念,這些具體細節放到以後的部落格中去介紹。
新手學資訊檢索2 倒排表與儲存
這篇就說乙個資訊檢索裡面理解最簡單的乙個東西吧,它就叫做倒排表或者倒排索引。但是這只是個名字,我想大家都知道它是什麼就行了,不必糾結於名稱。先說說倒排表張什麼樣子吧 倒排表以詞做索引,內容為包含該詞的文件編號。對於上圖可知,文件1 3 5 7 9包含詞 cat 文件2 5 8 10包含詞 dog 你...
新手學資訊檢索6 談談二值獨立模型
介紹乙個概率檢索模型 二值獨立模型。這個模型我自認為比較扯淡,如有大神在可以指點一下。這個模型用了n多個假設。假設1 詞項之間的出現是相互獨立的。這樣文件和查詢都可以向量化,如下 當詞項t出現在文件或查詢中,則xt或qt的值為1,否則為0。由於我們假設詞項出現是相互獨立的,並且向量取值只取0,1兩個...
基於Python檢索系統(3)分詞後建立資料結構
主要使用3個字典進行資料的存放,分別為title dict tags word dict。1 標題字典 title dict 鍵 1 2 3 4 5 值 每個標題的內容 2 分詞後的字典 tags 3 倒排列表 word dict 如下 import jieba import jieba.analy...