背景:
延續(xù)上篇寫了TF/IDF的公式解析圃阳,本篇為BM25解析簡單介紹诅炉。
BM25起源于 概率相關(guān)性模型罢荡,而不是矢量空間模型,但是該算法與Lucene的實(shí)際評分功能有很多共同點(diǎn)紧索。
兩者都使用Term詞頻率袁辈,逆文檔頻率和字段長度歸一化,但是每個因素的定義都略有不同珠漂。與其詳細(xì)解釋BM25公式晚缩,不如將重點(diǎn)放在BM25提供的實(shí)際優(yōu)勢上。
BM25是一個詞袋檢索功能媳危,它基于每個文檔中出現(xiàn)的查詢詞對一組文檔進(jìn)行排名荞彼,而不管它們在文檔中的距離如何。它是一組評分功能济舆,其組件和參數(shù)略有不同卿泽。該函數(shù)最突出的實(shí)例之一如下。
BM25評分公式
1)score(D,Q)公式
給定查詢Q,得到文檔D的BM25得分签夭,Q其中包含關(guān)鍵字q1…qn齐邦。
2)IDF(qi)公式
原BM25的IDF公式:
優(yōu)化后BM25的IDF公式:
其中 N是集合中文檔的總數(shù),并且n(qi) 是包含qi的Doc數(shù)量第租。
對IDF有幾種解釋措拇,其公式略有不同。在原始BM25推導(dǎo)中慎宾,IDF分量是從二進(jìn)制獨(dú)立模型推導(dǎo)的丐吓。
上面IDF公式對出現(xiàn)在超過一半的文檔中的Term有缺陷。這些Term的IDF為負(fù)趟据,因此對于任何兩個幾乎完全相同的文檔券犁,包含該Term的文檔的排名可能會低于不包含該Term的文檔的排名。這是有問題的汹碱,因此許多應(yīng)用程序以各種方式調(diào)整IDF公式:
1)每個被加數(shù)的下限可以為0粘衬,以刪減常用項(xiàng)。
2)可以給IDF函數(shù)一個下限常量咳促,以避免完全忽略Term稚新;
3)可以將IDF函數(shù)替換為形狀相似的函數(shù),該函數(shù)應(yīng)為非負(fù)或嚴(yán)格為正跪腹,以避免完全忽略Term褂删。
下面對比BM25/優(yōu)化版BM25/老版IDF公式做下對比,
條件: 100個Doc冲茸,命中從1-100屯阀,看各公式表現(xiàn)。
3)tfNorm公式
tfNorm=(freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength / avgFieldLength))
tfNorm反映的該term在所有滿足條件的doc中field中的重要性噪裕,一般來說蹲盘,相同的freq 下,field的長度越短膳音,那么取值就越高召衔。
D: 文檔
qi: 搜索詞 (多個)
f(qi,D) : qi 這個詞在文檔 D 中的出現(xiàn)次數(shù)頻率。
|D|: 滿足條件的D單詞數(shù)祭陷,也就是D的長度苍凛。
avgdl: 整個文檔庫中文檔的平均長度
k1 , b: 自由參數(shù),一般取值范圍是 k1∈[1.2,2.0]默認(rèn)1.2, b=0.75
4)詞頻
在BM25中詞頻的影響降低兵志。詞頻的影響一直在增加醇蝴,但漸漸地逼近一個值。不考慮文件長度情況下想罕,詞頻遵循公式:((k + 1) * tf) / (k + tf)
正如圖中所示悠栓,MB25中詞頻的曲線只會無限的逼近(k+1)霉涨,這里的k=1.2,更高的詞頻意味著更大的相關(guān)性惭适,但是很快就會趨于飽和笙瑟,收益遞減。而經(jīng)典的Lucene 詞頻相關(guān)性只會一直增加癞志,沒有飽和點(diǎn)往枷。
詞頻的調(diào)節(jié)因子 k1。 k1的作用是對查詢詞在文檔中的詞頻進(jìn)行調(diào)節(jié)凄杯,如果將 k1設(shè)定為 0错洁,則第二部分計(jì)算因子成了整數(shù) 1,即不考慮詞頻的因素戒突,退化成了二元獨(dú)立模型屯碴。 如果將 k1設(shè)定為較大值, 則第二部分計(jì)算因子基本和詞頻 fi保持線性增長妖谴,即放大了詞頻的權(quán)值窿锉,根據(jù)經(jīng)驗(yàn),一般將 k1設(shè)定為 1.2膝舅。
5)文檔長度
Lucene認(rèn)為較短的字段比較長的字段具有更大的權(quán)重:字段中術(shù)語的頻率會被字段的長度抵消。但是窑多,實(shí)際評分功能以相同的方式對待所有字段仍稀。它將把所有title字段(因?yàn)樗鼈兒芏蹋┍人衎ody字段(因?yàn)樗鼈兒荛L)更重要。
BM25還認(rèn)為較短的字段比較長的字段具有更大的權(quán)重埂息,但它通過考慮字段的平均長度來單獨(dú)考慮每個字段技潘。它可以區(qū)分短title字段和長標(biāo)題字段。
但從公式上看BM25還是偏向長字段千康。
其中參數(shù) b 是調(diào)節(jié)因子享幽,極端情況下,將 b 設(shè)定為 0拾弃,則文檔長度因素將不起作用值桩,設(shè)置為1不起調(diào)節(jié)作用,經(jīng)驗(yàn)表明一般將 b 設(shè)定為 0.75 會獲得較好的搜索效果豪椿。
6) 配置BM25奔坟、TF/IDF及b、k參數(shù)
1:創(chuàng)建自定義BM25相似度打分器搭盾。
2:配置b長度影響因子咳秉,也k也是這么加。
3:title使用自定義BM25(my_bm25)鸯隅。
4: body字段使用默認(rèn)BM25
如果喜歡搜索技術(shù)請來我的公眾號吧 'Lucene Elasticsearch 工作積累'
每天會持續(xù)更新搜索相關(guān)技術(shù)