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$的計算公式爲:spa
$ 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)})$query
在這裏$len(D)$表示文檔集合$D$中文檔的總數,$n(i)$表示含有$w_i$這個詞的文檔的數量。co
獲得$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$的做用主要是調節文本長度對相關性的影響。