教程 elasticsearch tutorial

TF/IDF 与 BM25

Elasticsearch 在评分文档相关性时,主要依赖两种算法:经典的 TF/IDF(词频-逆文档频率)模型和改进的 BM25 模型。理解它们的原理有助于调优搜索效果。

1. TF/IDF 模型

  • TF(Term Frequency):词项在文档中的出现频率,频率越高相关性越强
  • IDF(Inverse Document Frequency):词项在整个文档库中的逆文档频率,出现越少权重越高
  • 计算公式(简化):

$$ \text{score}(q,d) = \sum_{t \in q} tf(t,d) \times idf(t) $$

  • 缺点:对文档长度敏感,长文档可能得分偏低

2. BM25 模型

BM25 是 TF/IDF 的改进版本,考虑了文档长度归一化和词频饱和效应。

计算公式

$$ \text{score}(q,d) = \sum_{t \in q} IDF(t) \cdot \frac{tf(t,d) \cdot (k_1 + 1)}{tf(t,d) + k_1 \cdot (1 - b + b \cdot \frac{|d|}{avgdl})} $$

  • ( k_1 ):词频调节参数(通常为 1.2)
  • ( b ):文档长度归一化参数(通常为 0.75)
  • ( |d| ):文档长度
  • ( avgdl ):平均文档长度

优势

  • 减少了长文档得分过低的问题
  • 更符合自然语言处理实际需求
  • 是 Elasticsearch 默认的评分算法

3. 实际应用

Elasticsearch 默认使用 BM25,但可以通过配置切换到 TF/IDF。

示例切换评分算法:

json
PUT /my-index/_settings
{
  "index": {
    "similarity": {
      "default": {
        "type": "classic"
      }
    }
  }
}

`

classic 即为 TF/IDF 算法。


深入理解 TF/IDF 与 BM25,有助于根据具体场景优化搜索相关性和用户体验。