介紹一個機率檢索模型-二值獨立模型。這個模型我自認為比較扯淡,如有大神在可以指點一下。這個模型用了N多個假設。
假設1:詞項之間的出現是相互獨立的。
這樣文檔和查詢都可以向量化,如下:
當詞項t出現在文檔或查詢中,則xt或qt的值為1,否則為0。由於我們假設詞項出現是相互獨立的,並且向量取值只取0,1兩個值,故這個模型就叫做二值獨立模型。那麼這個模型是如何進行文檔檢索以及排序的呢,接下來就詳細介紹一下。
給定一個查詢Q,文檔D與Q相關的機率可以用P(R=1|(D,Q))表示,不相關的機率可用P(R=0|(D,Q))表示。
,
。
那麼我們自然能想到一個可以用來進行排序的指標:P(R=1|(D,Q)),但是實際中常用下面的式子作為排序的指標:
為了方便計算這個函數,做了幾個假設。
那麼可以從式子中去掉不影響排序結果,所以式子又變成如下形式:
接下來引入詞項的獨立性:
上面的式子很好理解,既然每個詞出現時相互獨立的,那麼一篇文檔出現的機率自然是每個詞出現的機率的乘積。
我們觀察這個式子發現,如果需要計算這個式子的值必須要計算不在文檔內出現的詞的一些資訊,而不出現在文檔中的詞的規模是詞典的大小,所以計算起來非常耗時,故又提出一個假設來避免對不必要的詞進行的計算。
假設3:當t不出現在查詢中時,令pt=ut。
故該項可以略去,不會影響排序效果。並且這個式子中用到了乘法操作,計算過程中很容易產生精度損失,故把其取對數得:
這樣我們就只需考慮同時出現在文檔和查詢中的詞進行計算從而提高了效率,並且有效避免了乘法的精度損失問題。
綜上所述,這個模型好處就是推導過程比較直觀,缺點就是用了很多假設。但是實際中據說這種模型在某些情況下的效果還不錯(我沒做過,所以不好說)。
但是反過頭來,這個模型到底怎麼去使用?有一個困惑的地方在於:我們說它是一個檢索模型,但是現在怎麼看它都只是一個排序函數而已。並且,無法知道文檔與查詢的相關性,故pt 與ut是不知道的,這又導致了這個模型在這個時候沒法計算。既然作為檢索模型,那麼就必須單獨使用就可以得到檢索到使用者滿意的文檔,而不能依賴於其它的方法。再仔細觀察上面的排序函數的推導過程,我們發現主要痛點在於不知道pt 與ut。 如果這兩個東西知道了,那麼後面就自然能得到。說起來比較扯淡,要使用這種模型必須首先自己估計一個pt 與ut。 而且估計過程類似於一個迭代的過程。大致過程如下:
(1)初始設定ut=dft/N,pt=0.5
(2)利用初始的估計進行文檔的相關性計算,並根據排序函數值進行排序。
(3)預設結果清單中前R個文檔是與查詢相關,後面N-R個與查詢不相關。
(4)根據這R個相關文檔和N-R個不相關文檔重新計算pt 與ut。
其中第4步可以這麼計算:
其中pt=r/R, ut=(dft-r)/(N-R),有時為了避免分母為0,用平滑方法處理得到的這兩個值,就這樣不斷迭代,直到得到使用者的滿意結果為止。可以看到這種檢索方法可能需要很多遍的計算。並且初始值怎麼選取還有R怎麼選取也很是一個很有爭議的問題,這也是這個模型的最大缺點。