1.es中相似度计算公式-BM25

6.x版本和7.x 版本的es的默认得分计算方式都是BM25。

假如用户给定一个输入QQQ,其包含了关键字q1,q2,......qn,q_1,q_2,... ... q_n,q1​,q2​,......qn​,那么该输入QQQ与文档DDD的BM25得分为:

score⁡(D,Q)=∑i=1nIDF⁡(qi)⋅f(qi,D)⋅(k1+1)f(qi,D)+k1⋅(1−b+b⋅∣D∣avgdl⁡)\operatorname{score}(D, Q)=\sum_{i=1}^{n} \operatorname{IDF}\left(q_{i}\right) \cdot \frac{f\left(q_{i}, D\right) \cdot\left(k_{1}+1\right)}{f\left(q_{i}, D\right)+k_{1} \cdot\left(1-b+b \cdot \frac{|D|}{\operatorname{avgdl}}\right)} score(D,Q)=i=1∑n​IDF(qi​)⋅f(qi​,D)+k1​⋅(1−b+b⋅avgdl∣D∣​)f(qi​,D)⋅(k1​+1)​

参数说明如下:

  • score(D,Q)score(D,Q)score(D,Q) : 表示用户输入Q与文档D的相关性得分
  • IDF(qi)IDF(q_i)IDF(qi​) : 关键字qiq_iqi​的逆文档频值,IDF⁡(qi)=ln⁡(N−n(qi)+0.5n(qi)+0.5+1)\operatorname{IDF}\left(q_{i}\right)=\ln \left(\frac{N-n\left(q_{i}\right)+0.5}{n\left(q_{i}\right)+0.5}+1\right)IDF(qi​)=ln(n(qi​)+0.5N−n(qi​)+0.5​+1)
  • f(qi,D)f(q_i,D)f(qi​,D) : 关键词qiq_iqi​在文档D中的频数
  • N :全部文档的个数
  • n(qi)n(q_i)n(qi​) : 包含关键字qiq_iqi​所有文档的个数
  • avgdlavgdlavgdl:文档平均token个数,全部文档包含的token个数总和除以总文档数
  • ∣D∣|D|∣D∣:文档D包含的token的个数
  • k1k1k1:超参数,该值越小 大词频的词对整体得分的贡献就会越会被抑制,默认值是1.2
  • b:超参数,该值越大,包含相同多关键词qiq_iqi​情况下,文档得分越短得分越高,若该值为0,b的默认值是0.75

为了了解一下超参数k1的对最终得分的影响,假定b=0,然后观察一下公式:f(qi,D)⋅(k1+1)f(qi,D)+k1⋅(1−b+b⋅∣D∣avgdl⁡)\frac{f\left(q_{i}, D\right) \cdot\left(k_{1}+1\right)}{f\left(q_{i}, D\right)+k_{1} \cdot\left(1-b+b \cdot \frac{|D|}{\operatorname{avgdl}}\right)}f(qi​,D)+k1​⋅(1−b+b⋅avgdl∣D∣​)f(qi​,D)⋅(k1​+1)​值的变化

即f(qi,D)⋅(k1+1)f(qi,D)+k1\frac{f\left(q_{i}, D\right) \cdot\left(k_{1}+1\right)}{f\left(q_{i}, D\right)+k_{1} }f(qi​,D)+k1​f(qi​,D)⋅(k1​+1)​值的变化:

从上图可以看出 ,k1值越小,随着关键词qiq_iqi​的词频f(qi,D)f(q_i,D)f(qi​,D)增加,对于f(qi,D)⋅(k1+1)f(qi,D)+k1\frac{f\left(q_{i}, D\right) \cdot\left(k_{1}+1\right)}{f\left(q_{i}, D\right)+k_{1} }f(qi​,D)+k1​f(qi​,D)⋅(k1​+1)​的增幅越小。

2.查看es的得分计算过程

当使用es进全文查询时,es会计算出每一个返回文档的相关得分“_score”。

在查询的时候,通过设置“ “explain”: true ”来让给出相关得分计算的过程解释。

举个例子:首先在es中创建一个索引,并写入数据,用户输入“PPT小工具”并开启相关得分解释设置

POST nlu-pro-44-94/_search
{"explain": true,"_source":["similary_query"],"query": {"match": {"similary_query": "PPT小工具"}}
}

es返回的结果是:

由于7.x 版本的es默认相关得分计算公式是BM25,score⁡(D,Q)=∑i=1nIDF⁡(qi)⋅f(qi,D)⋅(k1+1)f(qi,D)+k1⋅(1−b+b⋅∣D∣avgdl⁡)\operatorname{score}(D, Q)=\sum_{i=1}^{n} \operatorname{IDF}\left(q_{i}\right) \cdot \frac{f\left(q_{i}, D\right) \cdot\left(k_{1}+1\right)}{f\left(q_{i}, D\right)+k_{1} \cdot\left(1-b+b \cdot \frac{|D|}{\operatorname{avgdl}}\right)}score(D,Q)=∑i=1n​IDF(qi​)⋅f(qi​,D)+k1​⋅(1−b+b⋅avgdl∣D∣​)f(qi​,D)⋅(k1​+1)​

下面具体来看一下"_explanation"部分的内容。

