Elasticsearch 09 相關(guān)度

在 Elasticsearch 5.x 之前的版本所采用的是 tf-idf 來(lái)計(jì)算相關(guān)度, 而在 5.x 版本開(kāi)始所采用的是 bm25 來(lái)計(jì)算相關(guān)度。

bm25 是在 tf-idf 的基礎(chǔ)上增加了兩個(gè)參數(shù)來(lái)控制詞頻不會(huì)因?yàn)閿?shù)量的激增而飄高.

相關(guān)度是由TF-IDF和一組參數(shù)的組合運(yùn)算得出的結(jié)果,用于評(píng)估一個(gè)詞在文檔中的近似匹配程度。
TF(Term frequency): 詞頻, 用于評(píng)估在文檔中出現(xiàn)的次數(shù), 次數(shù)越高分值越高.
(關(guān)閉詞頻: index_options: docs)
IDF(Inverse document frequency): 倒排文檔頻率, 用于評(píng)估包含的文檔數(shù)量,數(shù)量越多的分值越低.
FLN(Field-length norm): 文本長(zhǎng)度歸一化(規(guī)范化), 用于評(píng)估不同字段的長(zhǎng)度, 字段文本越短分值越高.
(關(guān)閉字段長(zhǎng)度規(guī)范化: norms: {"enabled": false})

聯(lián)合參數(shù):
coord(The Coordination Factor): 用于配合bool復(fù)合條件查詢, 具體介紹不知道.
boost: 該參數(shù)用于調(diào)整字段權(quán)重.

?

Python版BM25實(shí)現(xiàn)

def bm25(doc_count, doc_freq):
    # idf: 逆向文檔頻率: 包含詞的文檔數(shù)量越多, 詞的權(quán)重就越低.
    idf = log(1 + (doc_count - doc_freq + 0.5) / (doc_freq + 0.5), e)
    idf = round(idf, 7)

    # tf: 詞頻: 詞在文檔中出現(xiàn)的次數(shù)越高, 分值越高.
    freq = 2.0
    # 新特性: 該參數(shù)控制詞頻飽和(非線性上升速度)的規(guī)范化
    k1 = 1.2
    # 新特性: 該參數(shù)的用意是抵消字段越短,權(quán)重越高;
    # 他將所有字段的長(zhǎng)度做一個(gè)平均長(zhǎng)度然后在做詞頻相關(guān)度計(jì)算。
    b = 0.75
    avg_field_length = 3.0
    field_length = 4.0
    tf = (freq * (k1 + 1)) / \
         (freq + k1 * (1 - b + b * field_length / avg_field_length))
    tf = round(tf, 7)

    # 相關(guān)度: 詞頻分值 * 權(quán)重分值
    score = round(tf * idf, 7)
    return tf, idf, score

?

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容