BM25深度解讀

垂直搜索結果的優化包括對搜索結果的控制和排序優化兩方面,其中排序又是重中之重。

1. VSM模型簡單介紹
2. Lucene默認評分公式介紹
3. 概率模型中的二元獨立模型BIM介紹
4. BM25介紹

按照信息論,信息檢索的本質是不斷減少信息不確定的過程,也是減少信息熵的過程,方法是增加特徵信息。例如搜索 “蘋果” 如何判斷用戶搜索的是蘋果手機還是蘋果電腦或者是蘋果水果呢?再進入搜索系統前,可以增加一些分類信息,然後排序過程中,可以考慮增加一些有用因素。這些手段都是爲了一個共同的目標:減少信息的不確定性。如果方向搞錯了,即使搞出一個算法來,效果也不會太好,不會具有普適性。在第三代搜索系統的研發中,目前百度已經走在了前列,度祕機器人v3.0版本跟之前相比,有了很大的提升。以之前提出的問題爲例,如果單獨對度祕說出蘋果,她很難知道用戶的需求,但是如果你對她說:“我想要蘋果"和"我想吃蘋果”,這下度祕就知道了用戶的準確需求了。很顯然,吃蘋果中的蘋果是水果,如果什麼特徵信息都沒有,再智能的機器人也無法判斷。也許有人會說,我可以在進入搜索系統之前,分詞之後,挖掘用戶(id)的歷史記錄,如果之前買水果的機率比較大,就判斷爲水果。這種方法毫無意義,無異於猜謎。第三代智能化的搜索,主要體現在個性化,能夠理解部分人的意圖和情感,個性化的推薦,人機智能問答等等。RNN(遞歸神經網絡)將發揮重要作用,包括機器翻譯。。。其中,消除歧義分詞,語義分析是重中之重。比如吃蘋果,分詞結果是吃/蘋果,蘋果的語義標註有很多,例如水果,手機,電腦,logo等等。基於CRF和viterbi算法,可以預測出這句話中的蘋果語義是水果,這樣在搜索時,就可以構造出搜索詞:蘋果水果的分類,降低了不確定性。中文分詞是nlp的基礎,而信息檢索又離不開NLP。在目前國內的聊天機器人中,度祕是最優秀的,小黃雞等還差的很遠。在學習RNN等深度學習技術之前,一定要把基礎性的知識學好,不可好高騖遠。

1 VSM

VSM簡稱向量空間模型,主要用於計算文檔相似度。計算文檔相似度時,徐婭提取特徵。特徵提取一版用嘴通用常規方法:TF-IDF算法。這個方法很簡單卻很有用。一篇文章中文分詞後處理成詞向量(去除停用詞)然後計算tf-idf,降序排列,排在前幾位的就是重要特徵。對於一個查詢q來說,經過分詞處理後形成查詢向量T[t1,t2…],給每一個t賦予權重值,假設總共查詢到n個文檔,把每個文檔處理成向量,計算每個t在各自文檔中的TF-IDF。然後分別計算與T向量的餘弦相似度,得出的分數按照降序排列。
在這裏插入圖片描述
在這裏插入圖片描述
VSM本質:計算查詢和文檔內容的相似度。沒有考慮相關性。因爲用戶輸入一個查詢,最想得分的是相關度大的文檔。而不只是這個文檔中出現了查詢詞。因爲某篇文檔出現查詢詞,也不一定是相關性的,所以需要引入概率模型。

2 Lucene默認的評分公式介紹

