Skip to content

Commit

Permalink
test multiline formula
Browse files Browse the repository at this point in the history
  • Loading branch information
GaoangLiu committed Nov 4, 2023
1 parent ed56cc4 commit fb4208d
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 22 deletions.
18 changes: 7 additions & 11 deletions _drafts/2022/bm25.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ categories:
- rank
---


在检索中,根据一个词查询相关文档,最简单的倒排索引和布尔检索。这两种方法只考虑查询词项在每个文档中出现与否,忽略了词项出现的次数。直觉上,**一个词项在文档中出现次数越多,那么该词项和文档的相关性也应该越大**。因此,可以将词项 t 在文档 d 中出现的次数,即词项频率 tf(term frequency)作为词项的权重。

然而,仅使用词项频率,是将所有词项视为“同等重要”又太简单粗暴。**检索的目的是在给定文档集中找出匹配的文档,假设一个词项无法很好的区分一个文档与其他文档,那么这个词项的权重理应很小**。比如一批跟手机相关的文档集中,几乎所有文档均包含“手机”,但有一小部分文档包含了“iPhone”,那么在检索时,“手机”意义并不大,但“iPhone”可以帮助筛掉很多文档。因此,一个直观的想法是,在计算权重时也要考虑包含词项的文档数量,即文档频率 DF(document frequency)。
Expand All @@ -25,11 +26,9 @@ $$w_{t,d} = \text{TF}(t, d) \cdot \text{IDF}(t)$$
针对第一种情况,可以对 TF 进行约束,比如取开方,同样的思想也适用于 IDF。
针对第二种情况,可以对文档长度进行归一化,比如除以文档长度,这样长文档和短文档的权重就可以比较了。那么,一个词项 $t$ 在文档 $d$ 中的权重 $w_{t,d}$ 可以定义为:

$\begin{aligned}
w_{t,d} &= \sqrt{\text{TF}(t, d)} \cdot \frac{1}{\text{DL}(d)} \cdot \text{IDF}(t)\\
&= \sqrt{\text{TF}(t, d)} \cdot \frac{1}{\text{DL}(d)} \cdot \log \frac{N}{\text{DF}(t)} \\
&=_{\text{smooth IDF}} \sqrt{\text{TF}(t, d)} \cdot \frac{1}{\text{DL}(d)} \cdot \log ( \frac{N + 1}{\text{DF}(t) + 1})
\end{aligned}$
<figure class="half">
<img src="https://latex.codecogs.com/svg.image?\large&space;\begin{aligned}w_{t,d}&=\sqrt{\text{TF}(t,d)}\cdot\frac{1}{\text{DL}(d)}\cdot\text{IDF}(t)\\&=\sqrt{\text{TF}(t,d)}\cdot\frac{1}{\text{DL}(d)}\cdot\log\frac{N}{\text{DF}(t)}\\&=_{\text{smooth&space;IDF}}\sqrt{\text{TF}(t,d)}\cdot\frac{1}{\text{DL}(d)}\cdot\log(\frac{N&plus;1}{\text{DF}(t)&plus;1})\end{aligned}" width=300pt>
</figure>

其中 $\text{DL}(d)$ 是文档 $d$ 的长度,$\text{DF}(t)$ 是包含词项 $t$ 的文档数量,$N$ 是文档集合的大小。

