1 bm25
说到bm25
算法,那么就不得不说一下TF-IDF
了,关于TF-IDF
,解释如下:
1.1 TF-IDF
介绍
TF
:Term 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
中的出现频率,fi
为qi
在文档d
中的出现频率。由于绝大多数情况下一条简短的查询语句query
中,词qi
只会出现一次,即qfi=1
,因此公式可化简为:
K的表达式为:
dl
为文档d的长度,avgdl
为所有文档的平均长度。意即该文档d的长度和平均长度比越大,则K越大,则相关度R(qi,d)
越小,b为调节因子,b越大,则文档长度所占的影响因素越大,反之则越小。