来,带你从TF-IDF说起搞懂BM25

回顾TF-IDF

TF-IDF 算法我们之前已经有过详细的介绍了,这里就不再赘述。有疑问的朋友可以回头看一下这篇笔记:TF-IDF的原理及代码实现。这篇文章中有一点理解,我么先搬过来:

IDF表征的是区分度、稀缺性,用以评估一个单词在语料库中的重要程度,一个词在少数几篇文档中出现的次数越多,它的IDF值越高,如果这个词在大多数文档中都出现了,这个值就不大了。从公式也可以看出来,由于log函数是单增函数,当文档总数固定时,包含该词的文档数越少,IDF值越大,稀缺性越强。背后的思想是某个词或者短语在一篇文章中出现的频率高(TF大),并且在其他文档中很少出现(IDF也大),则认为该词或短语具备很好的类别区分能力(TF-IDF 也就越大)。
TF刻画了词语w对某篇文档的重要性,IDF刻画了w对整个文档集的重要性。TF与IDF没有必然联系,TF低并不一定伴随着IDF高。实际上我们可以看出来,IDF其实是给TF加了一个权重。

为什么要引出BM25

可插拔的相似度算法提到:因为在TF-IDF 中去停用词被认为是一种标准实践,故TF-IDF没有考虑词频上限的问题(因为高频停用词已经被移除了)。而在某些频率较高的停用词不被去除的情况下,停用词的权重会被无意义地放大。比如文中提到的:

Elasticsearch 的 standard 标准分析器( string 字段默认使用)不会移除停用词,因为尽管这些词的重要性很低,但也不是毫无用处。这导致:在一个相当长的文档中,像 theand 这样词出现的数量会高得离谱,以致它们的权重被人为放大。

这就是所谓的词频饱和度,TF-IDF的词频饱和度是线性的,而BM25的词频饱和度是非线性的:
【通俗地总结就是:我们之前默认了要去停,但实际好多地方是不去停用词的,所以会有停用词词频贼大的问题,我们想要一个算法,不受停用词影响,也就是亟需图像中下面那样的曲线,这是BM25出现的初衷之一。】

来,带你从TF-IDF说起搞懂BM25_第1张图片

还有一个问题,那就是文档长度的问题:

1000词的文章出现100个W词,和一篇200词的文章出现100个W词,显然重要性不同。(如果TF计算是利用文档全词长度做分母做的归一化,就会有这个问题,原有情况下对长文本不友好,因为分母比较大)

Lucence(或 Elasticsearch)对传统的TF-IDF做了改进,给他加了一个字段长度归一化值【这是BM25之前做的优化】:

来,带你从TF-IDF说起搞懂BM25_第2张图片

即改进后的TF-IDF,可以看出改进后的TF-IDF给了长文本给了更多的厚爱:

image-20210307160030444

其中TF值的算法:

image-20210307160713019

IDF算法不变:

image-20210307160838804

但是BM25针对上述问题做了更多的改进。

BM25

BM25对之前的方法做了更细致的改进,主要是引入参数k来控制TF值的上下限、引入b来控制文本长度归一化的程度

来,带你从TF-IDF说起搞懂BM25_第3张图片

由此得到最终的BM25算法的公式:

image-20210307162314653

再次说明其中L的算法:

image-20210307162605447

总结

BM25主要针对词频饱和度和文档归一化长度做了两点改进”

  • k这个参数控制着词频结果在词频饱和度中的上升速度。默认值为 1.2 。值越小饱和度变化越快,值越大饱和度变化越慢。【思考:如果没有去停用词的情况下,k应该大一点】
  • b这个参数控制着字段长归一值所起的作用, 0.0 会禁用归一化, 1.0 会启用完全归一化。默认值为 0.75 。【思考:长文本b应该小一点,短文本可以大一点】

此外还有一个区别就是:BM25源自概率相关模型,而TF-IDF 源自向量空间模型。

此文完。


参考文章:

相关度评分背后的理论

可插拔的相似度算法

【NLP笔记】BM25内涵

NLP之TF-IDF与BM25原理探究

你可能感兴趣的:(NLP-自然语言处理笔记,nlp,自然语言处理,算法,人工智能)