超越TF-IDF:信息检索之BM25

news2025/1/5 5:34:24

深入解析BM25:信息检索的优化利器

搜索系列相关文章(置顶)

1.原始信息再加工:一文读懂倒排索引
2.慧眼识词:解析TF-IDF工作原理
3.超越TF-IDF:信息检索之BM25
4.深入浅出 Beam Search:自然语言处理中的高效搜索利器

一、背景介绍

1. 起源

在这里插入图片描述
BM25是基于概率模型和统计语言模型的一种改进版TF-IDF算法,由Stephen E. Robertson等人于1990年代提出。它最初是为了克服传统TF-IDF方法的一些局限性,比如对词频过于敏感以及无法有效处理长文档等问题。随着互联网的快速发展,BM25逐渐成为搜索引擎优化(SEO)、信息检索系统等领域的关键技术之一。

2. 发展历史

  • 早期探索:最初的BM算法系列从BM1到BM25,经历了多个版本的迭代和优化。
  • BM25的诞生:BM25引入了文档长度归一化和可调参数 k 1 k_1 k1 b b b,使得该算法能够更好地适应不同类型的文档集合。
  • 广泛应用:如今,BM25不仅被广泛应用于各种搜索引擎中,还在推荐系统、问答系统等多个自然语言处理任务中发挥重要作用。

二、概念

1. 定义

BM25是一种用于评估文档相对于给定查询的相关性的评分函数。它综合考虑了以下几个因素:

  • 词频 (TF):一个词在文档中的出现次数。
  • 逆文档频率 (IDF):衡量一个词在整个文档集合中的普遍程度或稀有性。
  • 文档长度归一化:考虑到不同文档长度的影响,避免过长或过短的文档获得不合理的高分。
  • 可调参数 k 1 k_1 k1 控制词频饱和的程度, b b b 控制文档长度归一化的强度。

2. 公式详解

2.1 基本定义

BM25 ( q , d ) = ∑ i = 1 n IDF ( q i ) ⋅ ( k 1 + 1 ) ⋅ TF ( q i , d ) TF ( q i , d ) + k 1 ⋅ ( 1 − b + b ⋅ ∣ d ∣ avgdl ) \text{BM25}(q, d) = \sum_{i=1}^{n} \text{IDF}(q_i) \cdot \frac{(k_1 + 1) \cdot \text{TF}(q_i, d)}{\text{TF}(q_i, d) + k_1 \cdot (1 - b + b \cdot \frac{|d|}{\text{avgdl}})} BM25(q,d)=i=1nIDF(qi)TF(qi,d)+k1(1b+bavgdld)(k1+1)TF(qi,d)

  • 解释
    • q q q 表示查询, d d d 表示文档。
    • n n n 是查询中包含的不同词的数量。
    • q i q_i qi 是查询中的第 i i i 个词。
    • TF ( q i , d ) \text{TF}(q_i, d) TF(qi,d) 是词 q i q_i qi 在文档 d d d 中的出现次数。
    • IDF ( q i ) \text{IDF}(q_i) IDF(qi) 是词 q i q_i qi 的逆文档频率。
    • ∣ d ∣ |d| d 是文档 d d d 的长度(即词数), avgdl \text{avgdl} avgdl 是平均文档长度。
    • k 1 k_1 k1 b b b 是两个可调参数,通常通过实验确定最优值。

2.2 公式拆解

2.2.1 加和符号(∑)

在BM25公式中,加和符号(∑)用于对查询中的所有词进行评分的累加。具体来说,BM25公式如下:

BM25 ( q , d ) = ∑ i = 1 n IDF ( q i ) ⋅ ( k 1 + 1 ) ⋅ TF ( q i , d ) TF ( q i , d ) + k 1 ⋅ ( 1 − b + b ⋅ ∣ d ∣ avgdl ) \text{BM25}(q, d) = \sum_{i=1}^{n} \text{IDF}(q_i) \cdot \frac{(k_1 + 1) \cdot \text{TF}(q_i, d)}{\text{TF}(q_i, d) + k_1 \cdot (1 - b + b \cdot \frac{|d|}{\text{avgdl}})} BM25(q,d)=i=1nIDF(qi)TF(qi,d)+k1(1b+bavgdld)(k1+1)TF(qi,d)