Lucene評分體系/機制是Lucene出名的一核心部分。它對用戶來說隱藏了很多複雜的細節,致使用戶可以簡單地使用lucene。
Lucene soring 組合使用了信息檢索向量空間模型和布爾模型。
Lucene的評分公式(在similarity類中有說明)
score(q,d) = coord(q,d) * queryNorm(q) * Sum( tf( t in d) * idf( t ) 平方 * t.getBoost()*norm( t, d) ))

  1. tf( t in d ) 指項 t 在文檔 d 中出現的次數 frequency。默認的實現是:
    tf( t in d ) = frequery( 1/2 次方)
  2. idf( t )逆文檔頻率,文檔頻率指項 t 的文檔數 docFreq docFreq越少idf就越高(物以稀爲貴),默認實現:
    idf( t ) = 1 + log( docnum / ( docFreq + 1))
  3. idf(t):一個詞語在文檔集中出現了n次,文檔集合總數爲N。idf(t)來源於信息論。那每篇文檔出現這個詞語的改了:n/N 所以這篇文檔出現這個詞語的信息量爲:-log(n/N)。這個和信息熵有些類似(-P(X)logP(X)),在數據挖掘的過濾法進行特徵選擇時,需要用到互信息,其實就是計算信息增益,還有決策樹。把-log(n/N)變化一下,log(n/N),爲了避免0出現。進行平滑處理,就是上式(就像樸素貝葉斯需要拉普拉斯平滑處理一樣)。
  4. coord( q,d )評分因子,是基於文檔中出現查詢項的個數。越多的查詢項在一個文檔,說明文檔的匹配程序越高
  5. queryNorm(q)查詢的標準查詢,使不同查詢之間可以比較。此因子不影響文檔排序,因爲所有文檔都會使用此因子。默認值:
    queryNorm(q)= queryNorm(sumOfSquaredWeights) = 1/ sumOfSquaredWeight(1/2次方)
  6. t.gerBoost() 查詢時期的項 t 加權(如:java^2)或者由程序使用setBoost()
  7. norm(t,d)壓縮幾個索引期間的加權和長度因子:
    Document boost - 文檔加權,在索引之前使用 doc.setBoost()
    Fileld boost - 字段加權,也在索引之前調用field.setBoost()
    lengthNorm(field) - 由字段內的Token的個數來計算此值,字段越短,評分越高,在做索引的時候由Similarity.lengethNorm計算。
    以上所有因子相乘得出norm值,如果文檔中有相同字段,他們的加權也會相乘:
    norm(t,d) = doc.getBoost() * lengthNorm(field) * ∏ f.getBoost()
    索引的時候,把norm值壓縮(encode)成一個byte保存在索引中。搜索的時候再把索引中norm值解壓成(decode)成一個float值,這個encode/decode由Similarity提供。官方說:這個過程由於精度問題,以至不是可逆的,如:decode(encode(0.89)) = 0.75
    總體來說,這個評分公式仍然是基於查詢與文檔的相似度計算分數。而且,lengthNorm(field) = 1/sqrt(numTerms),即文檔的索引列越長,分值越低。這個顯然不合理,需要改進。而且這個評分公式僅僅考慮了查詢在文檔向量中的TF,沒有考慮查詢向量中TF,而且如果文檔越長,他的TF一版會越高,會成一定正相關性。這對於短文本來說計算TF是不公平的。在用這個公式打分的時候,需要對文檔向量歸一化處理,其中的lengthNorm如何處理是個問題。例如,在用球拍打羽毛球時,球拍會有個最佳擊球和回球的區域,被稱爲:“甜區”。在處理文檔向量長度時候,我們同樣可以規定一個”甜區”,比如min/max,超過這個範圍的,lengthNorm設置爲1.基於以上缺點,需要改進排序模型,讓查詢和用戶的需求更加相關,所以提出概率模型。
3 概率語言模型中的二元獨立模型BIM介紹

概率檢索模型是從概率排序原理推導出來的,所以理解這一原理對於理解概率檢索模型非常重要。概率排序模型的思想是:給定一個查詢,返回的文檔能夠按照查詢和用戶需求的相關性得分高低排序。這是一種對用戶需求相關性建模的方法。按照如下思路進行思考:首先,我們可以對查詢後得到的文檔進行分類:相關文檔和非相關文檔。這個可以按照樸素貝葉斯的生成學習模型進行考慮。如果這個文檔屬於相關性的概率大於非相關性的,那麼它就是相關性文檔,反之屬於非相關性文檔。所以,引入概率模型:P(R|D)是一個文檔相關性的概率,P(NR|D)是一個文檔非相關性的概率。如果P(R|D) > P(NR|D),說明它與查詢相關,是用戶想要的。按照這個思路繼續,怎樣才能計算這個概率呢?如果你熟悉樸素貝葉斯的話,就容易了。P(R|D) = P(D|R)P®/P(D),P(NR|D) = P(D|NR)P(NR)/P(D)。用概率模型計算相關性的目的就是判斷一個文檔是否P(R|D) > P(NR|D),即P(D|R)P®/P(D) > P(D|NR)P(NR)/P(D) <=> P(D|R)P® > P(D|NR)P(NR) <=> P(D|R)/P(D|NR) > P(NR)/P®。對於搜索來說,並不需要真的進行分類,只需計算P(D|R)/P(D|NR)然後按降序排列即可。於是引入二元獨立模型(Binary Independent Model) 假設=>

①二元假設:在對文檔向量進行數據建模時,假設特徵的值屬於Bernoulli分佈,其值爲0或者1(樸素貝葉斯就適用於特整值和分類值都屬於Bernoulli分佈的情況,而loggistic Regression適用於分類值爲Bernoulli分佈)。在文本處理領域,就是這個特徵在文檔中出現或者不出現,不考慮詞頻。

