簡(jiǎn)介
在Elasticsearch中菩收,相關(guān)性算分
描述了一個(gè)文檔和查詢語句的匹配程度。Elasticsearch會(huì)對(duì)每個(gè)匹配查詢條件的結(jié)果進(jìn)行相關(guān)性分?jǐn)?shù)的計(jì)算鬓椭,即:_score颠猴。
算分的本質(zhì)是為了排序,需要把最符合用戶需求的文檔排列在最前面小染。在Elasticsearch5.0以前翘瓮,默認(rèn)的相關(guān)性算分為TF-IDF。5.0及之后的版本采用的是BM25氧映。
詞頻 - TF
詞頻春畔,英文縮寫為TF,英文全寫為Term Frequency岛都。詞頻用于描述檢索詞
在一篇文檔中出現(xiàn)的頻率律姨。即:檢索詞出現(xiàn)的次數(shù)除以文檔的總字?jǐn)?shù)。
衡量一條查詢語句和結(jié)果文檔相關(guān)性的簡(jiǎn)單方法:簡(jiǎn)單地將搜索語句中的每一個(gè)詞的TF進(jìn)行相加臼疫。
例如择份,我的蘋果
,即為:TF(我) + TF(的) + TF(蘋果)烫堤。
停用詞荣赶,英文名為Stop Word,例如我的蘋果
中的的
在文檔中可能出現(xiàn)很多次鸽斟,但貢獻(xiàn)的相關(guān)度卻幾乎沒有用處拔创,因此不應(yīng)該考慮他們的詞頻。
逆文檔頻率 - IDF
相對(duì)于逆文檔頻率富蓄,我們先來說說文檔頻率剩燥。
文檔頻率,英文縮寫為DF立倍,英文全寫為Document Frequency灭红,用于檢索詞在所有文檔中出現(xiàn)的頻率。
-
蘋果
在相對(duì)較少的文檔中出現(xiàn) -
我
在相對(duì)較多的文檔中出現(xiàn) -
的
在大量的文檔中出現(xiàn)
逆文檔頻率口注,英文全寫為:Inverse Document Frequency变擒。簡(jiǎn)單說也就是:
log(全部文檔數(shù) / 檢索詞出現(xiàn)過的文檔總數(shù))。
TF-IDF
TF-IDF的本質(zhì)就是將TF求和
變成了加權(quán)求和
寝志。
TF(我) * IDF(我) + TF(的) * IDF(的) + TF(蘋果) * IDF(蘋果)娇斑。
出現(xiàn)的文檔數(shù) | 總文檔數(shù) | IDF | |
---|---|---|---|
我 | 5億 | 10億 | log(2) = 1 |
的 | 10億 | 10億 | log(1) = 0 |
蘋果 | 200萬 | 10億 | log(500) = 8.96 |
TF-IDF的概念
- 被公認(rèn)為信息檢索領(lǐng)域最重要的發(fā)明
- 除了在信息檢索領(lǐng)域策添,在文獻(xiàn)分類和其他相關(guān)領(lǐng)域都有著非常廣泛的應(yīng)用
- 關(guān)于其歷史及精確定義,參考維基百科的TF-IDF
- 現(xiàn)代搜索引擎毫缆,對(duì)TF-IDF進(jìn)行了大量細(xì)微的優(yōu)化
Lucene的TF-IDF相關(guān)性算分公式
BM25
- 從Elasticsearch5.0開始舰攒,默認(rèn)算法由TF-IDF改為BM25
- 和經(jīng)典的TF-IDF相比,當(dāng)TF無限增加時(shí)悔醋,BM25計(jì)算的相關(guān)性分?jǐn)?shù)會(huì)趨于一個(gè)固定數(shù)值。
Explain API
在查詢語句時(shí)兽叮,我們可通過explain查看TF-IDF芬骄。
# 創(chuàng)建索引
PUT testscore
{
"settings": {
"number_of_shards": 1
},
"mappings": {
"properties": {
"content": {
"type": "text"
}
}
}
}
# 寫入數(shù)據(jù)
PUT testscore/_bulk
{ "index": { "_id": 1 }}
{ "content":"we use Elasticsearch to power the search" }
{ "index": { "_id": 2 }}
{ "content":"we like elasticsearch" }
{ "index": { "_id": 3 }}
{ "content":"The scoring of documents is caculated by the scoring formula" }
{ "index": { "_id": 4 }}
{ "content":"you know, for search" }
# 查詢語句。
# 查詢的時(shí)間鹦聪,我們發(fā)現(xiàn)id為2的文檔卻排列在第一位账阻。
# 原因在于,相對(duì)于id為1的文檔泽本,id為2的文檔單詞數(shù)更少淘太。
POST /testscore/_search
{
"explain": true,
"query": {
"match": {
//"content":"you"
"content": "elasticsearch"
//"content":"the"
//"content": "the elasticsearch"
}
}
}
Boosting
Boosting是一種控制相關(guān)性分?jǐn)?shù)的手段,可作用于索引规丽、字段或查詢子條件蒲牧。
- 當(dāng)boost > 1時(shí),算分的相關(guān)度相關(guān)性會(huì)增加
- 當(dāng)0 < boost < 1時(shí)赌莺,算分的相關(guān)度相對(duì)性會(huì)降低
- 當(dāng)boost < 0時(shí)冰抢,貢獻(xiàn)負(fù)分
POST testscore/_search
{
"query": {
"boosting" : {
"positive" : {
"term" : {
"content" : "elasticsearch"
}
},
"negative" : {
"term" : {
"content" : "like"
}
},
"negative_boost" : 0.2
}
}
}
總結(jié)
- 什么是相關(guān)性,相關(guān)性分?jǐn)?shù)計(jì)算的簡(jiǎn)單介紹艘狭,主要為:TF-IDF / BM25
- 如何在Elasticsearch中定制相關(guān)度算法的參數(shù)
- Elasticsearch可以對(duì)索引挎扰、字段和查詢語句設(shè)置boosting參數(shù)