为什么需要加和?

  1. 多词查询

    • 查询通常包含多个词(即多词查询)。每个词对文档的相关性都有贡献,因此需要考虑所有这些词的影响。
    • 例如,假设查询是“机器学习”,那么不仅需要评估“机器”这个词对文档的重要性,还需要评估“学习”这个词的重要性。
  2. 综合评分

    • 每个词的BM25评分反映了该词对于文档与查询相关性的贡献。通过将所有词的评分相加,可以得到一个综合的评分,这个评分更全面地反映了整个查询与文档之间的相关性。
    • 这种方法确保了即使某些词的评分较低,只要其他词的评分较高,最终的综合评分仍然可以反映出文档的整体相关性。
  3. 权重分配

    • 加和符号允许在计算时为每个词分配适当的权重。逆文档频率(IDF)部分确保了稀有词的重要性,而词频(TF)部分则衡量了词在文档中的出现频率。通过综合考虑这些因素,加和符号帮助得出一个更为准确的评分。
  4. 灵活性

    • 对于不同长度的查询,加和符号提供了灵活性。无论查询包含一个词还是多个词,BM25公式都可以通过累加各个词的评分来计算最终结果。
    • 这种设计使得BM25适用于各种类型的查询,从单个词到复杂的多词短语。

具体例子

假设有一个查询 q = { q 1 , q 2 , q 3 } q = \{ q_1, q_2, q_3 \} q={q1,q2,q3},其中 q 1 q_1 q1 q 2 q_2 q2 q 3 q_3 q3 分别是查询中的三个词。对于文档 d d d,BM25公式会分别计算每个词的评分,然后将它们相加,得到最终的BM25值:

BM25 ( q , d ) = BM25 ( q 1 , d ) + BM25 ( q 2 , d ) + BM25 ( q 3 , d ) \text{BM25}(q, d) = \text{BM25}(q_1, d) + \text{BM25}(q_2, d) + \text{BM25}(q_3, d) BM25(q,d)=BM25(q1,d)+BM25(q2,d)+BM25(q3,d)

每个 BM25 ( q i , d ) \text{BM25}(q_i, d) BM25(qi,d) 的计算都遵循相同的公式:

BM25 ( q i , d ) = IDF ( q i ) ⋅ ( k 1 + 1 ) ⋅ TF ( q i , d ) TF ( q i , d ) + k 1 ⋅ ( 1 − b + b ⋅ ∣ d ∣ avgdl ) \text{BM25}(q_i, d) = \text{IDF}(q_i) \cdot \frac{(k_1 + 1) \cdot \text{TF}(q_i, d)}{\text{TF}(q_i, d) + k_1 \cdot (1 - b + b \cdot \frac{|d|}{\text{avgdl}})} BM25(qi,d)=IDF(qi)TF(qi,d)+k1(1b+bavgdld)(k1+1)TF(qi,d)

通过这种方式,BM25能够有效地评估文档与多词查询之间的相关性,从而提高信息检索系统的准确性和效率。

2.2.2 分子部分: ( k 1 + 1 ) ⋅ TF ( q i , d ) (k_1 + 1) \cdot \text{TF}(q_i, d) (k1+1)TF(qi,d)
  1. 词频增强

    • TF ( q i , d ) \text{TF}(q_i, d) TF(qi,d) 表示词 q i q_i qi 在文档 d d d 中的出现次数。直接使用词频可以反映一个词在文档中的重要性。
    • 乘以 ( k 1 + 1 ) (k_1 + 1) (k1+1) 是为了增强词频的影响,使得高频词对评分的贡献更大。
  2. 控制词频饱和

    • k 1 k_1 k1 是一个可调参数,用来控制词频的饱和效应。较高的 k 1 k_1 k1 值意味着词频对评分的影响较小,而较低的 k 1 k_1 k1 则使得高频词在评分中占据更重要的位置。
    • 通过引入 k 1 k_1 k1,BM25避免了单纯依赖词频带来的问题,即高频词可能并不总是与文档主题高度相关。
