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