文本相似度计算-bm25算法详解

1 bm25

说到bm25算法,那么就不得不说一下TF-IDF了,关于TF-IDF,解释如下:

1.1 TF-IDF介绍

TFTerm Frequency即词频,是文本中某个词出现的次数

IDF:Inverse Document Frequency即逆文本频率,那么关键是理解IDF的含义,首先我们给出IDF的计算公式:

                                                             

解释符号的含义:N是代表文本总数,N(x)是代表文本中含有x这个词的文本总数。直观来看,若一个词在所有的文本中都有出现,那么这个词的IDF应该是0,相反,如果一个词的只是出现一次,那么这个词的IDF应该是为1的。

两者的乘积即代表了某一个词的TF-IDF的值:

                                                    

1.2 TF-IDF与向量化比较

众所周知,我们的词向量的一个表示方式是向量化(关于向量化这里不详细介绍):

首先是反应文本中某个词的重要性:在基于向量化的方式中,某个词出现了,那么这个位置的向量就变为1,多次出现则+1,这个可能导致某些多次出现的词重要性偏高,但是实际上有很多不是这样的情况:比如一篇文章中,to出现了多次,但是 to是没有什么具体的意义的。但是在使用了IF-IDF后,我们可以正确的反应每个词的重要性。

其次是:向量化可能导致表示句子的向量过长,文本太大的情况下,内存不够。

好了,说了这么多,那么我们接下来就开始介绍我们的bm25算法了:

1.3 bm25详解

有了上面的关于IF-IDF的铺垫,那么bm25算法解释起来也就不困难了,bm25算法也就是文本相似度算法,主要的主要的思想就是计算词q1,q2...qn和文档的相关度,然后再把分数做累加操作。公式如下:

                                                                

其中R(qi,d)是查询语句query中每个词qi和文档d的相关度值,Wi是该词的权重,最后将所有词的Wi∗R(qi,d)相加。

现在来说明这两个变量的计算方式:

一般来说是关于某个词的IDF的值,那么 这个值怎么计算呢?

                                                                    

其中k1,k2,b都是调节因子,一般k1=1,k2=1,b=0.75 式中qfi为词qi在查询语句query中的出现频率,fiqi在文档d中的出现频率。由于绝大多数情况下一条简短的查询语句query中,词qi只会出现一次,即qfi=1,因此公式可化简为:

                                                                     

K的表达式为:

                                                                    

dl为文档d的长度,avgdl为所有文档的平均长度。意即该文档d的长度和平均长度比越大,则K越大,则相关度R(qi,d)越小,b为调节因子,b越大,则文档长度所占的影响因素越大,反之则越小。

猜你喜欢

转载自blog.csdn.net/sir_TI/article/details/88135434