2.2.3 分母部分: TF ( q i , d ) + k 1 ⋅ ( 1 − b + b ⋅ ∣ d ∣ avgdl ) \text{TF}(q_i, d) + k_1 \cdot (1 - b + b \cdot \frac{|d|}{\text{avgdl}}) TF(qi,d)+k1(1b+bavgdld)
  1. 词频归一化

    • TF ( q i , d ) \text{TF}(q_i, d) TF(qi,d) 再次出现在分母中,作为基准项。这确保了即使词频很高,也不会导致评分无限增大。
  2. 文档长度归一化

    • ∣ d ∣ |d| d 是文档 d d d 的长度(即词数), avgdl \text{avgdl} avgdl 是平均文档长度。
    • b b b 控制文档长度归一化的强度,范围通常在0到1之间。当 b = 0 b = 0 b=0 时,文档长度不被考虑;当 b = 1 b = 1 b=1 时,文档长度完全归一化。
    • 通过 b ⋅ ∣ d ∣ avgdl b \cdot \frac{|d|}{\text{avgdl}} bavgdld,BM25调整了文档长度的影响。较长的文档因为有更多的词,可能会有更高的词频,但这不一定意味着它更相关。因此,需要通过文档长度归一化来平衡这种影响。
  3. 综合调节

    • k 1 ⋅ ( 1 − b + b ⋅ ∣ d ∣ avgdl ) k_1 \cdot (1 - b + b \cdot \frac{|d|}{\text{avgdl}}) k1(1b+bavgdld) 是一个复杂的表达式,旨在综合考虑词频饱和效应和文档长度归一化。
    • 1 − b 1 - b 1b 确保了即使文档长度归一化为零(即 b = 0 b = 0 b=0),分母仍然不会为零,从而避免了除零错误。
    • b ⋅ ∣ d ∣ avgdl b \cdot \frac{|d|}{\text{avgdl}} bavgdld 动态调整了文档长度的影响,使得较长或较短的文档都能得到合理的评分。
分子分母设计初衷
  • 平衡词频和文档长度

    • 单纯依赖词频可能导致长文档获得过高的评分,因为它们有更多的词。BM25通过引入文档长度归一化,确保了不同长度的文档都能公平竞争。
  • 防止过度强调高频词

    • 高频词虽然在某些情况下很重要,但并不总是与文档主题高度相关。通过引入 k 1 k_1 k1,BM25控制了词频的饱和效应,避免了高频词的过度影响。
  • 灵活适应不同应用场景

    • 可调参数 k 1 k_1 k1 b b b 允许根据具体的应用场景进行优化。不同的文档集合和查询类型可能需要不同的参数设置,BM25提供了这种灵活性。
总结
  • 加和符号(∑)在BM25公式中的作用是累加查询中每个词的评分,以获得一个综合的评分。这种方法不仅考虑了每个词对文档相关性的贡献,还确保了评分的灵活性和准确性,适用于各种类型的查询。
  • BM25公式中的分子和分母设计是为了平衡多个重要因素,包括词频、逆文档频率、文档长度归一化和词频饱和效应。通过这种方式,BM25能够更准确地评估文档与查询之间的相关性,从而提高信息检索系统的性能和用户体验。这种设计不仅考虑了每个词对文档相关性的贡献,还确保了评分的灵活性和准确性,适用于各种类型的查询。

3. 举个🌰

为了更好地理解BM25是如何工作的,通过一个具体的例子来展示其计算过程。假设有一个小型语料库,包含三篇文档,每篇文档讨论不同的主题。目标是计算每个词在各个文档中的BM25值,并确定哪些词对于每篇文档最为重要。

