BM25算法详解

BM25算法在二元独立模型基础上考虑单词在查询和文档中的权重,通过概率论和经验参数调整得分。公式涉及词频、文档长度等,其中k1、k2和b是可调节参数,用于平衡词频和文档长度的影响。该算法广泛应用于信息检索和搜索引擎。

概括:
BM25算法通过加入文档权值和查询权值,拓展了二元独立模型的得分函数。这种拓展是基于概率论和实验验证的,并不是一个正式的模型。BM25模型在二元独立模型的基础上,考虑了单词在查询中的权值以及单词在文档中的权值,拟合综合上述考虑的公式,并通过实验引入经验参数。
BM25的原始公式为:
(公式1)
log后有三部分组成,其中,第一部分是二元独立模型的计算得分

二元独立模型介绍:
有两个假设:
假设一:二元假设
类似于布尔模型的方法,一篇文章由特征表示时,以特征“出现”和“不出现”两种情况表示,亦可以理解成特征“相关”和“不相关”。
假设二:词汇独立性假设
所谓独立性假设,是指文档里出现的单词之间没有任何关联,任一个单词在文章中的分布率不依赖于另一个单词是否出现,这个假设明显与事实不符,但是为了简化计算,很多地方需要做出独立性假设,这种假设是普遍的。

在以上两个假设的前提下,二元独立模型即可以对两个因子P(D|R)和P(D|NR)进行估算(条件概率),举个简单的例子,文档D中五个单词的出现情况如下:{1,0,1,0,1} 0表示不出现,1表示出现。用Pi表示第i个单词在相关文档中出现的概率,在已知相关文档集合的情况下,观察到文档D的概率为:
这里写图片描述(公式2)

对于因子P(D|NR),用Si表示第i个单词在不相关文档中出现的概率,在以知不相关文档的情况下,观察到文档D的概率为:
这里写图片描述(公式3)

观察得:
这里写图片描述(公式4,其中C为常数)

并且带入Pi,Si可得:
这里写图片描述(公式5,其中C为常数,di=1表示i为单词出现在相关文档和不相关文档的情况)

为了方便计算,对上述公式两边取log,得到:
这里写图片描述

那么如何估算概率Si和Pi呢,如果给定用户查询,我们能确定哪些文档集合构成了相关文档集合,哪些文档构成了不相关文档集合,那么就可以用如下的数据对概率进行估算:
这里写图片描述

根据上表可以计算出Pi和Si的概率估值,为了避免log(0),对估值公式进行平滑操作,分子+0.5,分母+1.0
这里写图片描述

在我们不知道哪些文档相关,哪些文档不相关的情况下,将相关文档数R及包含查询词相关文档数r设为0,那么第一部分退化成:
这里写图片描述

代入公式1变为:
这里写图片描述(公式6)

三个自由调节参数
在公式:这里写图片描述
第二个组成部分是查询词在文档 D 中的权值,其中 fi代表了单词在文档 D 中的词频,k1和 K 是经验参数。第三个组成部分是查询词自身的权值,其中 qfi代表查询词在用户查询中的词频,如果查询较短小的话,这个值往往是 1,k2是经验参数在第二个计算因子中,K 因子代表了对文档长度的考虑,它用来利用文档长度归一化 tf 因子。 公式(7)所示 K 的计算公式中 ,dl 代 表 文 档 D 的 长 度 , 而 avdl 则 代 表 文 档 集 合 中所有文档的平均长度,k1和 b 是经验参数。 其中参数 b 是调节因子,极端情况下,将 b 设定为 0,则文档长度因素将不起作用,经验表明一般将 b 设定为 0.75 会获得较好的搜索效果。
这里写图片描述(公式7)

BM25 公式中包含 3 个自由调节参数 ,除了调节因子 b 外 ,还有针对词频的调节因子 k1和 k2。 k1的作用是对查询词在文档中的词频进行调节,如果将 k1设定为 0,则第二部分计算因子成了整数 1,即不考虑词频的因素,退化成了二元独立模型。 如果将 k1设定为较大值, 则第二部分计算因子基本和词频 fi保持线性增长,即放大了词频的权值,根据经验,一般将 k1设定为 1.2。调节因子 k2和 k1的作用类似,不同点在于其是针对查询词中的词频进行调节,一般将这个值设定在 0 到 1000 较大的范围内。之所以如此,是因为查询往往很短,所以不同查询词的词频都很小,词频之间差异不大,较大的调节参数数值设定范围允许对这种差异进行放大。

