You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
9.3 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 032 | 经典搜索核心算法BM25及其变种内附全年目录
周一我们讲了TF-IDF算法和它的四个变种相对于TF-IDF而言在信息检索和文本挖掘领域BM25算法则更具理论基础而且是工程实践中当仁不让的重要基线Baseline算法 。BM25在20世纪70年代到80年代被提出到目前为止已经过去二三十年了但是这个算法依然在很多信息检索的任务中表现优异是很多工程师首选的算法之一。
今天我就来谈谈BM25算法的历史、算法本身的核心概念以及BM25的一些重要变种帮助你快速掌握这个信息检索和文本挖掘的利器。
## BM25的历史
BM25有时候全称是Okapi BM25是由英国一批信息检索领域的计算机科学家开发的排序算法。这里的“BM”是“最佳匹配”Best Match的简称。
BM25背后有两位著名的英国计算机科学家。第一位叫斯蒂芬·罗伯逊Stephen Robertson。斯蒂芬最早从剑桥大学数学系本科毕业然后从城市大学City University获得硕士学位之后从伦敦大学学院University College London获得博士学位。斯蒂芬从1978年到1998年之间在城市大学任教。1998年到2013年间在微软研究院剑桥实验室工作。我们之前提到过美国计算机协会ACM现在每三年颁发一次“杰拉德·索尔顿奖”用于表彰对信息检索技术有突出贡献的研究人员。2000年这个奖项颁给斯蒂芬奖励他在理论方面对信息检索的贡献。BM25可谓斯蒂芬一生中最重要的成果。
另外一位重要的计算机科学家就是英国的卡伦·琼斯Karen Spärck Jones。周一我们在TF-IDF的文章中讲过。卡伦也是剑桥大学博士毕业并且毕生致力于信息检索技术的研究。卡伦的最大贡献是发现IDF以及对TF-IDF的总结。卡伦在1988年获得了第二届“杰拉德·索尔顿奖”。
## BM25算法详解
现代BM25算法是用来计算某一个目标文档Document相对于一个查询关键字Query的“相关性”Relevance的流程。通常情况下BM25是“非监督学习”排序算法中的一个典型代表。
顾名思义,这里的“非监督”是指所有的文档相对于某一个查询关键字是否相关,这个信息是算法不知道的。也就是说,算法本身无法简单地从数据中学习到相关性,而是根据某种经验法则来“猜测”相关的文档都有什么特质。
那么BM25是怎么定义的呢我们先来看传统的BM25的定义。一般来说**经典的BM25分为三个部分**
1. 单词和目标文档的相关性
2. 单词和查询关键词的相关性
3. 单词的权重部分
这三个部分的乘积组成某一个单词的分数。然后,整个文档相对于某个查询关键字的分数,就是所有查询关键字里所有单词分数的总和。
我们先从第一部分说起即单词和目标文档的相关性。这里相关性的基本思想依然是“词频”也就是TF-IDF里面TF的部分。词频就是单词在目标文档中出现的次数。如果出现的次数比较多一般就认为更相关。和TF-IDF不同BM25最大的贡献之一就是挖掘出了词频和相关性之间的关系是非线性的这是一个初看有违常理但细想又很有道理的洞察。
具体来说每一个词对于文档相关性的分数不会超过一个特定的阈值。这个阈值当然是动态的根据文档本身会有调整。这个特征就把BM25里的词频计算和一般的TF区分开了。也就是说词频本身需要“标准化”Normalization要达到的效果是某一个单词对最后分数的贡献不会随着词频的增加而无限增加。
那BM25里词频的标准化是怎么做的呢就是某一个词的词频除以这个词的词频加上一个权重。这个权重包含两个超参数Hyper-parameter这些超参数后期是可以根据情况手动调整的。这个做法在非监督的排序算法中很普遍。同时这个权重还包括两个重要信息第一当前文档的长度第二整个数据集所有文档的平均长度。
这几个因素混合在一起,我们就得到了一个新的词频公式,既保证单词相对于文档的相关度和这个单词的词频呈现某种正向关系,又根据文档的相对长度,也就是原始长度和所有文档长度的一个比值关系,外加一些超参数,对词频进行了限制。
有了单词相对于文档的相关度计算公式作为基础,单词相对于查询关键字的相关度可以说是异曲同工。首先,我们需要计算单词在查询关键字中的词频。然后,对这个词频进行类似的标准化过程。
和文档的标准化过程唯一的区别这里没有采用文档的长度。当然对于查询关键字来说如果需要使用长度也应该是使用查询关键字的长度和平均长度。但是根据BM25经典公式来说这一部分并没有使用长度信息进行重新标准化。
接着我来谈谈最后一个部分,单词权重的细节,通常有两种选择。
**第一种选择就是直接采用某种变形的IDF来对单词加权**。一般来说IDF就是利用对数函数Log函数对“文档频率”也就是有多少文档包含某个单词信息进行变换。这里回顾一下周一讲的内容IDF是“文档频率”的倒数并且通过对数函数进行转换。如果在这里使用IDF的话那么整个BM25就可以看作是一个某种意义下的TF-IDF只不过TF的部分是一个复杂的基于文档和查询关键字、有两个部分的词频函数。
**第二种单词的权重选择叫作“罗伯逊-斯巴克-琼斯”权重Robertson-Spärck-Jones简称RSJ值**是由计算机科学家斯蒂芬·罗伯逊和卡伦·琼斯合作发现。我们刚才讲过这两位都是重要的信息检索学术权威。这个权重其实就是一个更加复杂版本的IDF。一个关键的区别是RSJ值需要一个监督信息就是要看文档对于某个查询关键字是否相关而IDF并不需要。
对比以上两种思路在很多情况下利用IDF来直接进行单词权重的版本更加普遍。如果在有监督信息的情况下RSJ值也不失为一个很好的选择。
通过这里简单的介绍,我们可以很容易地发现,**BM25其实是一个经验公式**。这里面的每一个成分都是经过很多研究者的迭代而逐步发现的。很多研究在理论上对BM25进行了建模从“概率相关模型”Probabilistic Relevance Model入手推导出**BM25其实是对某一类概率相关模型的逼近**。对这一部分我在这里就不展开论述了。需要你记住的是BM25虽然是经验公式但是在实际使用中经常表现出惊人的好效果。因此很有必要对这一类文档检索算法有所了解。
## BM25算法变种
由于BM25的情况一方面是经验公式另一方面是某种理论模型的逼近这样就出现了各式各样的BM25变种。这里我仅仅介绍一些有代表性的扩展。
一个重要的扩展是**BM25F**也就是在BM25的基础上再多个“域”Field文档上的计算。这里“域”的概念可以理解成一个文档的多个方面。比如对于很多文档来说文档包括标题、摘要和正文。这些组成部分都可以认为是不同的“域”。那么如何结合不同的“域”让文档的相关性能够统一到一个分数上就是BM25F的核心内容。
具体来说BM25F对于BM25的扩展很直观。那就是每一个单词对于文档的相关性是把各个域当做一个“小文档”的加权平均。也就是说我们先把每个域当做单独的文档计算词频进行标准化。然后集合每个域的值进行加权平均再乘以词的权重我们上面提到了用IDF或者是RSJ值
另外一个重要的扩展就是**把BM25和其他文档信息非文字结合起来**。这个想法是在“学习排序”Learning To Rank这一思路出现以前的一种普遍的做法往往就是用线性加权的形式直接把各种信息相结合。例如在21世纪初期比较流行的做法是用BM25和PageRank的线性结合来确定网页的相关度。这里面BM25是和某个查询关键字有联系的信息而PageRank则是一个网页的总体权重。
## 小结
今天我为你讲了文档检索领域或者说搜索领域里最基本的一个技术BM25。我们可以看到BM25由三个核心的概念组成包括词在文档中相关度、词在查询关键字中的相关度以及词的权重。BM25是一个长期积累的经验公式也有很深的理论支持是一个强有力的非监督学习方法的文本排序算法。
一起来回顾下要点第一简要介绍了BM25的历史。第二详细介绍了BM25算法的三个主要组成部分。第三简要地介绍了BM25的一些变种 。
最后给你留一个思考题虽然BM25是非监督的排序方法并且我们提到其中有一些超参数那么是否可以通过机器学习的手段来学习到这些超参数的最佳取值呢
欢迎你给我留言,和我一起讨论。
* * *
![](https://static001.geekbang.org/resource/image/5c/08/5c89fe07fe0e5a5f1e4f8491ac592408.jpg)