文档集如下:

  1. Doc1:机器学习是人工智能的一个分支。
  2. Doc2:深度学习是一种强大的机器学习方法。
  3. Doc3:人工智能正在改变我们的生活和工作方式。

第一步:预处理

首先,需要对文本进行预处理,包括分词、转换为小写、去除停用词(如“是”、“的”等)。为了简化,直接列出处理后的词汇:

  • Doc1: [机器, 学习, 人工, 智能, 分支]
  • Doc2: [深度, 学习, 强大, 方法, 机器, 学习]
  • Doc3: [人工, 智能, 改变, 生活, 工作, 方式]

第二步:计算逆文档频率 (IDF)

接下来,计算每个词在整个文档集合中的逆文档频率(IDF)。假设总文档数 N = 3 N = 3 N=3

IDF ( t ) = log ⁡ ( N + 1 n t + 1 ) + 1 \text{IDF}(t) = \log\left(\frac{N + 1}{n_t + 1}\right) + 1 IDF(t)=log(nt+1N+1)+1

其中, n t n_t nt 表示包含词 t t t 的文档数量。

  • 机器: log ⁡ ( 3 + 1 2 + 1 ) + 1 ≈ 1.405 \log\left(\frac{3 + 1}{2 + 1}\right) + 1 \approx 1.405 log(2+13+1)+11.405
  • 学习: log ⁡ ( 3 + 1 2 + 1 ) + 1 ≈ 1.405 \log\left(\frac{3 + 1}{2 + 1}\right) + 1 \approx 1.405 log(2+13+1)+11.405
  • 人工: log ⁡ ( 3 + 1 2 + 1 ) + 1 ≈ 1.405 \log\left(\frac{3 + 1}{2 + 1}\right) + 1 \approx 1.405 log(2+13+1)+11.405
  • 智能: log ⁡ ( 3 + 1 2 + 1 ) + 1 ≈ 1.405 \log\left(\frac{3 + 1}{2 + 1}\right) + 1 \approx 1.405 log(2+13+1)+11.405
  • 分支: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 深度: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 强大: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 方法: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 改变: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 生活: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 工作: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609
  • 方式: log ⁡ ( 3 + 1 1 + 1 ) + 1 ≈ 1.609 \log\left(\frac{3 + 1}{1 + 1}\right) + 1 \approx 1.609 log(1+13+1)+11.609

第三步:计算词频 (TF)

然后,计算每个词在单个文档中出现的频率(TF)。

  • Doc1:

    • 机器: 1 5 = 0.2 \frac{1}{5} = 0.2 51=0.2
    • 学习: 1 5 = 0.2 \frac{1}{5} = 0.2 51=0.2
    • 人工: 1 5 = 0.2 \frac{1}{5} = 0.2 51=0.2
    • 智能: 1 5 = 0.2 \frac{1}{5} = 0.2 51=0.2
    • 分支: 1 5 = 0.2 \frac{1}{5} = 0.2 51=0.2
  • Doc2:

    • 深度: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 学习: 2 6 ≈ 0.333 \frac{2}{6} \approx 0.333 620.333
    • 强大: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 方法: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 机器: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
  • Doc3:

    • 人工: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 智能: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 改变: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 生活: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 工作: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167
    • 方式: 1 6 ≈ 0.167 \frac{1}{6} \approx 0.167 610.167

第四步:计算平均文档长度 (avgdl)

avgdl = ∑ d ∈ D ∣ d ∣ ∣ D ∣ \text{avgdl} = \frac{\sum_{d \in D} |d|}{|D|} avgdl=DdDd

  • ∣ D ∣ = 3 |D| = 3 D=3
  • ∣ d 1 ∣ = 5 |d_1| = 5 d1=5 ∣ d 2 ∣ = 6 |d_2| = 6 d2=6 ∣ d 3 ∣ = 6 |d_3| = 6 d3=6

avgdl = 5 + 6 + 6 3 = 5.67 \text{avgdl} = \frac{5 + 6 + 6}{3} = 5.67 avgdl=35+6+6=5.67