"_explanation"部分也是基于上述公式进行计算的,首先找到用户输入与文档的所有匹配token,然后计算每一个匹配token的得分,然后再求和。

从上述图中可以看出,关键词有三个“ppt”,“小”,“助手”,将该三个关键词的得分求和就可以得到最终得分。

下面看一下某一个关键词的得分是如何计算的,以关键词“助手“为例。首先先点开其下面的字段”details“

从上述的过程中可以看出,es相关性得分计算是按照BM25公式计算来的。


参考资料:

  • 干货 | 一步步拆解 Elasticsearch BM25 模型评分细节 - 云+社区 - 腾讯云 (tencent.com)
  • similarity | Elasticsearch Guide [6.8] | Elastic-es6.8 中有哪些内置的相似度计算的模块
  • 可插拔的相似度算法 | Elasticsearch: 权威指南 | Elastic --es2.x 中关于OKapi BM25使用到的公式说明
  • Okapi BM25 - Wikipedia – 维基百科对于BM25公式的介绍

你知道es是如何计算相似度得分的吗?相关推荐

  1. elasticsearch es explain 用法,分析得分 score 情况

    参考链接:官方文档 . 有些情况下用 es 搜索不符合自己的预期,可以用 explain 来分析具体的得分情况. 用法: GET online_exercise/_doc/_search {" ...

  2. 字符串相似度匹配算法python_算法字符串相似度得分/哈希

    有趣的问题.我在这一领域的经验有限,但由于Levenshtein距离满足三角形不等式,我认为必须有一种方法来计算到原点的某种绝对距离,以便在不与整个数据库中的所有条目进行直接比较的情况下找到彼此邻近的 ...

  3. Android App性能流畅度测评分析可以用到工具

    1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字 ...

  4. Android App性能评测分析-流畅度篇

    1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字 ...

  5. Lucene默认的打分算法——ES默认

    改变Lucene的打分模型 随着Apache Lucene 4.0版本在2012年的发布,这款伟大的全文检索工具包终于允许用户修改默认的基于TF/IDF原理的打分算法.Lucene API变得更加容易 ...

  6. 【Elasticsearch】Elasticsearch中的相似度评分介绍

    1.概述 转载:Elasticsearch中的相似度评分介绍 本文要点 相关性得分是一个搜索引擎的核心,了解它的工作原理对创建一个好的搜索引擎至关重要. Elasticsearch 使用了两种相似度评 ...

  7. 一种中文字符串相似度算法

    一种中文字符串相似度算法 概要 标记距离相似算法 扩展 概要 给定一个字符串a,在字符串列表B中找到与a最相似字符串b,或者让列表B按与a相似度排序.本文提出一种算法来较好的解决这个问题.并且该算法很 ...

  8. 第六章 ES高级搜索—聚集查询(上)

    聚集查询(Aggregation)提供了针对多条文档的统计运算功能,它不是针对文 档本身内容的检索,而是要将它们聚合到一起运算某些方面的特征值. 聚集查询与SQL语言中的聚集函数非常像,聚集函数在El ...

  9. (十)ES 入门教程

    本文为学习笔记,主要用于记录本人学习过程.部分内容为转载!!!!. 1. ElasticSearch介绍 1.1 介绍 官方网址:https://www.elastic.co/cn/products/ ...

最新文章

  1. Python回顾与整理12:执行环境
  2. php字符串加密解密源码,PHP中加密解密字符串函数源代码
  3. python用什么编译器较好-python用什么编译器
  4. 中object转为list集合_java基础集合小结
  5. Nginx 服务优化与防盗链
  6. Javascript 多线程编程​的前世今生
  7. python不能分配给操作员_Python:无法分配给li
  8. http和php怎么交互,实现http与workerman的交互demo
  9. 800多名各国院士热忱参与 第三届“科学探索奖”名单公布
  10. 管理感悟:没有活跃用户量,谈广告都是开玩笑
  11. 笔记本电池不充电了 无法充电 如何激活
  12. 论文分享(2)MASAD: A Large-Scale Dataset for Multimodal Aspect-Based Sentiment Analysis
  13. 【听课笔记】复旦大学遗传学_05染色体畸变
  14. 【CityHunter】Unity3D设计AR探索模式
  15. html按钮 字 颜色代码,html中按钮的字体颜色怎么设置?
  16. 喜马拉雅下载器打赏页面
  17. UI设计师未来的发展趋势如何?前景好吗?
  18. 农村环境保护之平时作业三
  19. yts1999 T2 容斥原理
  20. 教你用 python 画圣诞树

热门文章

  1. 灵性图书馆:好书推荐-《灵魂出体》
  2. 【统计分析】偏度与峰度概念
  3. 使用 Cocos2d-x 和粒子编辑器实现“天天爱消除”场景特效
  4. linux查找当前目录及其子目录下的文件
  5. C语言 定时器和计时器
  6. DNS服务,SSL原理
  7. 计算机大三名企实习怎么找?
  8. 四旋翼无人机建模与实现(二)
  9. 【Visual-Hull + Bregman】基于Visual-Hull + Bregman算法的三维重建算法matlab仿真
  10. python qq机器人开发 利用Python读取QQ消息