BM25算法Best Matching

讲的很好的
BM25是信息检索领域用来计算query与文档相似度得分的经典算法.
不同与TFIDF, BM25 的公式主要由三部分组成:

  1. query 中每个单词t与文档d之间的相关性
  2. 单词t与query之间的相似性
  3. 每个单词的权重

BM25 带来的好处: BM25 vs TFIDF

BM25公式

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)=inWiR(qi,d)
其中

  • Q表示一条query,
  • q_i 表示 query中的单词,
  • d表示某个搜索文档.
  • W_i 表示单词权重
  • R(q_i, d) 表示单词qi与文档d的相关性得分.

如何定义Wi

如何定义Wi? 判断一个词与一个文档的相关性权重,方法有很多种, 较为常见的是IDF(逆文档频率). 比如TFIDF里面也是用IDF作为词的权重. l o g ∣ D ∣ ∣ D t ∣ + 1 log \frac {|D|}{|D_t| + 1} logDt+1D |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.5Nn(qi)+0.5
N是文档总数, n(q_i)是含有qi的文档数.

根据IDF的定义可以看出来, 对于给定的文档集合, 包含了qi的文档数越多,qi的权重越低, 也就是说 当很多文档都包含qi时, qi的区分度就不高,因此用qi来判断相关性的重要度就比较低.

词qi与文档d的相关性得分R(qi, d)

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(1b+bavgdldl)

其中, 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的作用是调整文档长度对相关性影响的大小.

  • b越大,文档长度对相关性得分的影响越大,反之越小.
  • 文档的相对长度越长, K值越大,则相关性得分会越小.
    上面可以理解为 当文档较长时, 包含qi的机会越大, 因此,同等fi的情况下, 长文档与qi的相关性应该比短文档与qi的相关性弱.

你可能感兴趣的:(NLP)