第五步:计算BM25值

使用默认参数 k 1 = 1.2 k_1 = 1.2 k1=1.2 b = 0.75 b = 0.75 b=0.75,根据BM25公式计算每个词的评分。

BM25 ( q , d ) = ∑ i = 1 n IDF ( q i ) ⋅ ( k 1 + 1 ) ⋅ TF ( q i , d ) TF ( q i , d ) + k 1 ⋅ ( 1 − b + b ⋅ ∣ d ∣ avgdl ) \text{BM25}(q, d) = \sum_{i=1}^{n} \text{IDF}(q_i) \cdot \frac{(k_1 + 1) \cdot \text{TF}(q_i, d)}{\text{TF}(q_i, d) + k_1 \cdot (1 - b + b \cdot \frac{|d|}{\text{avgdl}})} BM25(q,d)=i=1nIDF(qi)TF(qi,d)+k1(1b+bavgdld)(k1+1)TF(qi,d)

对于 Doc1 中的词 “机器”:

BM25 ( 机器 , Doc1 ) = 1.405 ⋅ ( 1.2 + 1 ) ⋅ 0.2 0.2 + 1.2 ⋅ ( 1 − 0.75 + 0.75 ⋅ 5 5.67 ) \text{BM25}(\text{机器}, \text{Doc1}) = 1.405 \cdot \frac{(1.2 + 1) \cdot 0.2}{0.2 + 1.2 \cdot (1 - 0.75 + 0.75 \cdot \frac{5}{5.67})} BM25(机器,Doc1)=1.4050.2+1.2(10.75+0.755.675)(1.2+1)0.2

≈ 1.405 ⋅ 2.2 ⋅ 0.2 0.2 + 1.2 ⋅ ( 0.25 + 0.65 ) \approx 1.405 \cdot \frac{2.2 \cdot 0.2}{0.2 + 1.2 \cdot (0.25 + 0.65)} 1.4050.2+1.2(0.25+0.65)2.20.2

≈ 1.405 ⋅ 0.44 0.2 + 1.2 ⋅ 0.9 \approx 1.405 \cdot \frac{0.44}{0.2 + 1.2 \cdot 0.9} 1.4050.2+1.20.90.44

≈ 1.405 ⋅ 0.44 1.28 \approx 1.405 \cdot \frac{0.44}{1.28} 1.4051.280.44

≈ 0.487 \approx 0.487 0.487

对于 Doc2 中的词 “学习”:

BM25 ( 学习 , Doc2 ) = 1.405 ⋅ ( 1.2 + 1 ) ⋅ 0.333 0.333 + 1.2 ⋅ ( 1 − 0.75 + 0.75 ⋅ 6 5.67 ) \text{BM25}(\text{学习}, \text{Doc2}) = 1.405 \cdot \frac{(1.2 + 1) \cdot 0.333}{0.333 + 1.2 \cdot (1 - 0.75 + 0.75 \cdot \frac{6}{5.67})} BM25(学习,Doc2)=1.4050.333+1.2(10.75+0.755.676)(1.2+1)0.333

≈ 1.405 ⋅ 2.2 ⋅ 0.333 0.333 + 1.2 ⋅ ( 0.25 + 0.75 ⋅ 1.06 ) \approx 1.405 \cdot \frac{2.2 \cdot 0.333}{0.333 + 1.2 \cdot (0.25 + 0.75 \cdot 1.06)} 1.4050.333+1.2(0.25+0.751.06)2.20.333

≈ 1.405 ⋅ 0.7326 0.333 + 1.2 ⋅ 1.0125 \approx 1.405 \cdot \frac{0.7326}{0.333 + 1.2 \cdot 1.0125} 1.4050.333+1.21.01250.7326

≈ 1.405 ⋅ 0.7326 1.578 \approx 1.405 \cdot \frac{0.7326}{1.578} 1.4051.5780.7326

≈ 0.647 \approx 0.647 0.647

结果分析

