ElasticSearch中的BM25算法实现原理及应用分析

news2024/11/26 4:37:53

文章目录

  • 一、引言
  • 二、BM25算法实现原理
    • BM25算法的实现原理
      • 1. 词频(TF):
      • 2. 逆文档频率(IDF):
      • 3. 长度归一化:
      • 4. BM25评分公式:
    • BM25算法示例
  • 三、BM25算法在ElasticSearch中的应用分析
    • 3.1 文档搜索
    • 3.2 参数调整
    • 3.3 混合搜索
  • 四、结论

在这里插入图片描述

一、引言

ElasticSearch是一个基于Lucene构建的开源搜索引擎,广泛应用于各种搜索场景中。为了提供高质量的搜索结果,ElasticSearch内部集成了多种信息检索算法,其中BM25算法是ElasticSearch
5.0及以后版本默认的相似度算法。BM25算法是一种基于词频(TF)和逆文档频率(IDF)的评分模型,用于评估查询与文档之间的相关性。本文将详细分析BM25算法的实现原理及其在ElasticSearch中的应用。

二、BM25算法实现原理

BM25算法的实现原理

BM25算法
BM25算法是一种在信息检索中广泛使用的排名函数,用于评估文档与用户查询之间的相关性。该算法是TF-IDF(词频-逆文档频率)的改进版本,旨在解决TF-IDF在处理某些问题时的不足。BM25算法的实现原理主要包括以下几个方面:

1. 词频(TF):

  1. 基本定义
    • 词频(TF)指的是在给定的文档d中,词项t出现的次数。
    • BM25调整:BM25对传统的TF计算方法进行了调整,引入了饱和度和长度归一化,以防止长文档由于包含更多词项而获得不公平的高评分。
  2. 饱和处理
    • 为了避免词项频率过高时产生过大的影响,BM25对TF进行了饱和处理。这通常通过一个非线性函数实现,使得词频的增长在达到一定阈值后变得平缓。
  3. 计算公式(在BM25公式中):
    • 词频f(qi, D)直接作为计算的一部分,但它会被一个饱和函数调整。具体来说,TF部分在BM25公式中通常表示为:
      f r a c f ( q i , D ) c d o t ( k _ 1 + 1 ) f ( q i , D ) + k _ 1 c d o t ( 1 − b + b c d o t f r a c ∣ D ∣ t e x t a v g d l ) \\frac{f(qi, D) \\cdot (k\_1 + 1)}{f(qi, D) + k\_1 \\cdot (1 - b + b \\cdot \\frac{|D|}{\\text{avgdl}})} fracf(qi,D)cdot(k_1+1)f(qi,D)+k_1cdot(1b+bcdotfracDtextavgdl)
      • 其中, ( f ( q i , D ) ) (f(qi, D)) (f(qi,D))是词项(qi)在文档(D)中的出现次数。
      • ( k _ 1 ) (k\_1) (k_1)是一个可调参数,通常设置在1.2到2.0之间,用于控制词频的饱和程度。
      • ( b ) (b) (b)是另一个可调参数,通常设置在0.0到0.75之间,用于控制文档长度对得分的影响。
      • ( ∣ D ∣ ) (|D|) (D)是文档 ( D ) (D) (D)的长度(即词项数量)。
      • t e x t a v g d l text{avgdl} textavgdl 是文档集合中文档的平均长度。
  4. 特点
    • 当词项在文档中出现次数很少时,TF的增加会显著提高该词项在文档中的权重。
    • 然而,随着词项出现次数的增加,TF的增加对权重的贡献会逐渐减小,从而实现饱和效果。
  5. 与TF-IDF中的TF比较
    • 在传统的TF-IDF中,词频通常是直接计算并使用的,没有饱和处理。
    • 而在BM25中,词频经过了一个非线性函数的调整,使得文档中的高频词项不会获得过高的权重。

2. 逆文档频率(IDF):

定义:衡量词项在整个文档集合中稀有程度的指标。
计算方法:通常是基于log函数来计算,即

I D F ( t ) = l o g ( N / d f ( t ) ) IDF(t) = log(N / df(t)) IDF(t)=log(N/df(t))

,其中 N N N是文档总数, d f ( t ) df(t) df(t)是包含词项t的文档数。

3. 长度归一化:

引入原因:考虑到文档长度对评分的影响,BM25引入了长度归一化因子。
实现方式:通过计算文档长度与平均文档长度的比值,并将其作为一个因子加入到评分公式中。

4. BM25评分公式:

公式:

S c o r e ( D , Q ) = ∑ ( I D F ( q i ) ∗ f ( q i , D ) ∗ ( k 1 + 1 ) ) / ( f ( q i , D ) + k 1 ∗ ( 1 − b + b ∗ ∣ D ∣ / a v g d l ) ) Score(D, Q) = ∑(IDF(qi) * f(qi, D) * (k1 + 1)) / (f(qi, D) + k1 * (1 - b + b * |D| / avgdl)) Score(D,Q)=(IDF(qi)f(qi,D)(k1+1))/(f(qi,D)+k1(1b+bD∣/avgdl))

  • D D D:文档
  • Q Q Q:查询,由词项qi组成
  • q i qi qi:查询中的词项
  • f ( q i , D ) f(qi, D) f(qi,D):词项qi在文档D中的词频
  • ∣ D ∣ |D| D:文档D的长度
  • a v g d l avgdl avgdl:文档集合的平均文档长度
  • k 1 k1 k1 b b b:可调节的参数,通常k1取1.2到2.0之间的值,b取0.0到1.0之间的值

 BM25算法示例

BM25算法示例

假设我们有以下简单的场景:

1. 文档集合:包含两篇文档D1和D2。

  • D1: “The cat sat on the mat.”
  • D2: “The dog chased the cat around the house.”
    2. 查询:Q = “cat”

3. 计算步骤:
TF计算:

  • D1中"cat"的TF = 1
  • D2中"cat"的TF = 1

IDF计算 (假设只有两篇文档):

I D F ( " c a t " ) = l o g ( 2 / 2 ) = 0 IDF("cat") = log(2 / 2) = 0 IDF("cat")=log(2/2)=0

(因为"cat"在两篇文档中都出现了)

注意:在实际应用中,由于文档集合通常很大,IDF值通常不会是0。

长度归一化 (假设|D1| = 5, |D2| = 7, avgdl = 6):

  • D1的长度归一化因子 = 1(因为|D1|与avgdl接近)
  • D2的长度归一化因子会稍小一些(因为|D2|略大于avgdl)
  • BM25评分(由于IDF为0,这里的评分仅作为示例):

S c o r e ( D 1 , Q ) = ( 0 ∗ 1 ∗ ( k 1 + 1 ) ) / ( 1 + k 1 ∗ ( 1 − b + b ∗ 5 / 6 ) ) Score(D1, Q) = (0 * 1 * (k1 + 1)) / (1 + k1 * (1 - b + b * 5 / 6)) Score(D1,Q)=(01(k1+1))/(1+k1(1b+b5/6))

S c o r e ( D 2 , Q ) = ( 0 ∗ 1 ∗ ( k 1 + 1 ) ) / ( 1 + k 1 ∗ ( 1 − b + b ∗ 7 / 6 ) ) Score(D2, Q) = (0 * 1 * (k1 + 1)) / (1 + k1 * (1 - b + b * 7 / 6)) Score(D2,Q)=(01(k1+1))/(1+k1(1b+b7/6))

注意:由于IDF为0,这里的评分都为0。在实际应用中,由于IDF不会是0,所以评分会有所不同。

4.结果 :由于评分相同(但实际上不会是0),我们可以根据其他因素(如文档长度、其他词项的评分等)来进一步排序文档。

请注意,这个示例是为了说明BM25算法的计算过程而简化的。在实际应用中,文档集合会更大,IDF值不会是0,并且会考虑查询中的多个词项。

BM25算法在ElasticSearch中的应用分析

三、BM25算法在ElasticSearch中的应用分析

3.1 文档搜索

ElasticSearch使用BM25算法来计算查询与文档的相关性评分,并根据评分对搜索结果进行排序。用户输入的查询会被分词,并与索引中的文档进行匹配,最终返回相关性最高的文档列表。

在文档搜索过程中,用户输入的查询首先会被Elasticsearch的分词器处理成多个查询词项,然后这些词项与索引中的文档进行匹配。BM25算法会根据每个词项在文档中出现的频率(TF)和在整个文档集合中的稀有程度(IDF)来计算每个词项对文档得分的贡献。此外,BM25算法还包括两个可调节的参数k1和b,分别用来控制词频的饱和度和文档长度对得分的影响。

3.2 参数调整

ElasticSearch允许用户根据实际需求调整BM25算法中的参数(如k1,
b),以优化搜索结果的准确性和相关性。通过调整这些参数,可以控制词频、文档长度等因素对评分的影响,从而适应不同的搜索场景和数据集。

3.3 混合搜索

除了使用BM25算法进行文本搜索外,ElasticSearch还支持与其他算法(如向量模型、基于学习的模型等)进行混合搜索。通过结合不同算法的优点,可以进一步提高搜索效率和准确性,满足更复杂的搜索需求。

ElasticSearch

四、结论

ElasticSearch中的BM25算法是一种基于词频和逆文档频率的评分模型,通过计算查询与文档的相关性评分来提供高质量的搜索结果。其实现原理简单而有效,通过调整参数和与其他算法进行混合搜索,可以进一步优化搜索结果的准确性和相关性。在实际应用中,ElasticSearch的BM25算法已经得到了广泛的应用和验证,为用户提供了高效、准确的搜索体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1872063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

时序分析基本概念介绍——min period 最小时钟周期

文章目录 前言一、什么是 min period?二、为什么检查 min period?三、如何设置 min period?四、如何检查 min period?五、如何修复 min period?总结 前言 我们在实际设计中可能会碰到这种情况,如果我们的m…

投标书制作

一、投标书的基本要求l . 帮助与你的标书读者沟通。从这个角度上来讲,标书是一篇针对用户需求的论文,逻辑结构和语言一定要清晰、可读。考虑到评标专家一般都具有较好的学术经验,其中很多还是教授、博导,投标的语言要针对读者的阅…

Redis安装与使用

目录 1、介绍 1、redis的特点: 2、缓存 2、安装Redis 1、安装单机版redis 2、redis-cli命令参数 3、清空数据库的两种方式和作用域: 4、redis的增删查改命令 5、redis的查看所有分类命令 6、redis过期时间与控制键的行为 7、redis的相关工具 1、介绍 r…

第24篇 滑动开关控制LED<二>

Q&#xff1a;如何使用Intel FPGA Monitor Program创建滑动开关控制LED工程并运行呢&#xff1f; A&#xff1a;创建工程的基本过程与前面的Intel FPGA Monitor Program的使用<三>一样&#xff0c;不同的地方是&#xff0c;本实验工程用到了开发板的外设硬件LED和SW&…

EXCEL快速填充空白内容

** EXCEL快速填充空白内容 ** 1.全选所有需要填充的内容&#xff0c;按住电脑的F5或者CTRLG点击定位 2.可以看到空白处被自动选定&#xff0c;之后按电脑和⬆&#xff0c;最后CTRLenter 可以看到空白处已经被填充。

第4章 客户端-客户端案例分析

1 Redis内存陡增 1.1.现象 服务端现象&#xff1a;Redis主节点内存陡增&#xff0c;几乎用满maxmemory&#xff0c;而从节点内存并没有变化&#xff08;正常情况下主从节点内存使用量基本相同&#xff09;。 客户端现象&#xff1a;客户端产生了OOM异常&#xff0c;也就是Redis…

擎耀解码汽车大灯照明系统电动调节步进电机位置反馈的解决方案

在现代汽车设计中&#xff0c;智能照明系统扮演着至关重要的角色。其中&#xff0c;汽车大灯的电动调节功能不仅提高了夜间行车的安全性&#xff0c;还增强了车辆的科技感和便利性。然而&#xff0c;要实现精准的大灯角度调节&#xff0c;步进电机的位置反馈机制尤为关键。擎耀…

Java学习 - Redis-Cluster

为什么需要集群 为了高的处理速度 单机redis&#xff0c;官网宣传处理速度为10万命令/秒如果业务需要更高的处理速度&#xff0c;则需要使用集群 为了存储大量数据 一般机器的内存为16-256G如果想要存储更大量的数据&#xff0c;则需要使用集群 分布式之数据分区 因为数据需…

不要小看3D元素,融入大屏后,立马带来5个提升。

将3D元素引入可视化大屏可以带来多方面的好处&#xff0c;包括但不限于以下几点&#xff1a; 1. 更生动的展示效果&#xff1a; 通过引入3D元素&#xff0c;可视化大屏可以呈现更加生动、立体的展示效果&#xff0c;使得数据和信息更加直观、形象化&#xff0c;吸引观众的注意…

餐饮冷库安全守护神:可燃气体报警器检定的科学性与有效性

随着餐饮业的快速发展&#xff0c;冷库成为储存食材、保证食品质量的重要场所。 然而&#xff0c;由于冷库环境的特殊性&#xff0c;如密封性强、温度低、湿度大等&#xff0c;一旦冷库内发生可燃气体泄露&#xff0c;后果将不堪设想。因此&#xff0c;在餐饮冷库中安装并合理…

解决RuntimeError: Unsupported image type, must be 8bit gray or RGB image.

今天在使用Opencv进行人脸识别项目时发现了一个问题&#xff0c;一直报这个错误RuntimeError: Unsupported image type, must be 8bit gray or RGB image.查了一下资料也是解决了&#xff0c;这样给大家分享一下 解决方案 Numpy 有一个主要版本更新&#xff0c;与 dlib 不兼容。…

Kubernetes实现应用零宕机

Kubernetes实现应用零宕机 容器镜像位置Pod数量(应用程序实例)Pod中断预算部署策略自动回滚部署Probe探针初始启动时间延迟优雅终止期GrancePeriodSecondsPod反亲和力资源自动缩放Autoscaling总结 容器已经彻底改变了应用托管格局&#xff01;它带来了许多需要复杂设置的设施。…

嵌入式Linux系统编程 — 4.2 sizeof 和 strlen 的作用和区别

目录 1 strlen函数 2 sizeof函数 3 sizeof 和 strlen 的作用和区别&#xff08;面试必问&#xff09; 3.1 作用 3.2 主要区别 1 strlen函数 strlen() 函数是 C 语言标准库中的一个函数&#xff0c;用于计算字符串的长度。它不包括字符串末尾的空字符&#xff08;\0&#…

原、反、补码之间的相互转换以及计算机硬件实现有符号数、无符号数、定点小数、定点整数的加减法运算

目录 原、反、补码之间的相互转换 无符号整数的加减运算 无符号整数的加法运算 无符号整数的减法运算 有符号整数的加减运算 有符号整数补码的加法运算 有符号整数补码的减法运算 定点小数的加减运算 定点小数补码的加法运算 定点小数补码的减法运算 定点小数VS定点整…

CSS|05 继承性与优先级

继承性 一、继承性的特点&#xff1a; 1.外层元素身上的样式会被内层元素所继承 2.如果内层元素与外层元素身上的演示相同时&#xff0c;外层元素的样式会被内层元素所覆盖 二、关于继承性的问题 是不是所有样式都能被继承&#xff1f; 答&#xff1a;并不是所有样式能被继承…

1991java Web体检预约管理系统eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP体检预约管理系统是一套完善的web设计系统&#xff0c;对理解JSP java 编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0&#xff0c;使用…

Unity3D Text使用超链接跳转事件

系列文章目录 Unity工具 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、第一种使用TextMeshPro加入超链接&#x1f449;二、继承Text组件,重载OnPopulateMesh方法&#x1f449;三.壁纸分享&#x1f449;总结 &#x1f449;前言 有时候会用到跳转的问题,所以添加一…

详细分析Oracle修改默认的时间格式(四种方式)

目录 前言1. 会话级别2. 系统级别3. 环境配置4. 函数格式化5. 总结 前言 默认的日期和时间格式由参数NLS_DATE_FORMAT控制 如果需要修改默认的时间格式&#xff0c;可以通过修改会话级别或系统级别的参数来实现 1. 会话级别 在当前会话中设置日期格式&#xff0c;这只会影响…

【UE开发】游戏库存UI系统Demo

1.项目介绍 1.描述&#xff1a;一种用于存储记录玩家物品的游戏内可视化操作系统。 2.演示&#xff1a;https://www.bilibili.com/video/BV1f53neVEfW/?vd_source50dea901fd12253f417c48b937975b0d 3.大纲&#xff1a; 4.样式&#xff1a; 2.W_Inventory_Main_01&#xff08;…

云效BizDevOps上手亲测

云效BizDevOps上手亲测 什么是云效项目协作Projex配置2023业务空间原始诉求字段原始诉求工作流创建原始诉求配置2023产品空间创建主题业务原始诉求关联主题配置2023研发空间新建需求需求关联主题 与传统区别云效开发流程传统开发流程云效BizDevOps 操作体验 什么是云效 在说到…