当前位置: 首页 > news >正文

BM25(Best Matching 25)介绍与使用

BM25(Best Matching 25)是一种基于概率检索框架的改进算法,主要用于信息检索中的相关性评分。它通过引入词频饱和函数、文档长度归一化等机制,克服了传统TF-IDF算法的局限性。

一、BM25的核心原理

1. 改进TF-IDF的三大维度
  • 词频饱和控制:通过引入非线性函数限制高频词的影响,避免词频无限增长导致相关性偏差。

  • 文档长度归一化:对长文档进行惩罚,解决长文档因包含更多关键词而天然得分高的问题。

  • 参数可调节性:通过调节因子(如k1、b)灵活控制词频和文档长度的影响程度。

2. 核心设计思想
  • 词的重要性(IDF):基于逆文档频率衡量词的区分能力,包含该词的文档越多,其权重越低。

  • 词与文档的相关性(TF优化):对词频进行非线性变换,使高频词贡献趋于饱和。

  • 词与查询的相关性(查询词频):若查询较长,会额外考虑查询中的词频(qfi),但通常默认qfi=1。


二、BM25的计算公式

BM25的得分公式分为三个部分,最终得分为所有查询词项的加权和:
Score ( Q , D ) = ∑ i = 1 n IDF ( q i ) ⋅ f ( q i , D ) ⋅ ( k 1 + 1 ) f ( q i , D ) + k 1 ⋅ ( 1 − b + b ⋅ ∣ D ∣ avgdl ) \text{Score}(Q,D) = \sum_{i=1}^n \text{IDF}(q_i) \cdot \frac{f(q_i,D) \cdot (k_1+1)}{f(q_i,D) + k_1 \cdot \left(1 - b + b \cdot \frac{|D|}{\text{avgdl}}\right)} Score(Q,D)=i=1nIDF(qi)f(qi,D)+k1(1b+bavgdlD)f(qi,D)(k1+1)

  1. IDF(逆文档频率)
  • 公式:

    IDF ( q i ) = log ⁡ ( N − n ( q i ) + 0.5 n ( q i ) + 0.5 ) \text{IDF}(q_i) = \log \left( \frac{N - n(q_i) + 0.5}{n(q_i) + 0.5} \right) IDF(qi)=log(n(qi)+0.5Nn(qi)+0.5)

    • N N N:文档总数

    • n ( q i ) n(q_i) n(qi):包含词项 q i q_i qi的文档数

    • 作用:衡量词项的全局区分度,高频词(如“的”)IDF值低。

  1. TF(词频)与长度归一化
  • 文档词频 f ( q i , D ) f(q_i,D) f(qi,D):词项 q i q_i qi在文档 D D D中的出现次数。

  • 长度归一化因子:

    K = k 1 ⋅ ( 1 − b + b ⋅ ∣ D ∣ avgdl ) K = k_1 \cdot \left(1 - b + b \cdot \frac{|D|}{\text{avgdl}} \right) K=k1(1b+bavgdlD)

    • ∣ D ∣ |D| D:文档 D D D的长度(词数)

    • avgdl \text{avgdl} avgdl:文档集合的平均长度

    • 参数作用:

      k 1 k_1 k1(默认1.2):控制词频饱和度,值越大饱和速度越慢。

      b b b(默认0.75):控制文档长度的影响, b = 0 b=0 b=0时忽略长度。

  1. 得分计算示例
    假设文档库中有1000篇文档( N = 1000 N=1000 N=1000),查询词“算法”在50篇文档中出现( n ( q i ) = 50 n(q_i)=50 n(qi)=50),当前文档 D D D中“算法”出现5次( f ( q i , D ) = 5 f(q_i,D)=5 f(qi,D)=5),文档长度 ∣ D ∣ = 800 |D|=800 D=800,平均长度 avgdl = 500 \text{avgdl}=500 avgdl=500,参数 k 1 = 1.2 k_1=1.2 k1=1.2 b = 0.75 b=0.75 b=0.75
  • 计算IDF:
    IDF = log ⁡ ( 1000 − 50 + 0.5 50 + 0.5 ) ≈ 2.12 \text{IDF} = \log \left( \frac{1000 - 50 + 0.5}{50 + 0.5} \right) \approx 2.12 IDF=log(50+0.5100050+0.5)2.12
  • 计算K值:
    K = 1.2 ⋅ ( 1 − 0.75 + 0.75 ⋅ 800 500 ) ≈ 1.8 K = 1.2 \cdot \left(1 - 0.75 + 0.75 \cdot \frac{800}{500} \right) \approx 1.8 K=1.2(10.75+0.75500800)1.8
  • 最终得分:
    Score = 2.12 ⋅ 5 ⋅ ( 1.2 + 1 ) 5 + 1.8 ≈ 2.12 ⋅ 1.54 ≈ 3.26 \text{Score} = 2.12 \cdot \frac{5 \cdot (1.2+1)}{5 + 1.8} \approx 2.12 \cdot 1.54 \approx 3.26 Score=2.125+1.85(1.2+1)2.121.543.26