参考:搜索之BM25和BM25F模型
基于 Lucene 的 BM25 模型的评分机制的研究(范晨熙 黄理灿 李雪利)

<think>好的,我现在需要详细解释BM25算法的介绍及实现原理。首先,用户提供了三个引用资料,我需要仔细分析这些内容,确保回答的准确性。 根据引用[2],BM25是基于概率检索框架的算法,由Robertson等人提出,最初在OKapi系统中实现。所以开头应该介绍BM25的基本概念和应用场景,比如信息检索中的文档相关性评分。 接下来,引用[3]提到BM25计算query和文档相关性的三个部分:单词文档的相关性、单词query的相关性、单词权重。需要将这些部分拆解开来,逐一说明。比如,词频(TF)、逆文档频率(IDF)、文档长度归一化这些要素。 然后,引用[1]详细列出了BM25的四个组成部分:词频、逆文档频率、长度归一化和评分公式。我需要将这些技术点整合到回答中,可能需要用数学公式展示,并解释每个参数的作用,比如k1和b的意义。 在实现原理部分,需要分步骤说明,比如预处理、计算各组件、综合评分。这里要结合引用中的示例,可能需要用LaTeX公式展示BM25的公式,确保格式正确,如使用$$...$$。 然后,关于在ElasticSearch中的应用,引用[1]提到参数调整和混合搜索,这里需要简要说明如何调整k1和b,以及其他算法的结合使用。 最后,生成相关问题时要覆盖原理、优化、应用、对比等,参考用户示例中的结构,确保问题有针对性且相关。 需要检查是否所有数学表达式都正确使用$或$$,比如词频部分可能用行内公式,而BM25公式用独立公式。同时,确保回答结构清晰,分点阐述,引用标识正确添加。</think>### BM25算法介绍及实现原理 #### 一、BM25算法简介 BM25(Best Match 25)是一种基于概率检索模型的相关性评分算法,主要用于信息检索系统中评估搜索词(query)文档(document)之间的相关性[^2]。它由Stephen E. Robertson等人提出,并在OKapi系统中首次实现,因此也称为**OKapi BM25**。该算法结合了词频(TF)、逆文档频率(IDF)和文档长度归一化,能够有效平衡搜索结果的准确性多样性。 --- #### 二、BM25实现原理 BM25的核心思想是通过以下三个组件计算相关性得分: 1. **词频(TF)** 衡量单词在文档中的出现频率,词频越高得分越高,但增长趋势会通过饱和函数控制,公式为: $$\text{TF}_{\text{BM25}} = \frac{(k_1 + 1) \cdot \text{tf}}{k_1 \cdot \left(1 - b + b \cdot \frac{\text{dl}}{\text{avgdl}}\right) + \text{tf}}$$ 其中: - $\text{tf}$:单词在文档中的词频 - $\text{dl}$:文档长度 - $\text{avgdl}$:语料库中文档的平均长度 - $k_1$(默认1.2)和$b$(默认0.75)为可调参数,控制词频饱和度和长度归一化强度[^1]。 2. **逆文档频率(IDF)** 衡量单词在整个语料库中的区分能力,公式为: $$\text{IDF} = \log\left(\frac{N - n + 0.5}{n + 0.5} + 1\right)$$ - $N$:文档总数 - $n$:包含该单词的文档数 3. **长度归一化** 通过参数$b$调节文档长度对得分的影响,避免长文档因包含更多单词而天然占优。 **最终BM25评分公式**: $$\text{BM25}(D, Q) = \sum_{i=1}^{n} \text{IDF}(q_i) \cdot \text{TF}_{\text{BM25}}(q_i, D)$$ --- #### 三、BM25算法实现步骤 1. **预处理** - 对文档和query进行分词、停用词过滤。 2. **计算IDF值** 统计每个单词的$n$(包含该词的文档数)和$N$(总文档数)。 3. **计算词频长度归一化** 根据文档长度和参数$k_1, b$调整词频权重。 4. **综合得分** 对query中的每个单词计算$\text{IDF} \cdot \text{TF}$,并累加得到最终相关性得分。 --- #### 四、BM25在ElasticSearch中的应用 在ElasticSearch中,BM25是默认的相似度评分算法: - **参数调整**:通过修改`k1`和`b`优化结果(例如`"similarity": {"type": "BM25", "k1": 1.5}`)。 - **混合搜索**:结合布尔模型或语义搜索模型提升效果。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值