背景
在信息搜索中,我们做的第一步就是检索。对于文本检索中,第一步就是数据库中的内容与检索的内容进行匹配,符合匹配要求的话就根据相关业务处理。
在NLP中,我们可以认为是要让机器去理解检索内容,然后从现有数据库中返回对应内容。从这看文本匹配就是NLU(Nature Language Understand ,自然语言理解)中的核心内容了。
再延展一下,搜索这项功能在我们生活中也是太多太多。大众一点就是搜索引擎,商品搜索等,在问题系统中可以匹配相似的问题,然后返回对应答案等。
文本匹配包括监督学习方法以及非监督学习方法。或者分为传统方法和深度学习方法。传统的非监督学习方法有:Jaccard,Levenshtein(编辑距离),Simhash,BM25,VSM(向量空间)等,最具代表的算法当属BM25。其在著名的搜索解决方案Elastic中就有相关的使用。
BM25
BM25 在 20 世纪 70 年代到 80 年代被提出,到目前为止已经过去二三十年了,但是这个算法依然在很多信息检索的任务中表现优异,是很多工程师首选的算法之一。有时候全称是 Okapi BM25,这里的“BM”是“最佳匹配”(Best Match)的简称。
现代 BM25 算法是用来计算某一个目标文档(Document)相对于一个查询关键字(Query)的“相关性”(Relevance)的流程。通常情况下,BM25 是“非监督学习”排序算法中的一个典型代表。
下面部分内容参考文本相似度-bm25算法原理及实现。
假如我们有一系列的文档,现在要搜索。BM25的思想是,对进行语素解析,生成语素;然后对于每个搜索文档计算每个语素与文档的相关性,最后将所有的语素与进行加权求和,从而对搜索与之间的相似性得分。将BM25算法总结成以下公式:
在中文中,我们通常将每一个词语当做,表示语素的权重,表示语素与文档的相关性得分关系。
判断一个词语与一个文档的相关性权重,较常用的就是TF-IDF算法中的IDF,该算法使用的公式如下:
其中:
- N 表示待检索文档的数目
- 表示包含的文档数
IDF的物理意义就是:对应给定的文档集合,包含的文档多了,那么的权重就应该低一点。
对于语素与文档的相关性得分,其在BM25算法中的公式如下:
这里引入多个变量,其中:
- ,,为调节因子,根据经验通常为
- 表示在中出现的频率(次数)
- 表示在中出现的频率(次数)
- 表示文档长度
- 表示所有文档的平均长度
从公式可以看出的物理意义:调整文档长度对相关性的影响。越大,则就越小,相关性得分就越大,反之越小。文档长度越长,也会变大,相关性得分就会越小,其在相关性得分作用可以这样理解:当文档较长时,那么包含的概率就变大,那么长文档与的相关性应该比段文档与的相关性要弱。
通常,在中出现的一次,则也可将公式化简成以下形式:
综上来说,BM25算法的相关性得分公式可有如下形式:
那么,当通过使用不同的语素分析方法,语素权重判定方法以及语素与文档的相关性判定方法,可以衍生很多不同的搜索相关性计算方法,灵活性也比较大。