三、BM25的优势与场景

1. 优势
  • 抗长文档偏差:通过归一化因子平衡长文档的天然优势。

  • 灵活的参数调节:可根据业务需求调整 k 1 k_1 k1 b b b,优化排序效果。

  • 适用性广:尤其适合短查询与长文档的匹配(如搜索引擎)。

2. 应用场景
  • 搜索引擎:Elasticsearch从5.0版本后默认使用BM25。

  • 问答系统:结合RAG(检索增强生成)提升答案相关性。

  • 推荐系统:用于候选内容与用户查询的匹配评分。


四、与TF-IDF的对比

维度TF-IDFBM25
词频处理线性增长,无上限非线性饱和(如 k 1 = 1.2 k_1=1.2 k1=1.2时趋近于 k 1 + 1 k_1+1 k1+1
文档长度无归一化通过参数 b b b动态调整影响
参数灵活性固定公式可调节 k 1 k_1 k1 b b b k 3 k_3 k3(查询词频参数)
http://www.xdnf.cn/news/529003.html

相关文章:

  • BC27 计算球体的体积
  • hexo博客搭建使用
  • 数据库-oracle-包-视图传参
  • upload靶场1-5关
  • 【MYSQL】基本查询,表的增删查改
  • 云原生攻防1(基础介绍)
  • Unity预制体变体(Prefab Variants)、接口(Interface)、抽象类(Abstract Class)、枚举(Enumeration)
  • 如何快速更换电脑浏览器ip:教程与注意事项
  • Seata源码—6.Seata AT模式的数据源代理二
  • leetcode 74. Search a 2D Matrix
  • SQL注入——Sqlmap工具使用
  • 实景VR展厅制作流程与众趣科技实景VR展厅应用
  • Assistants API
  • upload-labs靶场通关详解:第10关
  • 项目QT+ffmpeg+rtsp(三)——延迟巨低的项目+双屏显示
  • FPGA 串口_波特率计算
  • 使用Python和FastAPI构建网站爬虫:Oncolo医疗文章抓取实战
  • [学习]POSIX消息队列的原理与案例分析(完整示例代码)
  • 循环神经网络:揭秘RNN的核心与应用
  • 设计模式的原理及深入解析
  • 人工智能100问☞第27问:神经网络与贝叶斯网络的关系?
  • Spring Boot 的高级特性与经典的设计模式应用
  • Flink 非确定有限自动机NFA
  • reserve学习笔记(花指令)
  • 用Python构建学生成绩管理系统的基本方案
  • 系统架构设计师考前冲刺笔记-第3章-软件架构设计
  • 《JVM如何判断一个对象可以被回收?图文详解GC Root算法》
  • Windows 下 Qt 项目配置 FFmpeg 简明指南
  • 使用docker——10分钟内 完成一个高可用的 MongoDB 副本集部署
  • 代理IP高可用性与稳定性方案:负载均衡、节点健康监测与智能切换策略