主题
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,有助于根据具体场景优化搜索相关性和用户体验。