前言
- 簡要説明
TF-IDF與BM25 - 簡要説明
BM25下k1和b參數調整
TF-IDF 與 BM25
TF-IDF
- TF是指歸一化後的詞頻
- IDF是指逆文檔頻率
- 詞彙(word)的TF-IDF
- 句子(sentence)的TF-IDF
BM 25
一句話解釋:BM 25 可以看做 TF-IDF 的變形,原理上是類似的。
傳統的TF值理論上是可以無限大的。而BM25與之不同,它在TF計算方法中增加了一個常量k,用來限制TF值的增長極限。下面是兩種計算方法中,詞頻對TF Score影響的走勢圖。從圖中可以看到,當tf增加時,TF Score跟着增加,但是BM25的TF
Score會被限制在0~k+1之間。它可以無限逼近k+1,但永遠無法觸達它。這在業務上可以理解為某一個因素的影響強度不能是無限的,而是有個最大值,這也符合我們對文本相關性邏輯的理解。
BM25 下 k1 和 b 參數調整
BM25 算分公式解釋
Elasticsearch 使用的 BM25 相似度算法的完整計算公式如下:
其中
k1 和 b 參數調整
在Elasticsearch中,BM25相似度算法的參數k1和b的取值範圍如下:
- k1 參數(術語頻率飽和調節器)通常是在 0 到 正無窮大 的範圍內。但是,在實際應用中,它一般設置在 0 到 3 之間。默認值是 1.2。k1 值較小意味着詞頻達到飽和的速度較快,也就是説詞頻的影響較小;而較大的 k1 值則意味着詞頻達到飽和的速度較慢,詞頻的影響更大。
- b 參數(字段長度歸一化參數)的取值範圍是從 0 到 1。默認值是 0.75。當 b 設置為 0 時,表示不考慮文檔長度對評分的影響;當 b 設置為 1 時,則完全按照文檔長度進行歸一化處理。
k1 和 b 是字段級別的參數。
qbit 理解:k1 越大,詞頻的影響力越大;b 越大,有效信息的影響力越大。
即:
k1 越小 → 越關注“是否出現”,避免高頻詞刷分
b 越小 → 越忽略文檔長度,長文檔不會被過度懲罰
{
"settings": {
"index": {
"similarity": {
"default": { // 調整索引的默認相似度
"type": "BM25",
"k1": 0.9,
"b": 0.65
},
"bm25_01k1_0b": { // 自定義其它名字的相似度
"type": "BM25",
"k1": 0.1,
"b": 0
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "keyword",
"doc_values": false,
"similarity": "bm25_01k1_0b", // 這裏如果不寫明,會使用 default相似度 0.9/0.65
"fields": {
"text": {
"type": "text",
"analyzer": "ik_smart",
"similarity": "bm25_01k1_0b" // 這裏如果不寫明,會使用 default相似度 0.9/0.65
}
}
}
}
}
}
設置索引級別的默認相似度
- 官方文檔:https://www.elastic.co/docs/reference/elasticsearch/index-set...
- 更改索引的默認相似度,只需要關閉索引,更改相似度算法後,重新打開索引即可,不需要重建索引
本文出自 qbit snap