学习极客时间《Elasticsearch 核心技术与实战》课程之后的记录。
搜索是用户和搜索引擎的对话,用户关心的是搜索引擎结果的相关性:
- 是否可以找到所有相关的内容;
- 有多少不相关的内容被返回了;
- 文档的打分是否合理;
- 结合业务需求,平衡结果排名。
衡量相关性:
-
Precision(查准率):尽可能返回较少无关文档;
-
Recall(查全率):尽量返回较多相关文档;
-
Ranking:能否按照相关度排序。
绿色代表应该被搜索到的结果,黄色代表不应该被搜索到的结果。
Precision = True Postive / (True and False Positives)
Recall = True Postive / (True Positives + False Negtives)
相关性算分
- 搜索的相关性算分,描述了一个文档和查询语句的匹配程度。Elasticsearch会对每个匹配查询条件的结果进行算分_score;
- 打分的本质是排序,需要把最符合用户需求的文档排在前面。ES5之前,默认的相关性算分采用TF-IDF,现在采用BM 25。
词频TF
Term Frequency:检索词在一篇文档中出现的频率,计算公式:
TF = 检索词出现的次数 / 文档的总字数。
度量一条查询和结果文档相关性的简单方法:简单将搜索中的每一个词的TF进行相加。比如说搜索"区块链的应用",相关性 = TF(区块链) + TF(的) + TF(应用)。
Stop word:有些词出现再多次也无需计算到相关性中。比如,的”在文档中出现了很多次,但是对贡献相关度几乎没有用处,不应该考虑他们的TF。
逆文档频率
DF:检索词在所有文档中出现的频率。
Inverse Document Frequency:简单说 = log(全部文档数/检索词出现过得文档总数);
假设搜索"区块链的应用",“区块链”在相对较少的文档中出现;“应用”在相对比较多的文档中出现;“Stop Word”在大量文档中出现。所以“区块链”这个词比“应用”这个词共享度更高。

TF-IDF本质就是将TF求和变成了加权求和:
TF(区块链)* IDF(区块链) + IDF(的)* TF(的) + TF(应用)* IDF(应用)
TF-IDF的概念
TF-IDF被公认为是信息检索领域最重要的发明;
除了在信息检索,在文献分类和其他相关领域有这非常广泛的应用;
IDF的概念,最早是剑桥大学的“斯巴克 琼斯”提出:
1972年-“关键词特殊性的统计解释和它在文献检索中的应用”;但是没有理论上解释IDF应该使用log(全部文档数/检索词出现过得文档总数),而不是其他函数。也没有做进一步的研究。
现代搜索引擎,对TF-IDF进行了大量细微的优化。
-
Lucene的TF-IDF评分公式:
BM25

控制算分
Boosting 是控制相关度的一种手段,可以对索引、字段、或查询条件使用。
参数boost的含义:
- 当boost > 1 时,打分的相关度相对性提升;
- 当0< boost < 1时,打分的权重相对性降低;
- 当boost < 0时,贡献负分。
网友评论