文本相似度 — TF-IDF和BM25算法


1,$TF-IDF$算法

  $TF$是指歸一化后的詞頻,$IDF$是指逆文檔頻率。給定一個文檔集合$D$,有$d_1, d_2, d_3, ......, d_n \in D$。文檔集合總共包含$m$個詞(注:一般在計算$TF-IDF$時會去除如“的”這一類的停用詞),有$w_1, w_2, w_3, ......, w_m \in W$。我們現在以計算詞$w_i$在文檔$d_j$中的$TF-IDF$指為例。$TF$的計算公式為:

    $ TF = \frac{freq(i, j)} {max_{len}(j)} $

  在這里$freq(i, j)$ 為$w_i$在$d_j$中出現的頻率,$max_{len}(j)$為$d_j$長度。

  $TF$只能時描述詞在文檔中的頻率,但假設現在有個詞為”我們“,這個詞可能在文檔集$D$中每篇文檔中都會出現,並且有較高的頻率。那么這一類詞就不具有很好的區分文檔的能力,為了降低這種通用詞的作用,引入了$IDF$。

  $IDF$的表達式如下:

    $IDF = \log (\frac {len(D)} {n(i)})$

  在這里$len(D)$表示文檔集合$D$中文檔的總數,$n(i)$表示含有$w_i$這個詞的文檔的數量。

  得到$TF$和$IDF$之后,我們將這兩個值相乘得到$TF-IDF$的值:

    $TF-IDF = TF * IDF$ 

  $TF$可以計算在一篇文檔中詞出現的頻率,而$IDF$可以降低一些通用詞的作用。因此對於一篇文檔我們可以用文檔中每個詞的$TF-IDF$組成的向量來表示該文檔,再根據余弦相似度這類的方法來計算文檔之間的相關性。

 

2,$BM25$算法

  $BM25$算法通常用來做搜索相關性評分的,也是ES中的搜索算法,通常用來計算$query$和文本集合$D$中每篇文本之間的相關性。我們用$Q$表示$query$,在這里$Q$一般是一個句子。在這里我們要對$Q$進行語素解析(一般是分詞),在這里以分詞為例,我們對$Q$進行分詞,得到$q_1, q_2,......, q_t$這樣一個詞序列。給定文本$d \in D$,現在以計算$Q$和$d$之間的分數(相關性),其表達式如下:

    $Score(Q, d) = \sum_{i = 1}^t w_i * R(q_i, d)$

    上面式子中$w_i$表示$q_i$的權重,$R(q_i, d)$為$q_i$和$d$的相關性,$Score(Q, d)$就是每個語素$q_i$和$d$的相關性的加權和。

  $w_i$的計算方法有很多,一般是用$IDF$來表示的,但這里的$IDF$計算和上面的有所不同,具體的表達式如下:

    $w_i = IDF(q_i) = \log \frac {N - n(q_i) + 0.5} {n(q_i) + 0.5}$

  上面式子中$N$表示文本集合中文本的總數量,$n(q_i)$表示包含$q_i$這個詞的文本的數量,$0.5$主要是做平滑處理。

  $R(q_i, d)$的計算公式如下:

    $R(q_i, d) = \frac {f_i * (k_1 + 1)} {f_i + K} * \frac {qf_i * (k_2 + 1)} {qf_i + k_2}$

  其中

    $K = k_1 * (1 - b + b * \frac {dl} {avg dl})$

  上面式子中$f_i$為$q_i$在文本$d$中出現的頻率,$qf_i$為$q_i$在$Q$中出現的頻率,$k_1, k_2, b$都是可調節的參數,$dl, avg dl$分別為文本$d$的長度和文本集$D$中所有文本的平均長度。

  一般$qf_i = 1$,取$k_2 = 0$,則可以去除后一項,將上面式子改寫成:

    $R(q_i, d) = \frac {f_i * (k_1 + 1)} {f_i + K}$

  通常設置$k_1 = 2, b = 0.75$。參數$b$的作用主要是調節文本長度對相關性的影響。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM