BM25算法是一種常見用來作相關度打分的公式,思路比較簡單,主要就是計算一個query裏面全部詞和文檔的相關度,而後在把分數作累加操做,而每一個詞的相關度分數主要仍是受到tf/idf的影響。公式以下:算法
R(qi,d)是每一個詞和文檔的相關度值,其中qi表明每一個詞,d表明相關的文檔,Wi是這個詞的權重,而後全部詞的乘積再作累加。文檔
Wi可由外部設置,默認的話是idf值,公式以下,N是文檔總數,n(qi)是包含該詞的文檔數,0.5是調教係數,避免n(qi)爲0的狀況,從這個公式能夠看出N越大,n(qi)越小的花idf值越大,這也符合了"詞的重要程度和其出如今總文檔集合裏的頻率成反比"的思想,取個log是爲了讓idf的值受N和n(qi)的影響更加平滑。im
下面是R(qi,d)的公式,其中k1,k2,b都是調節因子,通常k1=2,k2=1,b=0.75,fi是詞在文檔中的次數,qfi表明詞在查詢語句裏的次數,dl是文檔長度,avgdl是文檔平均長度,能夠看出若是其餘因素同樣dl越大,相關度越低,這個也符合結論,至於會除以一個avgdl,我想是拿本篇文檔長度和總體文檔長度水平作比較 ,以避免單獨取dl值時過大。查詢
其中乘積的左邊因數表明詞在文檔中的次數關係,乘積的右邊因數表明詞在查詢語句中的次數關係,通常絕大多數狀況,查詢詞在查詢語句裏面出現一次,因此qfi能夠當作是1,又由於k2爲1,因此右邊因數其實就等於1,因此公式可化簡爲下面這樣img
而總公式化簡後可得集合
影響BM25公式的因數有query
1 idf,idf越高分數越高
2 tf tf越高分數越高
3 dl/avgdl 若是該文檔長度在文檔水平中越高則分數越低。
4 k1,b爲分數的調節因子