相关性和相关性算分
- 相关性:Relevance
- 搜索的相关性算分,描述了一个文档和查询语句匹配的程度。ES会对每个匹配查询条件的结果进行算分_score
- 打分的本质是排序,需要把最符合用户需求的文档排在前面。ES 5之前,默认的相关性算分采用TF-IDF,现在采用BM 25
| 词(Term) | 文档(Doc Id) |
|---|---|
| 区块链 | 1,2,3 |
| 的 | 2,3,4,5,6,7,8,9,10,12,13,15,18,19,20 |
| 应用 | 2,3,8,9,10,13,15 |
词频 TF
- Term Frequency:检索词在一篇文档中出现的频率
- 检索词出现的次数除以文档的总字数
- 度量一条查询和结果文档相关性的简单方法:简单将搜索中每一个词的TF进行相加
- TF(区块链) + TF(的) +TF(应用)
- Stop Word
- “的”在文档出现了很多次,但是对贡献度几乎没用处,不应该考虑他们的TF
逆文档频率IDF
- DF:检索词在所有文档中出现的频率
- “区块链”在相对比较少的文档中出现
- “应用”在相对比较多的文档中出现
- “Stop Word”在大量的文档中出现
- Inverse Document Frequency:简单说 = log(全部文档数/检索词出现的文档总数)
- TF-IDF本质上就是将TF求和变成了加权求和
| 出现的文档数 | 总文档数 | IDF | |
|---|---|---|---|
| 区块链 | 200万 | 10亿 | log(500)=8.96 |
| 的 | 10亿 | 10亿 | log(1)=0 |
| 应用 | 5亿 | 10亿 | log(2)=1 |
TF-IDF的概念
- TF-IDF被公认为是信息检索领域最重要的发明
- 除了在信息检索,在文献分类和其他相关性领域有这非常广泛的应用
- IDF的概念,最早是剑桥大学的“斯巴克.琼斯”提出
- 1972年:“关键词特殊性的统计解释和它在文献检索中的应用”
- 但是没有从理论上解释IDF应该是用log(全部文档数/检索词出现过的文档总数),而不是其他函数,也没有做进一步的研究
- 1970,1980年代萨尔顿和罗宾逊,进行了进一步的证明和研究,并用香农信息论做了证明
- 现代索引引擎,对TF-IDF进行了大量细微的优化
Lucene中的TF-IDF评分公式

TF-IDF评分公式
BM 25
- 从ES 5开始,默认算法改为BM 25
- 和经典的TF-IDF相比,当TF无限增加时,BM 25算分会趋于一个数值

BM 25算分
定制Similarity

定制similarity

BM 25公式
- K默认值是1.2,数值越小,饱和度越高,b默认值是0.75(取值范围0~1),0代表禁止Normalization
通过Explain API查看TF-IDF

算分查找
- 4篇文档+4个Term查询
- 思考一下
- 查询中的TF和IDF?
- 结果如何排序?
- 文档长短 / TF / IDF 对相关度算分的影响
Boosting Relevance
- Boosting是控制相关度的一种手段
- 索引,字段或查询子条件
- 参数boost的含义
- 当boost > 1时,打分的相关度相对性提升
- 当0 < boost < 1时,打分的权重相对性降低
- 没boost < 0,贡献负分

复合查询:Boosting Query
小结
- 什么是相关性 & 相关性算分介绍
- TF-IDF /BM25
- 在Elasticsearch中定制相关度算法的参数
- ES中可以对索引,字段分别设置Boosting参数