SEO中的BM25是什么意思,BM25算法和TF * IDF是什么关系

Lucene如何评分文本有一些新的烹饪方法。而不是传统的“TF * IDF”,Lucene刚刚换成了行李箱中的BM25。这意味着Solr(Solr 6)和Elasticsearch 的新评分公式。

听起来很酷,但这一切意味着什么?在本文中,我想概述一下切换如何成为您的Solr和Elasticsearch应用程序的福音。什么是最初的TF * IDF?它是如何工作的?新BM25做得更好?你怎么调整它?BM25适合一切吗?

BM25和TF * IDF位于排名功能的核心。它们包含Lucene所称的“田间重量”。字段权重衡量搜索字词的匹配文本数量。

经典LUCENE相似:什么是TF * IDF?

TF * IDF是一种近似用户如何评估文本匹配相关性的粗略方法。TF * IDF的直觉非常简单,依赖于评分公式名称中嵌入的两个主要因素,这两个因素往往与人类思维倾向于评估搜索相关性的方式相对应:

  • 术语频率又称tf:文章中“狗”的出现频率如何?3次?10倍?
  • 逆文档频率又名idf:文档频率测量一个术语出现的文档数量。反向文档频率(1/df)然后测量该术语的特殊程度。术语“狗”是非常罕见的(只出现在一个文档中)?或者比较常见(几乎所有的文档中都有)?

换句话说,TF * IDF测量给定文本中术语的相对集中度。如果“狗”在本文中很常见,但在其他地方比较少见,那么TF * IDF得分会很高。这篇文章应该被认为与搜索术语“狗”非常相关。如果“狗”在这里出现一次,但在许多其他文档中非常突出,其得分将相对较低。

另一个衡量标准是文本的长度。在一本500页的书中出现两次的“狗”几乎没有说这本书关于“狗”多少钱。然而,“狗”在短促的推文中出现两次意味着推文非常关注“狗”!因此引入了另一种称为“fieldNorms”的偏见。这种贡献给予较长文档匹配较短文档的显着偏差。这些术语在较短的文档中更“集中”,因此较短的文档更有可能是关于搜索的术语,因此应该得分更高。

经典LUCENE相似:捏造TF * IDF

通过不断的实验,信息检索领域(搜索的学术方面)已经意识到原始TF IDF值并不完全符合用户的相关直觉。如果一篇文章提到“狗”六次,它的相关性是提及“狗”3次的文章的两倍吗?大多数用户说没有。当然,提到“狗”6次的文章可能更相关,但不是相关的两倍。对于一个术语的IDF,类似的考虑也会起作用。在500个文档中出现的术语不是1000个术语中出现的术语的两倍。

而是TF*IDF进行修改,以便不直接获取TF,IDF和字段长度。sqrt(TF)在评分公式中采用直接而不是TF 。具有两倍于其他文档的术语数量的文档不是相关的两倍。而是获得如下计算的TF分数

原始TF TF得分
1 1.0
2 1.141
4 2.0
8 2.828
16 4

好的,这里有TF,16个术语的文档大约是4个文档的两倍。

类似地,用户不会认为仅在10个文档中出现的术语是100个文档中出现的术语的十倍。相反,IDF分数计算为

log ( numDocs / docFreq + 1) + 1

这里numDocs是语料库中的文档数。因为,例如numDocs = 1000,这对应于::

原始DF IDF得分
1 7.214
2 6.809
4 6.298
64 3.733
128 3.048
256 2.359

这种增长更慢。这里仅出现在4个文档中的术语大约是64个文档中出现的术语的两倍。同样,这对大多数用户来说是直观的。

文档长度的影响如何?怎么计算?这是基于另一个简单的公式计算的,该公式似乎也符合用户期望:)。

1 / sqrt(length)
原始长度 现场标准分数
1 1.0
2 0.707
4 0.5
64 0.125
128 0.088
256 0.0625

因此长度为128的文档与长度为1的文档中的匹配大约相差十倍。根据我们的直觉,这是有道理的:如果你匹配长度为一个文档中的唯一术语,那么该文档绝对是关于该术语的!在长度为128的文档中,它是一大堆术语之一,并不一定是该文档的全部内容。

经典Lucene相似性一起…

整体公式是

IDF score * TF score * fieldNorms

要么

log(numDocs / (docFreq + 1)) * sqrt(tf) * (1/sqrt(length))

与警告

  • numDocs实际上是maxDocs,它经常计算已删除的文档
  • fieldNorms被计算并存储为8位浮点值。这是一个可怕的精度,并创造各种有趣的问题!

输入BM25:下一代TF * IDF

BM25在TF * IDF上有所改善。BM25代表“最佳比赛25”。它于1994年发布,是调整相关性计算的第25次迭代。BM25的根源在于概率信息检索。概率信息检索本身就是一个迷人的领域。基本上,它将相关性视为概率问题。根据概率信息检索,相关性得分应该反映用户将结果相关的概率。这是一个值得它自己的博客文章的主题,所以我不会在这里介绍它!

我宁愿直观地讨论如何使用 BM25 ,而不是迷失在非常迷人的理论中。您将看到排名所采用的形状,而数学上可怕的外观,实际上具有很多直观感。

BM25采用IDF

