当前位置: 首页 > 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(查询词频参数)

相关文章:

  • 基于Zynq SDK的LWIP UDP组播开发实战指南
  • 对抗性机器学习:AI模型安全防护新挑战
  • 在linux平台下利用mingw64编译windows程序
  • 码蹄集——N是什么、棋盘
  • 冒泡排序详解
  • thinkphp6实现统一监听并记录所有执行的sql语句除查询外
  • Unity使用sherpa-onnx实现说话人识别
  • DS1302实时时钟模块
  • Java-List集合类全面解析
  • CSS- 4.5 css + div 布局 简易网易云音乐 官网布置实例
  • 「NameCraft · 幻想命名器」开发记:我和 CodeBuddy 的一次奇幻共创之旅
  • 易境通散货拼柜系统:提高货代企业货物配载效率
  • CEF源码历史版本编译避坑指南
  • JSON学习笔记
  • 视频监控中的存储方式有哪些?EasyCVR视频监控汇聚平台如何打造高效监控存储
  • 【STM32】ST-Link V2.1制作
  • 【CF】Day62——Codeforces Round 948 (Div. 2) CD (思维 + LCM + 枚举因数 | 思维 + 哈希)
  • Amazon Q 从入门到精通 – 测试与重构
  • Python的传参过程的小细节
  • k8s1.27集群部署mysql8.0双主双从
  • 遇见东方:18世纪俄罗斯宫殿中的“中国风”
  • 钱进已任外交部新闻司副司长
  • 专访|金七猫奖得主:以非遗为舟,在现实题材中疗愈与成长
  • 上千螺母引发的枪支散件案:五金厂老板的儿子被诉,律师作无罪辩护
  • 武汉警方通报一起故意伤害案件:1人死亡,嫌疑人已被抓获
  • 证监会副主席李明:近期将出台深化科创板、创业板改革政策措施