讲的很好的
BM25是信息检索领域用来计算query与文档相似度得分的经典算法.
不同与TFIDF, BM25 的公式主要由三部分组成:
- query 中每个单词t与文档d之间的相关性
- 单词t与query之间的相似性
- 每个单词的权重
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)=i∑nWiR(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} 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来判断相关性的重要度就比较低.
词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∗(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的作用是调整文档长度对相关性影响的大小.
- b越大,文档长度对相关性得分的影响越大,反之越小.
- 文档的相对长度越长, K值越大,则相关性得分会越小.
上面可以理解为 当文档较长时, 包含qi的机会越大, 因此,同等fi的情况下, 长文档与qi的相关性应该比短文档与qi的相关性弱.