BM25 調參調研

1. 搜索 ES 計算文本類似度用的 BM25,參數默認,不適合電商場景,可調整 BM25 參數使其適用於電商短文本場景html

 

2. k一、b、tf、L、tfScore 的關係以下圖紅框內所示(注:這裏的 tf 即上式中的 f(qi,D))。api

3. k1 用來控制公式對詞項頻率 tf 的敏感程度。((k1 + 1) * tf) / (k1 + tf) 的上限是 (k1+1),也即飽和值。當 k1=0 時,無論 tf 如何變化,BM25 後一項都是 1;隨着 k1 不斷增大,雖然上限值依然是 (k1+1),但到達飽和的 tf 值也會越大;當 k1 無限大時,BM25 後一項就是原始的詞項頻率。一句話,k1 就是衡量高頻 term 所在文檔和低頻 term 所在文檔的相關性差別,在咱們的場景下,term 頻次並不重要,該值能夠設小。ES 中默認 k1=1.2,可調整爲 k1=0.3。elasticsearch

 

4. b 用來控制文檔長度 L 對權值的懲罰程度。b=0,則文檔長度對權值無影響,b=1,則文檔長度對權值達到徹底的懲罰做用。ES 中默認 b=0.75,可調整爲 b=0.1。ide

5. IDF 一項無參可調,這裏只說明一點,公式中當 n(q) 超過 N/2 很是大時,IDF 有獲得負值的可能,Lucene’s BM25 實現時對 log 中的除式作了加 1 處理,Math.log(1 + (docCount - docFreq + 0.5D)/(docFreq + 0.5D)),使其永遠大於 1,取 log 後就不會獲得負值。ui

 

參考資料:3d

  • https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-similarity.html
  • https://en.wikipedia.org/wiki/Okapi_BM25
  • https://www.elastic.co/guide/en/elasticsearch/guide/current/pluggable-similarites.html
  • https://www.elastic.co/guide/en/elasticsearch/guide/current/practical-scoring-function.html
  • http://opensourceconnections.com/blog/2015/10/16/bm25-the-next-generation-of-lucene-relevation/
  • 《信息檢索導論》p160
相關文章
相關標籤/搜索