讲的很好的
BM25是信息检索领域用来计算query与文档相似度得分的经典算法.
不同与TFIDF, BM25 的公式主要由三部分组成:
BM25 带来的好处: BM25 vs TFIDF
BM25的一般公式: (计算query Q与某个文档之间的BM25 Score)
S c o r e ( Q , d ) = ∑ i n W i R ( q i , d ) Score(Q, d) = \sum_{i}^n W_i R(q_i, d) Score(Q,d)=i∑nWiR(qi,d)
其中
如何定义Wi? 判断一个词与一个文档的相关性权重,方法有很多种, 较为常见的是IDF(逆文档频率). 比如TFIDF里面也是用IDF作为词的权重. l o g ∣ D ∣ ∣ D t ∣ + 1 log \frac {|D|}{|D_t| + 1} log∣Dt∣+1∣D∣ |D|是文档总数, |Dt| 是含有单词t的文档个数.
BM25 这里Wi其实也就是IDF:
I D F ( q i ) = l o g N − n ( q i ) + 0.5 n ( q i ) + 0.5 IDF(q_i) = log\frac {N-n(q_i) + 0.5}{n(q_i) + 0.5} IDF(qi)=logn(qi)+0.5N−n(qi)+0.5
N是文档总数, n(q_i)是含有qi的文档数.
根据IDF的定义可以看出来, 对于给定的文档集合, 包含了qi的文档数越多,qi的权重越低, 也就是说 当很多文档都包含qi时, qi的区分度就不高,因此用qi来判断相关性的重要度就比较低.
R ( q i , d ) = f i ∗ ( k 1 + 1 ) f i + K ∗ q f i ∗ ( k 2 + 2 ) q f i + k 2 R(qi, d) = \frac {f_i*(k_1 + 1)}{f_i + K} * \frac{qf_i*(k_2 + 2)}{qf_i + k_2} R(qi,d)=fi+Kfi∗(k1+1)∗qfi+k2qfi∗(k2+2)
K = k 1 ∗ ( 1 − b + b ∗ d l a v g d l ) K = k_1*(1-b+b*\frac{dl}{avgdl}) K=k1∗(1−b+b∗avgdldl)
其中, k1, k2,b 为调节因子, 通常根据经验设置.一般k1=2, b=0.75, fi为qi在d中出现的频率. qfi为qi在query中出现的频率. dl为文档d的长度. avgdl是所有文档的平均长度. 由于绝大部分情况下, qi在Query中只会出现一次, 即qfi=1, 第二项为1. 因此公式可以简化为
R ( q i , d ) = f i ∗ ( k 1 + 1 ) f i + K R(q_i, d) = \frac{f_i *(k_1 + 1)}{f_i + K} R(qi,d)=fi+Kfi∗(k1+1)
从K的定义中可以看到, 参数b的作用是调整文档长度对相关性影响的大小.