从上述计算结果可以看出,“机器”和“学习”这两个词在各自的文档中有较高的BM25值,表明这些词对于描述相应文档的主题非常重要。例如,在Doc2中,“学习”的BM25值最高,这反映了该文档特别关注于“学习”这个主题。

三、选择适合特定任务的BM25参数

选择合适的BM25参数 k 1 k_1 k1 b b b 是优化信息检索系统性能的关键步骤。这些参数控制着算法的行为,尤其是如何平衡词频和文档长度的影响。以下是选择合适BM25参数的一些策略和建议:

1. 理解参数的意义

  • k 1 k_1 k1:控制词频饱和效应的程度。较高的 k 1 k_1 k1 值意味着词频对评分的影响较小,而较低的 k 1 k_1 k1 则使得高频词在评分中占据更重要的位置。

  • b b b:控制文档长度归一化的强度。当 b = 0 b = 0 b=0 时,文档长度不被考虑;当 b = 1 b = 1 b=1 时,文档长度完全归一化。适当的 b b b 值可以确保长文档不会因为有更多的词而获得不公平的优势。

2. 默认值的选择

许多实现BM25的库(如Elasticsearch、Lucene等)默认使用 k 1 = 1.2 k_1 = 1.2 k1=1.2 b = 0.75 b = 0.75 b=0.75。这些默认值通常适用于大多数应用场景,但在某些特定情况下可能需要调整。

3. 数据驱动的方法

  • 交叉验证:将数据集划分为训练集和验证集,在训练集上进行多次实验,尝试不同的 k 1 k_1 k1 b b b 组合,使用验证集评估每个组合的表现,选择表现最好的参数组合用于最终模型。

  • 网格搜索或随机搜索:定义一个包含多个 k 1 k_1 k1 b b b 值的网格,并对所有可能的组合进行全面测试;或者从预定义的范围内随机抽取 k 1 k_1 k1 b b b 的值进行测试,这种方法可以在较短时间内找到较好的参数组合。

4. 考虑具体应用的特点

  • 文档集合的特性:如果文档长度差异较大,应该更重视 b b b 参数,以确保较长文档不会因词数多而获得过高分数;如果文档内容集中在少数几个主题上,可以适当降低 k 1 k_1 k1,减少高频词的影响。

  • 查询类型的多样性:对于短查询(如单个词),可能需要更高的 k 1 k_1 k1 来增强词频的重要性;对于长查询或多词查询,可以考虑减小 k 1 k_1 k1,以避免过度强调高频词。

5. 实验与迭代

  • 持续监控与调整:即使选择了初步的最佳参数,也应该定期评估模型的表现,并根据新的数据或用户反馈进行调整。

  • A/B 测试:在实际部署环境中,可以通过A/B测试来比较不同参数设置的效果,从而确定最适合生产环境的配置。

6. 工具与库的支持

利用现有的工具和库可以帮助简化参数选择过程。例如:

  • Elasticsearch 提供了内置的BM25参数调整功能。
  • Pyserini 是一个Python库,支持快速实验不同的BM25参数并评估其效果。

四、应用场景

1. 搜索引擎优化(SEO)

网站管理员可以通过调整页面上特定关键词的分布密度,结合BM25算法来改善网站在搜索引擎结果页上的排名。这意味着不仅要增加目标关键词的出现频率,还要确保这些关键词在整体内容中具有独特性,并且文档长度适中,以符合用户的查询意图。

2. 信息检索系统

在构建高效的搜索系统时,使用BM25可以更准确地计算文档与查询之间的相关性得分,从而返回更加相关的搜索结果。这有助于提高用户体验,尤其是在面对大量文本数据的情况下。

3. 推荐系统

通过计算用户兴趣与项目描述之间的BM25相似度,推荐系统可以为用户提供个性化的推荐内容。这种方法不仅可以应用于商品推荐,还可以扩展到新闻文章、音乐播放列表等多个领域。

4. 问答系统