Expand Down Expand Up @@ -81,23 +80,20 @@ $$\text{TF}^{bm25}(t, d) = \frac{x \cdot (k+1)}{x + k(1 - b(1 - \frac{\text{DL}}
## IDF 上的约束
这一项说是拓展了二元独立模型的得分函数,具体推理可以参考[博客](https://www.cnblogs.com/bentuwuying/p/6730891.html)

$$
\begin{aligned}
\text{IDF}^{bm25}(t) &= \log \frac{N - \text{DF}(t) + 0.5}{\text{DF}(t) + 0.5} \\
&= \log (\frac{N+1}{\text{DF}(t)+0.5} - 1)
\end{aligned}
$$


同样, +0.5 是为了平滑,且“分子上凑个数”,满足:当 DF(t)=N 时,这一项为 0。整体上跟 TF-IDF 的差距不大。


## 神奇的数字 25
据说是指第 25 次迭代调参才获得最终的算法,参考 https://opensourceconnections.com/blog/2015/10/16/bm25-the-next-generation-of-lucene-relevation/


<img src="https://image.ddot.cc/202311/fdcfb1a1-c20f-4a61-b287-940c22d2711c_rc.png" width=678pt>

<center>
<img src="https://image.ddot.cc/202311/fdcfb1a1-c20f-4a61-b287-940c22d2711c_rc.png" width=678pt>
</center>

## 局限性
适用场景:
Expand Down
18 changes: 7 additions & 11 deletions _posts/2022/2022-11-17-Okapi-BM25.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ author: GaoangLau
{:toc}



在检索中,根据一个词查询相关文档,最简单的倒排索引和布尔检索。这两种方法只考虑查询词项在每个文档中出现与否,忽略了词项出现的次数。直觉上,**一个词项在文档中出现次数越多,那么该词项和文档的相关性也应该越大**。因此,可以将词项 t 在文档 d 中出现的次数,即词项频率 tf(term frequency)作为词项的权重。


Expand All @@ -31,11 +32,9 @@ $$w_{t,d} = \text{TF}(t, d) \cdot \text{IDF}(t)$$
针对第一种情况,可以对 TF 进行约束,比如取开方,同样的思想也适用于 IDF。
针对第二种情况,可以对文档长度进行归一化,比如除以文档长度,这样长文档和短文档的权重就可以比较了。那么,一个词项 $$t$$ 在文档 $$d$$ 中的权重 $$w_{t,d}$$ 可以定义为:

$\begin{aligned}
w_{t,d} &= \sqrt{\text{TF}(t, d)} \cdot \frac{1}{\text{DL}(d)} \cdot \text{IDF}(t)\\
&= \sqrt{\text{TF}(t, d)} \cdot \frac{1}{\text{DL}(d)} \cdot \log \frac{N}{\text{DF}(t)} \\
&=_{\text{smooth IDF}} \sqrt{\text{TF}(t, d)} \cdot \frac{1}{\text{DL}(d)} \cdot \log ( \frac{N + 1}{\text{DF}(t) + 1})
\end{aligned}$
<figure class="half">
<img src="https://latex.codecogs.com/svg.image?\large&space;\begin{aligned}w_{t,d}&=\sqrt{\text{TF}(t,d)}\cdot\frac{1}{\text{DL}(d)}\cdot\text{IDF}(t)\\&=\sqrt{\text{TF}(t,d)}\cdot\frac{1}{\text{DL}(d)}\cdot\log\frac{N}{\text{DF}(t)}\\&=_{\text{smooth&space;IDF}}\sqrt{\text{TF}(t,d)}\cdot\frac{1}{\text{DL}(d)}\cdot\log(\frac{N&plus;1}{\text{DF}(t)&plus;1})\end{aligned}" width=300pt>
</figure>

其中 $$\text{DL}(d)$$ 是文档 $$d$$ 的长度,$$\text{DF}(t)$$ 是包含词项 $$t$$ 的文档数量,$$N$$ 是文档集合的大小。

Expand Down Expand Up @@ -87,23 +86,20 @@ $$\text{TF}^{bm25}(t, d) = \frac{x \cdot (k+1)}{x + k(1 - b(1 - \frac{\text{DL}}
## IDF 上的约束
这一项说是拓展了二元独立模型的得分函数,具体推理可以参考[博客](https://www.cnblogs.com/bentuwuying/p/6730891.html)

$$
\begin{aligned}
\text{IDF}^{bm25}(t) &= \log \frac{N - \text{DF}(t) + 0.5}{\text{DF}(t) + 0.5} \\
&= \log (\frac{N+1}{\text{DF}(t)+0.5} - 1)
\end{aligned}
$$


同样, +0.5 是为了平滑,且“分子上凑个数”,满足:当 DF(t)=N 时,这一项为 0。整体上跟 TF-IDF 的差距不大。


## 神奇的数字 25
据说是指第 25 次迭代调参才获得最终的算法,参考 https://opensourceconnections.com/blog/2015/10/16/bm25-the-next-generation-of-lucene-relevation/


<img src="https://image.ddot.cc/202311/fdcfb1a1-c20f-4a61-b287-940c22d2711c_rc.png" width=678pt>

<center>
<img src="https://image.ddot.cc/202311/fdcfb1a1-c20f-4a61-b287-940c22d2711c_rc.png" width=678pt>
</center>

## 局限性
适用场景:
Expand Down
Binary file added d9c1006e-8fdf-4125-b95c-c066e56c02ed.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/2022/bm25-tf.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit fb4208d

Please sign in to comment.