好的,首先,我们让IDF走开。在图表上,BM25的IDF与经典的Lucene IDF非常相似。这里差异的唯一原因是它从概率信息检索中推导出来。Lucene对BM25的常规IDF进行了一次更改。BM25的IDF有可能为文档频率非常高的条款提供负分数。因此,Lucene BM25中的IDF为解决这个问题提供了一个惊人的技巧。在获取日志之前,它们将值加1,这使得无法计算负值。最终结果是IDF与Lucene当前的IDF曲线非常相似,如下图所示。

BM25 IDF vs Lucene Classic IDF

所以对于IDF来说,并不是很多惊喜。我们不需要改变我们对BM25中IDF的看法。如果你看到(再次超出这篇文章的范围)IDF是如何从概率论中得出的,那么更有趣的是什么。

BM25的承担TF

现在让我们看一下术语频率。单独查看术语频率有点谎言,但我们将尝试用于展示更大的BM25公式。

BM25中的术语频率比传统的TF * IDF更能抑制术语频率的影响。术语频率的影响总是在增加,但是渐近地接近一个值。

在不考虑文档长度的情况下,术语频率遵循公式

((k + 1) * tf) / (k + tf)

如下图所示:

BM25 TF vs Lucene Classic TF

如您所见,该曲线渐近地接近(k + 1)(此处k = 1.2)。它有一个非常有趣的效果。更多tf意味着更多相关性。然而,你很快就会收益递减。你永远不会过去k,但你总是接近它!另一方面,经典的Lucene tf不断增加,永远不会达到饱和点。

这个k值是多少?对于BM25,k通常设置为1.2。大多数人只留下k。改变k虽然可以是一种有用的调整方法来修改TF的影响。修改k会明显导致渐近线移动。然而更重要的是,较高的k会导致TF需要更长的时间才能达到饱和状态。通过延伸饱和点,您可以延伸高低频率文档之间的相关性差异!

BM25如何使用文档长度?

现在最后一节是一个有用的谎言。上面的TF分数进一步受到文档是高于还是低于语料库中文档的平均长度的影响。

这看起来像什么?好吧,我们建立在之前的TF公式上,引入两个变量:常量b和长度值L。采用上面的公式并(1.0 - b + b * L)在分母中添加k作为倍数。

((k + 1) * tf) / (k * (1.0 - b + b * L) + tf)

L是文档相对于平均文档长度的长度。L如果被评分的文档是语料库的平均文档长度的两倍,则为2。L如果被评分的文档是平均文档长度的十分之一,则为0.1。L因此实际上表示为|d|/avgDl– 此文档长度除以平均文档长度。

BM25规范TF具有不同的长度

正如您在图表中看到的,不同值的最终结果L是较短的文档更快地达到了渐近线。他们几乎立即饱和到最佳TF分数。这是有道理的,短文档的术语较少。这些简短文档中的匹配越多,您就越能确定相关性。这个数字上升得更快。另一方面,一本冗长的书需要更多的匹配才能达到我们可以自信的程度。因此达到“最大相关性”需要更长时间。

常数b将允许我们精细调整我们的L价值对评分的影响程度。注意在上面的公式中,a b0完全消除了影响L,返回到上一节的公式。较高b会增加文档长度对评分的影响。换句话说,在经典中TF*IDF你总是禁用字段上的规范来消除字段长度的影响。在这里你可以简单地将b设置为相似性以消除场长的影响。

全部一起

当BM25全部采用时:

IDF * ((k + 1) * tf) / (k * (1.0 - b + b * (|d|/avgDl)) + tf)

你可以在这里看到我们为什么从一方开始!

BM25适合一切吗?

我对BM25印象非常深刻。我在O’Reilly图书馆项目中用它来搜索图书块。这里有很多智慧!术语频率饱和度很有意义。那么调制场长的影响也是如此。

但它们对文章长度的文本仍然有意义。我们搜索的并不是博客文章或维基百科页面。使用的相似性需要根据您要比较的事物类型进行更改。例如,标题字段有其自己的不稳定的倾向。事实上托管搜索服务Algolia和SwiftType使他们的业务部分在于真正擅长短片段搜索。

所以我和Solr Start的伙伴Alex 问我 – BM25适合所有人吗?对于一切?这是对核心文档搜索问题的巨大改进。但是在搜索数字,图像和其他实体的边缘周围,胜利并不清楚。

这是一个成为Lucene,Solr或Elasticsearch开发人员的迷人时光。随着BM25成为默认,我们将直接看到理论与实践相遇时会发生什么。相关性永远不会是一个常数,它是您正在制作的用户体验。然而,BM25出来的大锅是像Trec之类的信息检索竞赛。现实世界可以如此不同。文件不仅仅是文件,还有餐馆,产品,新闻文章,推文,医生办公室等等。对你的“相似性”来说,正确的答案可能就是总是提出附近有相似兴趣的朋友发推的推文。关于文本相似性的更少,更多关于对用户来说重要的内容。换句话说,搜索与制作用户体验一样重要。这就是为什么我们感到兴奋Quepid帮助了解用户对搜索的期望!

无论如何,我对BM25的可能性感到非常兴奋。它打开了Lucene基线相关能力的大门,并为Solr和Elasticsearch的能力打开了很多大门!如果您想聊聊BM25或其他相关解决方案是否适合您的应用,请与我们联系!喜欢聊天!