在开发智能问答平台时,BM25可以帮助识别与用户问题最相关的答案候选。通过对问题和潜在答案之间的BM25评分,选择得分最高的作为最终回复,从而提升回答的准确性。

五、总结

BM25作为一种先进的信息检索算法,通过引入文档长度归一化和可调参数,显著提升了文档与查询匹配度的评估精度。无论是搜索引擎优化、信息检索系统,还是推荐系统和问答系统等领域,BM25都展现出了强大的适用性和优越性能。掌握BM25不仅是处理文本数据的关键技能,更是推动自然语言处理技术进步的重要力量。选择合适的BM25参数是一个结合理论理解与实践探索的过程,通过理解参数的意义、采用数据驱动的方法、考虑具体应用场景的特点以及不断实验和迭代,可以找到最符合特定任务需求的参数配置。这不仅有助于提高检索系统的准确性,还能增强用户体验。

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

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

相关文章

C#控件开发4—仪表盘

目录 思路(GDI绘图)1.定义属性2.绘制图形3.最后生成(自定义各种监控值显示)End 如何让温度、湿度、压力等有量程的监控值如仪表盘(DashBoard)一样显示? 思路(GDI绘图) 定…

提升口语发音水平,中英文发音评测系统实现

在全球化的浪潮中,语言不再是障碍,而是连接世界的桥梁。掌握一门流利的英语,意味着打开了通往世界的大门。但是,如何确保你的英语口语如同母语者一样自然流畅?这正是我们存在的意义。 我们的中英文口语发音评测服务&a…

JVM对象创建过程

1 类加载检查 jvm通过new指令开始创建对象jvm执行new指令时,首先通过指令参数从常量池中取到需要创建的类名检查该类是否被加载,解析,和初始化过如果没有,则执行类的加载过程new指令对应到java语言具体的操作为 new 关键字创建对象…

什么是Sight Words(信号词)

🧡什么是Sight Words(信号词) 简单来说,Sight Words就是我们在日常英语中常用的一些基本词汇。可以把它想象成是学练英语的“基础词汇”,这些词在各种考试中经常出现,也是在生活中必不可少的。 &#x1f…

秒鲨后端之MyBatis【3】自定义映射resultMap、动态SQL、MyBatis的缓存、MyBatis的逆向工程、分页插件(30000字)

这里我分享一下尚硅谷的pdf100页笔记和代码,大家可以参考学习。 笔记: 通过网盘分享的文件:MyBatis.pdf 链接: https://pan.baidu.com/s/14Iu1Zs-_5vZoRjBEjmagag?pwdyjh6 提取码: yjh6 --来自百度网盘超级会员v1的分享代码: …

12.31【Linux】shell脚本【运行方式,修改环境变量,数组】思维导图 内附练习

1.思维导图 2练习: 1.尝试将下列指令放到脚本中运行 在家目录下创建目录文件dir1,把/etc/passwd拷贝到dir1中,把/etc/group拷贝到dir1中并重命名为grp.txt,使用tree指令,显示dir1目录的文件树,把dir1&am…

云计算学习架构篇之HTTP协议、Nginx常用模块与Nginx服务实战

一.HTTP协议讲解 1.1rsync服务重构 bash 部署服务端: 1.安装服务 [rootbackup ~]# yum -y install rsync 2.配置服务 [rootbackup ~]# vim /etc/rsyncd.conf uid rsync gid rsync port 873 fake super yes use chroot no max connections 200 timeout 600 ignore erro…

【项目】智能BI洞察引擎 测试报告

目录 一、项目背景BI介绍问题分析项目背景 二、项目功能三、功能测试1、登录测试测试用例测试结果 2、注册测试测试用例测试结果出现的bug 3、上传文件测试测试用例测试结果 4、AI生成图表测试测试用例测试结果 5、分析数据页面测试(异步)测试用例测试结…

权限菜单之菜单管理 SpringBoot + VUE

一、 数据表设计 新建表sys_menu 表内数据 添加实体类Menu package com.example.demo.demos.web.demo.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.Ta…

【AIGC篇】AIGC 引擎:点燃创作自动化的未来之火

