概率檢索模型是當前信息檢索領域效果最好的模型之一,它基於對已有反饋結果的分析,根據貝葉斯原理爲當前查詢排序。
我在之前的博客 樸素貝葉斯分類 中介紹瞭如何用樸素貝葉斯算法對數據進行分類,其實概率檢索模型的基本原理與樸素貝葉斯分類是一樣的。先回憶一下樸素貝葉斯算法的原理:對於測試元組X ,最終目的是要計算對於不同的類Ci ,計算後驗概率p(Ci|X) ,哪個類最大,就屬於哪個類。而爲了計算p(Ci|X) ,則需要用貝葉斯公式做如下分解:
p(Ci|X)=p(X|Ci)p(Ci)p(X)(10)
因爲要比較大小,所以忽略p(X) ,只需要考慮分子中的p(X|Ci)p(Ci) ,其中p(Ci) 可以通過抽樣得到,那麼問題轉化爲計算p(X|Ci) ,p(X|Ci) 代表X 在類Ci 中的概率。如果X 由n 個相互之間無關的屬性組成,那麼這個概率一般如下計算:
p(X|Ci)=∏j=1np(Xj|Ci)(11)
其中Xj 爲測試元組的第j 個屬性值,如果屬性是離散屬性,那麼p(Xj|Ci)=|Xj||Ci| ,其中|Xj||Ci| 表示類Ci 的數據元組中擁有屬性Xj 的概率。如果屬性是連續屬性呢,你自己看上面那篇博文,我這裏不說了。之所以說離散時的情況,是因爲本文後面要用。以上就是樸素貝葉斯分類法的原理,我大概複述一遍,方便理解後面要說的東西。
1. 基本思想
概率檢索模型與貝葉斯分類的思想非常接近,但還是有本質區別的。概率檢索模型的根本目的不是分類,它不需要根據查詢判斷一個文檔屬於“相關”或者“不相關”,而是計算這個文檔屬於屬於“相關”或者“不相關”的概率大小爲文檔排序。我將概率檢索模型要解決的問題刻畫如下。
問題模型:現在對於一個查詢q ,已知文檔集中哪些與q 是相關的(這類文檔的類標號記爲C1 ),哪些與q 是不相關的(這類文檔的類標號記爲C0 )。概率檢索模型的核心是對於每一個文檔X 計算公式(1),公式(1)計算出的α 代表了文檔X 屬於“相關”類的概率與屬於“不相關”類的概率的比值(也叫“優勢比”)。顯然,這個比值越大,代表該文檔與查詢的相關度越大,因此我們就把α 看做是相關度得分,最後通過α 將文檔排序。
α=p(C1|X)p(C0|X)=p(X|C1)p(C1)p(X|C0)p(C0)(1)
其中,p(C1|X) 和p(C0|X) 的計算過程如下:
p(C1|X)=p(X|C1)p(C1)p(X)p(C0|X)=p(X|C0)p(C0)p(X)(12)
2. 推導過程
現在看看具體怎樣計算公式(1)。首先,p(C1) 和p(C0) 其實對於所有的文檔來說都是一樣的,因爲最終的目的是比較大小,所以我們忽略掉。α 的計算可以簡寫成如下形式:
α=p(X|C1)p(X|C0)(2)
接下來計算p(X|Ci) 的方法就跟樸素貝葉斯中那個連乘的公式是一樣的了,但是有一點不同,用樸素貝葉斯做數據分類的時候,一般默認所有數據元組的屬性值都是存在的,而到了信息檢索這就不一樣了,我們知道文檔由詞項組成,而某一個詞項可能在某一個文檔中,也可能不在。
所以我們不妨記單詞wj 在類Ci 中隨機選擇的一篇文檔中出現的概率爲p(wj|Ci) ;那麼單詞wj 不在類Ci 中隨機選擇的一篇文檔中出現的概率就是1−p(wj|Ci) ,那麼記爲p(wj⎯⎯⎯⎯⎯⎯|Ci) 好了。
現在就可以將α 的計算公式寫成如下形式:
α=∏wj∈Xp(wj|C1)∏wj∉Xp(wj⎯⎯⎯⎯⎯⎯|C1)∏wj∈Xp(wj|C0)∏wj∉Xp(wj⎯⎯⎯⎯⎯⎯|C0)(13)
爲了方便推導,將p(wj|C1) 記爲pj ,將p(wj|C0) 記爲sj ,則α 可以表示成下面的公式(3):
α=∏wj∈Xpj∏wj∉X1−pj∏wj∈Xsj∏wj∉X1−sj(3)
直接看公式(3)可能有點抽象,我舉個例子嘗試說明一下,假如文檔集的詞典爲{w1,w2,w3,w4} ,文檔1擁有的詞項爲{w1,w3} ,那麼文檔1的α 值可以如下計算:
α=p1p3⋅(1−p2)(1−p4)s1s3⋅(1−s2)(1−s4)(14)
現在,對公式(3)做一個數學上的等價變換,如下:
α=∏wj∈Xpj∏wj∉X1−pj∏wj∈Xsj∏wj∉X1−sj=∏wj∈Xpj∏wj∈Xsj⋅∏wj∉X1−pj∏wj∉X1−sj=(∏wj∈Xpj∏wj∈Xsj⋅∏wj∈X1−sj∏wj∈X1−pj)⋅(∏wj∈X1−pj∏wj∈X1−sj∏wj∉X1−pj∏wj∉X1−sj)=∏wj∈Xpj(1−sj)∏wj∈Xsj(1−pj)⋅∏1−pj∏1−sj(4)
其中pj 和sj 對於任意文檔來說都一樣,所以公式(4)的第二部分可以忽略,這也是我上面經過這麼複雜的公式計算的原因,就是要將文檔排序的比較依據化簡成
α=∏wj∈Xpj(1−sj)∏wj∈Xsj(1−pj)(15)
用log 函數進一步處理,得到:
∑j=1nlogpj1−pj+log1−sjsj(5)
也就是說,現在只要能計算出pj 和sj 就成功了。在計算之前,我們先寫出下面的索引項出現列聯表:
|
相關文檔數 |
不相關文檔數 |
總文檔數 |
包含wj 的文檔 |
rj |
nj−rj |
nj |
不包含wj 的文檔 |
|C1|−rj |
N−nj−|C1|+rj |
N−nj |
所有文檔 |
|C1| |
|C0| |
N |
根據這個表可以得到以下計算公式:
pj=rj|C1|sj=nj−rj|C0|(16)
因爲在公式(5)中,我們用log 函數進行了處理,所以我們在pj 和sj 的計算公式中分子加0.5,分母加1,做平滑計算:
pj=rj+0.5|C1|+1sj=nj−rj+0.5|C0|+1(17)
把上面的結果代入公式(5),得到:
∑j=1nlog(rj+0.5)(|C0|−nj+rj+0.5)(|C1|−rj+0.5)(nj−rj+0.5)(6)
這個公式(6)也叫做Robertson-Sparck Jones等式。
3. 無類別估值的解決方案
Robertson-Sparck Jones等式的計算條件是知道|C1| ,但是如果不知道呢?實際上,大多時候我們是不知道的。一種可行的方案是,初始時令|C1|=0 ,則公式(6)化簡爲:
∑j=1nlogN−nj+0.5nj+0.5(7)
可以看到,公式(7)裏面有一個IDF的成分,但是既沒有TF成分,也沒有文檔長度歸一化的處理過程。這些問題導致上面所說的概率檢索模型並不實用。後來的BM25模型解決了這些問題,成爲了商業搜索系統中非常成功的案例。
4. BM25模型
我們知道,在向量空間模型的經典權重算法TF−IDF 中,好的索引權重模型應該考慮三方面的內容:(1)詞頻;(2)逆文檔頻率;(3)文檔長度。而上面由概率檢索模型推導出的公式(6)顯然只是包含了逆文檔頻率的因素,而未考慮詞頻和文檔長度。實驗結果也證明Robertson-Sparck Jones等式直接應用的效果並不好。所以學者們考慮在Robertson-Sparck Jones等式中加入代表詞頻和文檔長度的因子,重新計算文檔排序。這就是經典的BM25模型。
BM25模型爲文檔Di 每個索引項tj 分配了一個係數Bi,j ,由公式(8)計算生成:
Bi,j=(K1+1)fi,jK1[(1−b)+blen(Di)avg_doclen]+fi,j(8)
其中,K1 和b 爲經驗參數,用於調節詞頻和文檔長度在權重計算中起到的作用,一般來講,K1 取1,b 取0.75已經被證明是合理的假設。而fi,j 則爲詞wj 在文檔Di 中的詞頻,avg_doclen 爲平均文檔長度。
計算得到了係數Bi,j ,就可以基於Robertson-Sparck Jones等式最終計算出文檔關於查詢的排序:
sim(Dj,q)=∑tj∈qBi,j×log(rj+0.5)(|C0|−nj+rj+0.5)(|C1|−rj+0.5)(nj−rj+0.5)(18)
如果不知道哪些文檔是相關的,那麼根據公式(7),還可以簡化上式:
sim(Dj,q)=∑ti∈qBi,j×logN−nj+0.5nj+0.5(9)
這個公式(9),就是BM25模型最爲經典的計算公式。