②詞彙獨立性假設:假設構成每個特徵的詞是相互獨立的,不存在關聯性。在機器學習領域裏,進行聯合似然估計或者條件似然估計時,都是假設數據遵循iid分佈。事實上,詞彙獨立假設是非常不合理的。比如"喬布斯"和"ipad"和"蘋果"是存在關聯的。
在以上兩個假設的前提下,二元獨立模型即可以對兩個因子P(D|R)和P(D|NR)進行估算(條件概率),舉個簡單的例子,文檔D中五個單詞的出現情況如下:{1,0,1,0,1} 0表示不出現,1表示出現。用Pi表示第i個單詞在相關文檔中出現的概率,在已知相關文檔集合的情況下,觀察到文檔D的概率爲:
在這裏插入圖片描述
對於因子P(D|NR),我們假設用Si表示第i個單詞在在不相關文檔集合中出現的概率,於是在已知不相關文檔集合的情況下,觀察到文檔D的概率爲:
在這裏插入圖片描述
於是我們可以得到下面的估算
在這裏插入圖片描述
可以將各個因子規劃爲兩個部分,一部分是在文檔D中出現的各個單詞的概率乘積,另一部分是沒在文檔D中出現的各個單詞的概率乘積,於是公式可以理解爲下面的形式
在這裏插入圖片描述
對公式進行一下等價的變換,可得:
在這裏插入圖片描述
第一部分代表在文章中出現過的單詞所計算得到的單詞概率乘積,第二部分表示所有特徵詞計算得到單詞概率乘積,它與具體的文檔無關,所有文檔該項的得分一致,所以在排序中不起作用,可以抹除掉。得到最終的估算公式:
在這裏插入圖片描述
爲了方便計算,對上述公式兩邊取log,得到:
在這裏插入圖片描述
那麼如何估算概率Si和Pi呢,如果給定用戶查詢,我們能確定哪些文檔集合構成了相關文檔集合,哪些文檔構成了不相關文檔集合,那麼就可以用如下的數據對概率進行估算:
在這裏插入圖片描述
根據上表可以計算出Pi和Si的概率估值,爲了避免log(0),對估值公式進行平滑操作,分子+0.5,分母+1.0
在這裏插入圖片描述
代入估值公式得到:
在這裏插入圖片描述
這個公式代表的含義就是,對於同時出現在查詢Q和文檔D中的單詞,累加每個單詞的估值結果就是文檔D和查詢Q的相關性度量,在預先不知道哪些文檔相關哪些文檔不相關的情況下,可以使用固定值代替,這種情況下該公式等價於向量空間模型(VSM)中的IDF因子,實際證明該模型的實際使用結果不好,但是它是BM25模型的基礎。
後來人們發現應該講BIM中沒有考慮到的詞頻和文檔長度等因素都考慮進來,就有了後面的BM25算法。

4 BM25

BIM(二元假設模型)對於單詞特徵,只考慮單詞是否在doc中出現過,並沒有考慮單詞本身的相關特徵,BM25在BIM的基礎上引入單詞在查詢中的權值,單詞在doc中的權值,以及一些經驗參數,所以BM25在實際應用中效果要遠遠好於BIM模型。

在這裏插入圖片描述
BM25由3部分組成:

第一部分是BIM模型得分,上面也提到了,在一定的情況下該部分等價於IDF;
第二部分是查詢詞在文檔D中的權值,f是查詢詞在文檔中的頻率,K1和K是經驗參數;
第三部分是查詢詞自身的特徵,qf是查詢詞在用戶查詢中的頻率,但一般用戶查詢都比較短,qf一般是1,K2是經驗參數;
從上面的公式可以看出BM25是查詢中單詞的分值疊加得到,每個單詞是一個個體,而整個文檔被作爲一個整體。

在第二部分中K因子代表了文檔長度的考慮,dl是文檔的長度,avdl是文檔的平均長度,k1和b是調整參數,b爲0時即不考慮文檔長度的影響,經驗表明b=0.75左右效果比較好。但是也要根據相應的場景進行調整。b越大對文檔長度的懲罰越大,k1因子用於調整詞頻,極限情況下k1=0,則第二部分退化成1,及詞頻特徵失效,可以證明k1越大詞頻的作用越大。

在我們不知道哪些文檔相關,哪些文檔不相關的情況下,將相關文檔數R及包含查詢詞相關文檔數r設爲0,那麼第一部分的BIM公式退化成:
在這裏插入圖片描述
就是IDF因子的定義,N是總文檔數,n是查詢詞的tf信息,0.5是平滑因子。

參考:
https://www.cnblogs.com/txq157/p/6420372.html
https://www.jianshu.com/p/b4f06594d32f

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章