:羑悻的小杀马特.-CSDN博客 未来都是惊喜。你生来本应为高山。并非草芥。 引言: 在当今数字化的时代,人工智能生成内容(AIGC)正以一种前所未有的力量改变着我们的创作领域。它就像一个神秘而强大的魔法师,…

UnityRenderStreaming使用记录(三)

测试UnityRenderStreaming在Ubuntu24.04.1LTS上的表现 先放上运行图操作系统 Ubuntu24.04.1LTSUnity测试工程环境相关修改遇到的问题 先放上运行图 操作系统 Ubuntu24.04.1LTS 系统下载地址 https://cn.ubuntu.com/download/desktop安装UnityHub https://blog.csdn.net/AWNUXC…

从0开始的docker镜像制作-ubuntu22.04

从0开始的docker镜像制作-ubuntu22.04 一、拉取基础ubuntu22.04镜像二、进入拉取的docker镜像中,下载自己需要的安装包三、安装需要的系统软件四、打包现有镜像为一个新的镜像五、推送打包的镜像到私有docker服务器1.编辑docker文件,使其允许http传输和对…

多模态论文笔记——CogVLM和CogVLM2(副)

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型的LoRA版本——CogVLM和CogVLM2。在SD 3中使用其作为captioner基准模型的原因和优势。 文章目录 CogVLM论文背景VLMs 的任务与挑战现有方法及…

gitlab-runner的卸载与安装

如果你使用rpm方式安装gitlab-runner,则可以参考本教程。 卸载 停止和卸载gitlab-runner 停止 gitlab-runner stopchkconfig gitlab-runner off卸载 gitlab-runner uninstall删除rpm包 查询出rpm包名,根据包名删除rpm。 [rootEuler02 ~]# rpm -qa …

Nacos配置中心总结

Nacos配置中心总结 Nacos配置文件的加载顺序和优先级 加载顺序 nacos作为配置中心时,需要在bootstrap.yml文件中添加nacos config相关的配置,这样系统启动时就能先去拉取nacos server上的配置了。拉取过来后会和本地配置文件进行合并。 bootstrap.ym…

赛博周刊·2024年度工具精选(图片资源类)

1、EmojiSpark emoji表情包查找工具。 2、fluentui-emoji 微软开源的Fluent Emoji表情包。 3、开源Emoji库 一个开源的emoji库,目前拥有4000个emoji表情。 4、中国表情包大合集博物馆 一个专门收集中国表情包的项目,已收录5712张表情包,并…

Goland:专为Go语言设计的高效IDE

本文还有配套的精品资源,点击获取 简介:Goland是JetBrains公司开发的集成开发环境(IDE),专为Go语言设计,提供了高效的代码编辑、强大的调试工具和丰富的项目管理功能。其智能代码补全、强大的调试与测试支…

小程序发版后,用户使用时,强制更新为最新版本

为什么要强制更新为最新版本? 在小程序的开发和运营过程中,强制用户更新到最新版本是一项重要的策略,能够有效提升用户体验并保障系统的稳定性与安全性。以下是一些主要原因: 1. 功能兼容 新功能或服务通常需要最新版本的支持&…

EasyExcel(环境搭建以及常用写入操作)

文章目录 EasyExcel环境搭建1.创建模块 easyexcel-demo2.引入依赖3.启动类创建 EasyExcel写1.最简单的写入1.模板2.方法3.结果 Write01.xlsx 2.指定字段不写入Excel1.模板2.方法3.结果 Write02.xlsx 3.指定字段写入excel1.模板2.方法3.结果 Write03.xlsx 4.按照index顺序写入ex…

典型常见的基于知识蒸馏的目标检测方法总结三

来源:Google学术2023-2024的顶会顶刊论文 NeurIPS 2022:Towards Efficient 3D Object Detection with Knowledge Distillation 为3D目标检测提出了一种知识蒸馏的Benchmark范式,包含feature的KD,Logit的cls和reg的KD&#xff0c…