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。
示例切换评分算法:
PUT /my-index/_settings
{
"index": {
"similarity": {
"default": {
"type": "classic"
}
}
}
}
`
classic 即为 TF/IDF 算法。
深入理解 TF/IDF 与 BM25,有助于根据具体场景优化搜索相关性和用户体验。
相关内容
- 定义与用途 本章介绍 Elasticsearch 的定义、核心功能与适用场景,帮助读者理解它为何成为现代搜索与日志分析的首选解决方案。
- 使用场景 本章总结 Elasticsearch 在全文搜索、日志分析、监控告警、推荐系统等领域的典型应用场景,助力理解其强大用途。
- 核心概念简介 本章概览 Elasticsearch 的核心构成,包括索引、文档、映射、节点、集群等关键概念,为后续使用和架构设计打下基础。
- 本地安装 本章介绍如何在本地环境中安装 Elasticsearch,适配 Windows、macOS 和 Linux 系统,便于开发测试与入门学习。
- Docker 安装 本章讲解如何通过 Docker 安装和运行 Elasticsearch,适合开发者快速搭建测试环境并集成至容器化工作流中。
- 与 Kibana 一起部署 本章介绍如何将 Elasticsearch 与 Kibana 一起部署,使用 Docker Compose 快速构建可视化分析平台,适合开发与测试环境使用。