BM25 is a bag-of-words retrieval function that ranks a set of documents based on the query terms appearing in each document, regardless of the inter-relationship between the query terms within a document (e.g., their relative proximity). It is not a single function, but actually a whole family of scoring functions, with slightly different components and parameters. One of the most prominent instantiations of the function is as follows.
BM25算法,通常用來作搜索相關性平分。一句話概況其主要思想:對Query進行語素解析,生成語素qi;然后,對於每個搜索結果D,計算每個語素qi與D的相關性得分,最后,將qi相對於D的相關性得分進行加權求和,從而得到Query與D的相關性得分。
BM25算法的一般性公式如下:
其中,Q表示Query,qi表示Q解析之后的一個語素(對中文而言,我們可以把對Query的分詞作為語素分析,每個詞看成語素qi。);d表示一個搜索結果文檔;Wi表示語素qi的權重;R(qi,d)表示語素qi與文檔d的相關性得分。
下面我們來看如何定義Wi。判斷一個詞與一個文檔的相關性的權重,方法有多種,較常用的是IDF。這里以IDF為例,公式如下:
其中,N為索引中的全部文檔數,n(qi)為包含了qi的文檔數。
根據IDF的定義可以看出,對於給定的文檔集合,包含了qi的文檔數越多,qi的權重則越低。也就是說,當很多文檔都包含了qi時,qi的區分度就不高,因此使用qi來判斷相關性時的重要度就較低。
我們再來看語素qi與文檔d的相關性得分R(qi,d)。首先來看BM25中相關性得分的一般形式:
其中,k1,k2,b為調節因子,通常根據經驗設置,一般k1=2,b=0.75;fi為qi在d中的出現頻率,qfi為qi在Query中的出現頻率。dl為文檔d的長度,avgdl為所有文檔的平均長度。由於絕大部分情況下,qi在Query中只會出現一次,即qfi=1,因此公式可以簡化為:
從K的定義中可以看到,參數b的作用是調整文檔長度對相關性影響的大小。b越大,文檔長度的對相關性得分的影響越大,反之越小。而文檔的相對長度越長,K值將越大,則相關性得分會越小。這可以理解為,當文檔較長時,包含qi的機會越大,因此,同等fi的情況下,長文檔與qi的相關性應該比短文檔與qi的相關性弱。
綜上,BM25算法的相關性得分公式可總結為:
從BM25的公式可以看到,通過使用不同的語素分析方法、語素權重判定方法,以及語素與文檔的相關性判定方法,我們可以衍生出不同的搜索相關性得分計算方法,這就為我們設計算法提供了較大的靈活性。